OLD | NEW |
(Empty) | |
| 1 <!doctype html> |
| 2 <head><script src="../../js/resources/js-test-pre.js"></script></head> |
| 3 |
| 4 <div id="test"></div> |
| 5 |
| 6 <script> |
| 7 description('This tests expected behaviour when modifying variables in a CSSVari
ablesMap 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-de
lete: 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-c
lear: 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-existi
ng-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> |
| 203 <script src="../../js/resources/js-test-post.js"></script> |
OLD | NEW |