4
4
*/
5
5
6
6
import IconView from '../../src/icon/iconview' ;
7
+ import normalizeHtml from '@ckeditor/ckeditor5-utils/tests/_utils/normalizehtml' ;
7
8
8
9
describe ( 'IconView' , ( ) => {
9
10
let view ;
@@ -22,6 +23,10 @@ describe( 'IconView', () => {
22
23
expect ( view . viewBox ) . to . equal ( '0 0 20 20' ) ;
23
24
} ) ;
24
25
26
+ it ( 'sets #fillColor' , ( ) => {
27
+ expect ( view . fillColor ) . to . equal ( '' ) ;
28
+ } ) ;
29
+
25
30
it ( 'creates element from template' , ( ) => {
26
31
expect ( view . element . tagName ) . to . equal ( 'svg' ) ;
27
32
expect ( view . element . getAttribute ( 'class' ) ) . to . equal ( 'ck-icon' ) ;
@@ -42,29 +47,90 @@ describe( 'IconView', () => {
42
47
43
48
describe ( 'inline svg' , ( ) => {
44
49
it ( 'should react to changes in view#content' , ( ) => {
45
- expect ( view . element . innerHTML = '' ) ;
50
+ assertIconInnerHTML ( view , '' ) ;
46
51
47
52
view . content = '<svg version="1.1" xmlns="http://www.w3.org/2000/svg"><g id="test"></g></svg>' ;
48
- expect ( view . element . innerHTML = '<g id="test"></g>' ) ;
53
+ assertIconInnerHTML ( view , '<g id="test"></g>' ) ;
49
54
50
55
view . content = '<svg version="1.1" xmlns="http://www.w3.org/2000/svg"></svg>' ;
51
- expect ( view . element . innerHTML = '' ) ;
56
+ assertIconInnerHTML ( view , '' ) ;
52
57
} ) ;
53
58
54
59
it ( 'works for #content with more than <svg> declaration' , ( ) => {
55
- expect ( view . element . innerHTML = '' ) ;
60
+ assertIconInnerHTML ( view , '' ) ;
56
61
57
62
view . content =
58
63
'<?xml version="1.0" encoding="utf-8"?><svg version="1.1" xmlns="http://www.w3.org/2000/svg"><g id="test"></g></svg>' ;
59
- expect ( view . element . innerHTML = '<g id="test"></g>' ) ;
64
+ assertIconInnerHTML ( view , '<g id="test"></g>' ) ;
60
65
} ) ;
61
66
62
67
it ( 'should respect parsed <svg>\'s viewBox attribute' , ( ) => {
63
- expect ( view . element . innerHTML = '' ) ;
68
+ assertIconInnerHTML ( view , '' ) ;
64
69
65
70
view . content = '<svg version="1.1" viewBox="10 20 30 40" xmlns="http://www.w3.org/2000/svg"><g id="test"></g></svg>' ;
66
71
expect ( view . viewBox ) . to . equal ( '10 20 30 40' ) ;
67
72
} ) ;
68
73
} ) ;
74
+
75
+ describe ( 'fill color' , ( ) => {
76
+ it ( 'should be set intially based on view#fillColor' , ( ) => {
77
+ view . fillColor = 'red' ;
78
+ view . content = '<svg version="1.1" xmlns="http://www.w3.org/2000/svg">' +
79
+ '<path class="ck-icon__fill"/>' +
80
+ '<path/>' +
81
+ '<path class="ck-icon__fill"/>' +
82
+ '</svg>' ;
83
+
84
+ expect ( view . element . children [ 0 ] . style . fill ) . to . equal ( 'red' ) ;
85
+ expect ( view . element . children [ 1 ] . style . fill ) . to . equal ( '' ) ;
86
+ expect ( view . element . children [ 2 ] . style . fill ) . to . equal ( 'red' ) ;
87
+ } ) ;
88
+
89
+ it ( 'should react to changes in view#fillColor' , ( ) => {
90
+ view . content = '<svg version="1.1" xmlns="http://www.w3.org/2000/svg">' +
91
+ '<path class="ck-icon__fill"/>' +
92
+ '<path/>' +
93
+ '<path class="ck-icon__fill"/>' +
94
+ '</svg>' ;
95
+
96
+ expect ( view . element . children [ 0 ] . style . fill ) . to . equal ( '' ) ;
97
+ expect ( view . element . children [ 1 ] . style . fill ) . to . equal ( '' ) ;
98
+ expect ( view . element . children [ 2 ] . style . fill ) . to . equal ( '' ) ;
99
+
100
+ view . fillColor = 'red' ;
101
+
102
+ expect ( view . element . children [ 0 ] . style . fill ) . to . equal ( 'red' ) ;
103
+ expect ( view . element . children [ 1 ] . style . fill ) . to . equal ( '' ) ;
104
+ expect ( view . element . children [ 2 ] . style . fill ) . to . equal ( 'red' ) ;
105
+ } ) ;
106
+
107
+ it ( 'should react to changes in view#content' , ( ) => {
108
+ view . content = '<svg version="1.1" xmlns="http://www.w3.org/2000/svg">' +
109
+ '<path class="ck-icon__fill"/>' +
110
+ '<path/>' +
111
+ '<path class="ck-icon__fill"/>' +
112
+ '</svg>' ;
113
+
114
+ view . fillColor = 'red' ;
115
+
116
+ expect ( view . element . children [ 0 ] . style . fill ) . to . equal ( 'red' ) ;
117
+ expect ( view . element . children [ 1 ] . style . fill ) . to . equal ( '' ) ;
118
+ expect ( view . element . children [ 2 ] . style . fill ) . to . equal ( 'red' ) ;
119
+
120
+ view . content = '<svg version="1.1" xmlns="http://www.w3.org/2000/svg">' +
121
+ '<path/>' +
122
+ '<path class="ck-icon__fill"/>' +
123
+ '</svg>' ;
124
+
125
+ expect ( view . element . children [ 0 ] . style . fill ) . to . equal ( '' ) ;
126
+ expect ( view . element . children [ 1 ] . style . fill ) . to . equal ( 'red' ) ;
127
+ } ) ;
128
+ } ) ;
69
129
} ) ;
70
130
} ) ;
131
+
132
+ function assertIconInnerHTML ( icon , expected ) {
133
+ // Edge adds the xmlns attribute to each node when obtaining from parent's innerHTML.
134
+ expect ( normalizeHtml ( icon . element . innerHTML . replace ( / x m l n s = " [ ^ " ] + " / , '' ) ) )
135
+ . to . equal ( expected ) ;
136
+ }
0 commit comments