Upstream version 5.34.98.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / LayoutTests / fast / css / variables / cssom-foreach-update.html
1 <!doctype html>
2 <head><script src="../../../resources/js-test.js"></script></head>
3
4 <div id="test"></div>
5
6 <script>
7 description('This tests expected behaviour when modifying variables in a CSSVariablesMap during a forEach() loop.');
8
9 // Test adding variable in forEach: pass
10 // Test deleting in forEach: pass
11 // Test clearing in forEach: pass
12 // Test adding then deleting in forEach: pass
13 // Test adding then clearing in forEach: pass
14 // Test deleting then adding in forEach: pass
15 // Test clearing then adding in forEach: pass
16 // Test updating visited variable in forEach: pass
17
18
19 var div = document.querySelector('#test');
20 var log;
21
22 function logIteration(name, value, nested)
23 {
24     if (nested)
25         log.push('Nested iteration (var-' + name + ': ' + value + ')');
26     else
27         log.push('Iteration (var-' + name + ': ' + value + ')');
28 }
29
30 debug('\nTest adding variable in forEach() over "var-existing: pass;"');
31 log = [];
32 div.style.var.set('existing', 'pass');
33 div.style.var.forEach(function(value, name, varMap) {
34     logIteration(name, value);
35     if (name === 'existing') {
36         log.push('Add variable (var-added: pass)');
37         varMap.set('added', 'pass');
38     }
39 });
40 shouldBeEqualToString('log[0]', 'Iteration (var-existing: pass)');
41 shouldBeEqualToString('log[1]', 'Add variable (var-added: pass)');
42 shouldBeEqualToString('log[2]', 'Iteration (var-added: pass)');
43 shouldBe('log.length', '3');
44
45 debug('\nTest deleting variable in forEach() over "var-existing: pass; var-to-delete: fail;"');
46 div.style.var.clear();
47 div.style.var.set('existing', 'pass');
48 div.style.var.set('to-delete', 'fail');
49 log = [];
50 div.style.var.forEach(function(value, name, varMap) {
51     logIteration(name, value);
52     if (name === 'existing') {
53         log.push('Delete variable (var-to-delete)');
54         varMap.delete('to-delete');
55     }
56 });
57 shouldBeEqualToString('log[0]', 'Iteration (var-existing: pass)');
58 shouldBeEqualToString('log[1]', 'Delete variable (var-to-delete)');
59 shouldBe('log.length', '2');
60
61 debug('\nTest clearing variables in forEach() over "var-existing: pass; var-to-clear: fail;"');
62 div.style.var.clear();
63 div.style.var.set('existing', 'pass');
64 div.style.var.set('to-clear', 'fail');
65 log = [];
66 div.style.var.forEach(function(value, name, varMap) {
67     logIteration(name, value);
68     if (name === 'existing') {
69         log.push('Clear variables');
70         varMap.clear();
71     }
72 });
73 shouldBeEqualToString('log[0]', 'Iteration (var-existing: pass)');
74 shouldBeEqualToString('log[1]', 'Clear variables');
75 shouldBe('log.length', '2');
76
77 debug('\nTest adding then deleting in forEach() over "var-existing: pass;"');
78 div.style.var.clear();
79 div.style.var.set('existing', 'pass');
80 log = [];
81 div.style.var.forEach(function(value, name, varMap) {
82     logIteration(name, value);
83     if (name === 'existing') {
84         log.push('Add variable (var-to-delete: fail)');
85         varMap.set('to-delete', 'fail');
86         log.push('Delete variable (var-to-delete)');
87         varMap.delete('to-delete');
88     }
89 });
90 shouldBeEqualToString('log[0]', 'Iteration (var-existing: pass)');
91 shouldBeEqualToString('log[1]', 'Add variable (var-to-delete: fail)');
92 shouldBeEqualToString('log[2]', 'Delete variable (var-to-delete)');
93 shouldBe('log.length', '3');
94
95 debug('\nTest adding then clearing in forEach() over "var-existing: pass;"');
96 div.style.var.clear();
97 div.style.var.set('existing', 'pass');
98 log = [];
99 div.style.var.forEach(function(value, name, varMap) {
100     logIteration(name, value);
101     if (name === 'existing') {
102         log.push('Add variable (var-to-clear: fail)');
103         varMap.set('to-clear', 'fail');
104         log.push('Clear variables (var-to-clear)');
105         varMap.clear('to-clear');
106     }
107 });
108 shouldBeEqualToString('log[0]', 'Iteration (var-existing: pass)');
109 shouldBeEqualToString('log[1]', 'Add variable (var-to-clear: fail)');
110 shouldBeEqualToString('log[2]', 'Clear variables (var-to-clear)');
111 shouldBe('log.length', '3');
112
113 debug('\nTest deleting then adding in forEach() over "var-existing: pass; var-to-delete: fail;"');
114 div.style.var.clear();
115 div.style.var.set('existing', 'pass');
116 div.style.var.set('to-delete', 'fail');
117 log = [];
118 div.style.var.forEach(function(value, name, varMap) {
119     logIteration(name, value);
120     if (name === 'existing') {
121         log.push('Delete variable (var-to-delete)');
122         varMap.delete('to-delete');
123         log.push('Add variable (var-added: pass)');
124         varMap.set('added', 'pass');
125     }
126 });
127 shouldBeEqualToString('log[0]', 'Iteration (var-existing: pass)');
128 shouldBeEqualToString('log[1]', 'Delete variable (var-to-delete)');
129 shouldBeEqualToString('log[2]', 'Add variable (var-added: pass)');
130 shouldBeEqualToString('log[3]', 'Iteration (var-added: pass)');
131 shouldBe('log.length', '4');
132
133 debug('\nTest clearing then adding in forEach() over "var-existing: pass; var-to-clear: fail;"');
134 div.style.var.clear();
135 div.style.var.set('existing', 'pass');
136 div.style.var.set('to-clear', 'fail');
137 log = [];
138 div.style.var.forEach(function(value, name, varMap) {
139     logIteration(name, value);
140     if (name === 'existing') {
141         log.push('Clear variables');
142         varMap.clear();
143         log.push('Add variable (var-added: pass)');
144         varMap.set('added', 'pass');
145     }
146 });
147 shouldBeEqualToString('log[0]', 'Iteration (var-existing: pass)');
148 shouldBeEqualToString('log[1]', 'Clear variables');
149 shouldBeEqualToString('log[2]', 'Add variable (var-added: pass)');
150 shouldBeEqualToString('log[3]', 'Iteration (var-added: pass)');
151 shouldBe('log.length', '4');
152
153 debug('\nTest updating visited variable in forEach() over "var-existing-a: pass; var-existing-b: pass;"');
154 div.style.var.clear();
155 div.style.var.set('existing-a', 'pass');
156 div.style.var.set('existing-b', 'pass');
157 log = [];
158 div.style.var.forEach(function(value, name, varMap) {
159     logIteration(name, value);
160     if (name === 'existing-b') {
161         log.push('Set variable (var-existing-a: fail)');
162         varMap.set('existing-a', 'fail');
163     }
164 });
165 shouldBeEqualToString('log[0]', 'Iteration (var-existing-a: pass)');
166 shouldBeEqualToString('log[1]', 'Iteration (var-existing-b: pass)');
167 shouldBeEqualToString('log[2]', 'Set variable (var-existing-a: fail)');
168 shouldBe('log.length', '3');
169
170 debug('\nTest nested forEach calls with addition and deletion() over "var-existing-a: pass; var-existing-b: pass;"');
171 div.style.var.clear();
172 div.style.var.set('existing-a', 'pass');
173 div.style.var.set('existing-b', 'pass');
174 log = [];
175 div.style.var.forEach(function(value, name, varMap) {
176     logIteration(name, value);
177     log.push('Call forEach()');
178     varMap.forEach(function(innerValue, innerName) {
179         logIteration(innerName, innerValue, true);
180         if (name === 'existing-a' && innerName === 'existing-b') {
181             log.push('Delete variable (var-existing-b)');
182             varMap.delete('existing-b');
183             log.push('Add variable (var-inner-added: pass)');
184             varMap.set('inner-added', 'pass');
185         }
186     });
187 });
188 shouldBeEqualToString('log[0]', 'Iteration (var-existing-a: pass)');
189 shouldBeEqualToString('log[1]', 'Call forEach()');
190 shouldBeEqualToString('log[2]', 'Nested iteration (var-existing-a: pass)');
191 shouldBeEqualToString('log[3]', 'Nested iteration (var-existing-b: pass)');
192 shouldBeEqualToString('log[4]', 'Delete variable (var-existing-b)');
193 shouldBeEqualToString('log[5]', 'Add variable (var-inner-added: pass)');
194 shouldBeEqualToString('log[6]', 'Nested iteration (var-inner-added: pass)');
195 shouldBeEqualToString('log[7]', 'Iteration (var-inner-added: pass)');
196 shouldBeEqualToString('log[8]', 'Call forEach()');
197 shouldBeEqualToString('log[9]', 'Nested iteration (var-existing-a: pass)');
198 shouldBeEqualToString('log[10]', 'Nested iteration (var-inner-added: pass)');
199 shouldBe('log.length', '11');
200
201 debug('');
202 </script>