OLD | NEW |
| (Empty) |
1 <!doctype html> | |
2 <html> | |
3 <head> | |
4 <script src="../../../resources/js-test.js"></script> | |
5 <script src="../../dom/shadow/resources/shadow-dom.js"></script> | |
6 <script> | |
7 shouldBeDefined("window.internals"); | |
8 | |
9 var borderColor; | |
10 | |
11 function borderColorShouldBe(node, color) | |
12 { | |
13 borderColor = document.defaultView.getComputedStyle(node, null).getPropertyV
alue('border-color'); | |
14 shouldBeEqualToString('borderColor', color); | |
15 } | |
16 | |
17 function cleanUp() | |
18 { | |
19 document.getElementById('sandbox').innerHTML = ''; | |
20 } | |
21 | |
22 function testBasic() | |
23 { | |
24 debug('test a scoped style in document is applied to a node in shadow dom su
btree when apply-author-styles is true.'); | |
25 document.getElementById('sandbox').appendChild( | |
26 createDOM('div', {}, | |
27 createDOM('style', {'scoped': 'scoped'}, | |
28 document.createTextNode('div { border: 1px solid red; }')), | |
29 createDOM('div', {'id': 'host'}, | |
30 createShadowRoot( | |
31 createDOM('div', {'id': 'target'}))))); | |
32 | |
33 // before | |
34 getNodeInTreeOfTrees('host/').applyAuthorStyles = false; | |
35 borderColorShouldBe(getNodeInTreeOfTrees('host/target'), 'rgb(0, 0, 0)'); | |
36 | |
37 // after | |
38 getNodeInTreeOfTrees('host/').applyAuthorStyles = true; | |
39 borderColorShouldBe(getNodeInTreeOfTrees('host/target'), 'rgb(255, 0, 0)'); | |
40 | |
41 cleanUp(); | |
42 } | |
43 | |
44 function testEnclosingShadow() | |
45 { | |
46 debug('test a style in an enclosing shadow dom tree is applied to a node in
shadow subtree when apply-author-styles is true.'); | |
47 document.getElementById('sandbox').appendChild( | |
48 createDOM('div', {'id': 'host'}, | |
49 createShadowRoot( | |
50 createDOM('style', {}, | |
51 document.createTextNode('div { border: 1px solid red; }')), | |
52 createDOM('div', {'id': 'enclosed'}, | |
53 createShadowRoot( | |
54 createDOM('div', {'id': 'target'})))))); | |
55 | |
56 // before | |
57 getNodeInTreeOfTrees('host/enclosed/').applyAuthorStyles = false; | |
58 borderColorShouldBe(getNodeInTreeOfTrees('host/enclosed/target'), 'rgb(0, 0,
0)'); | |
59 | |
60 // after | |
61 getNodeInTreeOfTrees('host/enclosed/').applyAuthorStyles = true; | |
62 borderColorShouldBe(getNodeInTreeOfTrees('host/enclosed/target'), 'rgb(255,
0, 0)'); | |
63 | |
64 cleanUp(); | |
65 } | |
66 | |
67 function testEnclosingShadowWithScoped() | |
68 { | |
69 debug('test a scoped style in an enclosing shadow dom tree is applied to a n
ode in shadow subtree when apply-author-styles is true and the node is in the sc
ope.'); | |
70 document.getElementById('sandbox').appendChild( | |
71 createDOM('div', {'id': 'host'}, | |
72 createShadowRoot( | |
73 createDOM('div', {}, | |
74 createDOM('style', {'scoped': 'scoped'}, | |
75 document.createTextNode('div { border: 1px solid red; }'
)), | |
76 createDOM('div', {'id': 'outerInScope'}, | |
77 createShadowRoot( | |
78 createDOM('div', {'id': 'targetInScope'})))), | |
79 createDOM('div', {'id': 'outerOutOfScope'}, | |
80 createShadowRoot( | |
81 createDOM('div', {'id': 'targetOutOfScope'})))))); | |
82 | |
83 | |
84 // before | |
85 getNodeInTreeOfTrees('host/outerInScope/').applyAuthorStyles = false; | |
86 getNodeInTreeOfTrees('host/outerOutOfScope/').applyAuthorStyles = false; | |
87 | |
88 borderColorShouldBe(getNodeInTreeOfTrees('host/outerInScope/targetInScope'),
'rgb(0, 0, 0)'); | |
89 borderColorShouldBe(getNodeInTreeOfTrees('host/outerOutOfScope/targetOutOfSc
ope'), 'rgb(0, 0, 0)'); | |
90 | |
91 // after | |
92 getNodeInTreeOfTrees('host/outerInScope/').applyAuthorStyles = true; | |
93 getNodeInTreeOfTrees('host/outerOutOfScope/').applyAuthorStyles = true; | |
94 borderColorShouldBe(getNodeInTreeOfTrees('host/outerInScope/targetInScope'),
'rgb(255, 0, 0)'); | |
95 borderColorShouldBe(getNodeInTreeOfTrees('host/outerOutOfScope/targetOutOfSc
ope'), 'rgb(0, 0, 0)'); | |
96 | |
97 cleanUp(); | |
98 } | |
99 | |
100 function testNestedShadow() | |
101 { | |
102 debug('test styles declared in enclosing shadow trees should be applied to a
n enclosed shadow tree whose apply-atur-styles is true.'); | |
103 document.getElementById('sandbox').appendChild( | |
104 createDOM('div', | |
105 createDOM('style', {'scoped': 'scoped'}, | |
106 document.createTextNode('div { border: 1px solid red; }')), | |
107 createDOM('div', {'id': 'host'}, | |
108 createShadowRoot( | |
109 createDOM('style', {}, | |
110 document.createTextNode('div { border: 1px solid blue; }
')), | |
111 createDOM('div', {'id': 'outerMost'}, | |
112 createShadowRoot( | |
113 createDOM('div', {'id': 'outer'}, | |
114 createShadowRoot( | |
115 createDOM('div', {'id': 'target'}))))))))); | |
116 | |
117 getNodeInTreeOfTrees('host/').applyAuthorStyles = false; | |
118 getNodeInTreeOfTrees('host/outerMost/').applyAuthorStyles = false; | |
119 getNodeInTreeOfTrees('host/outerMost/outer/').applyAuthorStyles = false; | |
120 | |
121 // No styles should be applied. | |
122 borderColorShouldBe(getNodeInTreeOfTrees('host/outerMost/outer/target'), 'rg
b(0, 0, 0)'); | |
123 | |
124 getNodeInTreeOfTrees('host/outerMost/outer/').applyAuthorStyles = true; | |
125 // A style in document should be applied. | |
126 borderColorShouldBe(getNodeInTreeOfTrees('host/outerMost/outer/target'), 'rg
b(0, 0, 255)'); | |
127 | |
128 getNodeInTreeOfTrees('host/outerMost/').applyAuthorStyles = true; | |
129 // Not depend on apply-author-styles flags of parent shadow trees. | |
130 borderColorShouldBe(getNodeInTreeOfTrees('host/outerMost/outer/target'), 'rg
b(0, 0, 255)'); | |
131 | |
132 cleanUp(); | |
133 } | |
134 | |
135 function testMultipleShadow() | |
136 { | |
137 debug('test a style in document is applied to nodes in multiple shadow subtr
ees when apply-author-styles is true.'); | |
138 document.getElementById('sandbox').appendChild( | |
139 createDOM('div', {'id': 'host'}, | |
140 createShadowRoot( | |
141 createDOM('shadow', {}), | |
142 createDOM('div', {'id': 'oldestShadow'})), | |
143 createShadowRoot( | |
144 createDOM('style', {'scoped': 'scoped'}, | |
145 document.createTextNode('div { border: 1px solid blue }')), | |
146 createDOM('shadow', {}), | |
147 createDOM('div', {'id': 'olderShadow'})), | |
148 createShadowRoot( | |
149 createDOM('shadow', {}), | |
150 createDOM('div', {'id': 'target'})), | |
151 | |
152 createDOM('style', {'scoped': 'scoped'}, | |
153 document.createTextNode('div { border: 1px solid red; }')), | |
154 createDOM('div', {}))); | |
155 | |
156 getNodeInTreeOfTrees('host/').applyAuthorStyles = false; | |
157 getNodeInTreeOfTrees('host//').applyAuthorStyles = false; | |
158 getNodeInTreeOfTrees('host///').applyAuthorStyles = false; | |
159 | |
160 // before | |
161 borderColorShouldBe(getNodeInTreeOfTrees('host/oldestShadow'), 'rgb(0, 0, 0)
'); | |
162 borderColorShouldBe(getNodeInTreeOfTrees('host//olderShadow'), 'rgb(0, 0, 25
5)'); | |
163 borderColorShouldBe(getNodeInTreeOfTrees('host///target'), 'rgb(0, 0, 0)'); | |
164 | |
165 // document ---+--- oldestShadow | |
166 // | | |
167 // +--- olderShadow | |
168 // | | |
169 // +--- shadow | |
170 | |
171 // apply-author-styles affects between shadow and document. | |
172 getNodeInTreeOfTrees('host///').applyAuthorStyles = true; | |
173 borderColorShouldBe(getNodeInTreeOfTrees('host/oldestShadow'), 'rgb(0, 0, 0)
'); | |
174 borderColorShouldBe(getNodeInTreeOfTrees('host//olderShadow'), 'rgb(0, 0, 25
5)'); | |
175 borderColorShouldBe(getNodeInTreeOfTrees('host///target'), 'rgb(255, 0, 0)')
; | |
176 | |
177 // apply-author-styles affects between older shadow and document. | |
178 getNodeInTreeOfTrees('host///').applyAuthorStyles = false; | |
179 getNodeInTreeOfTrees('host//').applyAuthorStyles = true; | |
180 borderColorShouldBe(getNodeInTreeOfTrees('host/oldestShadow'), 'rgb(0, 0, 0)
'); | |
181 borderColorShouldBe(getNodeInTreeOfTrees('host//olderShadow'), 'rgb(0, 0, 25
5)'); | |
182 borderColorShouldBe(getNodeInTreeOfTrees('host///target'), 'rgb(0, 0, 0)'); | |
183 | |
184 // apply-author-styles affects between oldest shadow and document. | |
185 getNodeInTreeOfTrees('host//').applyAuthorStyles = false; | |
186 getNodeInTreeOfTrees('host/').applyAuthorStyles = true; | |
187 borderColorShouldBe(getNodeInTreeOfTrees('host/oldestShadow'), 'rgb(255, 0,
0)'); | |
188 borderColorShouldBe(getNodeInTreeOfTrees('host//olderShadow'), 'rgb(0, 0, 25
5)'); | |
189 borderColorShouldBe(getNodeInTreeOfTrees('host///target'), 'rgb(0, 0, 0)'); | |
190 | |
191 cleanUp(); | |
192 } | |
193 | |
194 function testOrderOfApplyStyle() | |
195 { | |
196 debug('test a style is applied in document order.'); | |
197 | |
198 document.getElementById('sandbox').appendChild( | |
199 createDOM('div', {}, | |
200 createDOM('style', {'scoped': 'scoped'}, | |
201 document.createTextNode('div { border: 1px solid red }')), | |
202 createDOM('div', {'id': 'host'}, | |
203 createShadowRoot( | |
204 createDOM('style', {}, | |
205 document.createTextNode('div { border: 1px solid blue; }
')), | |
206 createDOM('div', {'id': 'outerMost'}, | |
207 createShadowRoot( | |
208 createDOM('style', {}, | |
209 document.createTextNode('div { border: 1px solid
green; }')), | |
210 createDOM('div', {'id': 'outer'}, | |
211 createShadowRoot( | |
212 createDOM('style', {}, | |
213 document.createTextNode('div { border: 1
px solid yellow; }')), | |
214 createDOM('div', {'id': 'target'}))))))))); | |
215 | |
216 getNodeInTreeOfTrees('host/').applyAuthorStyles = true; | |
217 getNodeInTreeOfTrees('host/outerMost/').applyAuthorStyles = true; | |
218 getNodeInTreeOfTrees('host/outerMost/outer/').applyAuthorStyles = true; | |
219 | |
220 // The last scoped style should be applied. | |
221 borderColorShouldBe(getNodeInTreeOfTrees('host/outerMost/outer/target'), 'rg
b(255, 255, 0)'); | |
222 | |
223 getNodeInTreeOfTrees('host/outerMost/outer/').innerHTML = '<div id="target">
target</div>'; | |
224 // The outer's scoped style should be applied. | |
225 borderColorShouldBe(getNodeInTreeOfTrees('host/outerMost/outer/target'), 'rg
b(0, 128, 0)'); | |
226 | |
227 cleanUp(); | |
228 } | |
229 | |
230 function runTests() { | |
231 testBasic(); | |
232 testEnclosingShadow(); | |
233 testEnclosingShadowWithScoped(); | |
234 testNestedShadow(); | |
235 testMultipleShadow(); | |
236 testOrderOfApplyStyle(); | |
237 } | |
238 </script> | |
239 </head> | |
240 <body onload="runTests()"> | |
241 <div id='sandbox'></div> | |
242 </body> | |
243 </html> | |
OLD | NEW |