| Index: LayoutTests/fast/css/variables/cssom-foreach-update.html
|
| diff --git a/LayoutTests/fast/css/variables/cssom-foreach-update.html b/LayoutTests/fast/css/variables/cssom-foreach-update.html
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..a16a90e69b1a86d0666b2dd219e23e99a4e8581a
|
| --- /dev/null
|
| +++ b/LayoutTests/fast/css/variables/cssom-foreach-update.html
|
| @@ -0,0 +1,203 @@
|
| +<!doctype html>
|
| +<head><script src="../../js/resources/js-test-pre.js"></script></head>
|
| +
|
| +<div id="test"></div>
|
| +
|
| +<script>
|
| +description('This tests expected behaviour when modifying variables in a CSSVariablesMap during a forEach() loop.');
|
| +
|
| +// Test adding variable in forEach: pass
|
| +// Test deleting in forEach: pass
|
| +// Test clearing in forEach: pass
|
| +// Test adding then deleting in forEach: pass
|
| +// Test adding then clearing in forEach: pass
|
| +// Test deleting then adding in forEach: pass
|
| +// Test clearing then adding in forEach: pass
|
| +// Test updating visited variable in forEach: pass
|
| +
|
| +
|
| +var div = document.querySelector('#test');
|
| +var log;
|
| +
|
| +function logIteration(name, value, nested)
|
| +{
|
| + if (nested)
|
| + log.push('Nested iteration (var-' + name + ': ' + value + ')');
|
| + else
|
| + log.push('Iteration (var-' + name + ': ' + value + ')');
|
| +}
|
| +
|
| +debug('\nTest adding variable in forEach() over "var-existing: pass;"');
|
| +log = [];
|
| +div.style.var.set('existing', 'pass');
|
| +div.style.var.forEach(function(value, name, varMap) {
|
| + logIteration(name, value);
|
| + if (name === 'existing') {
|
| + log.push('Add variable (var-added: pass)');
|
| + varMap.set('added', 'pass');
|
| + }
|
| +});
|
| +shouldBeEqualToString('log[0]', 'Iteration (var-existing: pass)');
|
| +shouldBeEqualToString('log[1]', 'Add variable (var-added: pass)');
|
| +shouldBeEqualToString('log[2]', 'Iteration (var-added: pass)');
|
| +shouldBe('log.length', '3');
|
| +
|
| +debug('\nTest deleting variable in forEach() over "var-existing: pass; var-to-delete: fail;"');
|
| +div.style.var.clear();
|
| +div.style.var.set('existing', 'pass');
|
| +div.style.var.set('to-delete', 'fail');
|
| +log = [];
|
| +div.style.var.forEach(function(value, name, varMap) {
|
| + logIteration(name, value);
|
| + if (name === 'existing') {
|
| + log.push('Delete variable (var-to-delete)');
|
| + varMap.delete('to-delete');
|
| + }
|
| +});
|
| +shouldBeEqualToString('log[0]', 'Iteration (var-existing: pass)');
|
| +shouldBeEqualToString('log[1]', 'Delete variable (var-to-delete)');
|
| +shouldBe('log.length', '2');
|
| +
|
| +debug('\nTest clearing variables in forEach() over "var-existing: pass; var-to-clear: fail;"');
|
| +div.style.var.clear();
|
| +div.style.var.set('existing', 'pass');
|
| +div.style.var.set('to-clear', 'fail');
|
| +log = [];
|
| +div.style.var.forEach(function(value, name, varMap) {
|
| + logIteration(name, value);
|
| + if (name === 'existing') {
|
| + log.push('Clear variables');
|
| + varMap.clear();
|
| + }
|
| +});
|
| +shouldBeEqualToString('log[0]', 'Iteration (var-existing: pass)');
|
| +shouldBeEqualToString('log[1]', 'Clear variables');
|
| +shouldBe('log.length', '2');
|
| +
|
| +debug('\nTest adding then deleting in forEach() over "var-existing: pass;"');
|
| +div.style.var.clear();
|
| +div.style.var.set('existing', 'pass');
|
| +log = [];
|
| +div.style.var.forEach(function(value, name, varMap) {
|
| + logIteration(name, value);
|
| + if (name === 'existing') {
|
| + log.push('Add variable (var-to-delete: fail)');
|
| + varMap.set('to-delete', 'fail');
|
| + log.push('Delete variable (var-to-delete)');
|
| + varMap.delete('to-delete');
|
| + }
|
| +});
|
| +shouldBeEqualToString('log[0]', 'Iteration (var-existing: pass)');
|
| +shouldBeEqualToString('log[1]', 'Add variable (var-to-delete: fail)');
|
| +shouldBeEqualToString('log[2]', 'Delete variable (var-to-delete)');
|
| +shouldBe('log.length', '3');
|
| +
|
| +debug('\nTest adding then clearing in forEach() over "var-existing: pass;"');
|
| +div.style.var.clear();
|
| +div.style.var.set('existing', 'pass');
|
| +log = [];
|
| +div.style.var.forEach(function(value, name, varMap) {
|
| + logIteration(name, value);
|
| + if (name === 'existing') {
|
| + log.push('Add variable (var-to-clear: fail)');
|
| + varMap.set('to-clear', 'fail');
|
| + log.push('Clear variables (var-to-clear)');
|
| + varMap.clear('to-clear');
|
| + }
|
| +});
|
| +shouldBeEqualToString('log[0]', 'Iteration (var-existing: pass)');
|
| +shouldBeEqualToString('log[1]', 'Add variable (var-to-clear: fail)');
|
| +shouldBeEqualToString('log[2]', 'Clear variables (var-to-clear)');
|
| +shouldBe('log.length', '3');
|
| +
|
| +debug('\nTest deleting then adding in forEach() over "var-existing: pass; var-to-delete: fail;"');
|
| +div.style.var.clear();
|
| +div.style.var.set('existing', 'pass');
|
| +div.style.var.set('to-delete', 'fail');
|
| +log = [];
|
| +div.style.var.forEach(function(value, name, varMap) {
|
| + logIteration(name, value);
|
| + if (name === 'existing') {
|
| + log.push('Delete variable (var-to-delete)');
|
| + varMap.delete('to-delete');
|
| + log.push('Add variable (var-added: pass)');
|
| + varMap.set('added', 'pass');
|
| + }
|
| +});
|
| +shouldBeEqualToString('log[0]', 'Iteration (var-existing: pass)');
|
| +shouldBeEqualToString('log[1]', 'Delete variable (var-to-delete)');
|
| +shouldBeEqualToString('log[2]', 'Add variable (var-added: pass)');
|
| +shouldBeEqualToString('log[3]', 'Iteration (var-added: pass)');
|
| +shouldBe('log.length', '4');
|
| +
|
| +debug('\nTest clearing then adding in forEach() over "var-existing: pass; var-to-clear: fail;"');
|
| +div.style.var.clear();
|
| +div.style.var.set('existing', 'pass');
|
| +div.style.var.set('to-clear', 'fail');
|
| +log = [];
|
| +div.style.var.forEach(function(value, name, varMap) {
|
| + logIteration(name, value);
|
| + if (name === 'existing') {
|
| + log.push('Clear variables');
|
| + varMap.clear();
|
| + log.push('Add variable (var-added: pass)');
|
| + varMap.set('added', 'pass');
|
| + }
|
| +});
|
| +shouldBeEqualToString('log[0]', 'Iteration (var-existing: pass)');
|
| +shouldBeEqualToString('log[1]', 'Clear variables');
|
| +shouldBeEqualToString('log[2]', 'Add variable (var-added: pass)');
|
| +shouldBeEqualToString('log[3]', 'Iteration (var-added: pass)');
|
| +shouldBe('log.length', '4');
|
| +
|
| +debug('\nTest updating visited variable in forEach() over "var-existing-a: pass; var-existing-b: pass;"');
|
| +div.style.var.clear();
|
| +div.style.var.set('existing-a', 'pass');
|
| +div.style.var.set('existing-b', 'pass');
|
| +log = [];
|
| +div.style.var.forEach(function(value, name, varMap) {
|
| + logIteration(name, value);
|
| + if (name === 'existing-b') {
|
| + log.push('Set variable (var-existing-a: fail)');
|
| + varMap.set('existing-a', 'fail');
|
| + }
|
| +});
|
| +shouldBeEqualToString('log[0]', 'Iteration (var-existing-a: pass)');
|
| +shouldBeEqualToString('log[1]', 'Iteration (var-existing-b: pass)');
|
| +shouldBeEqualToString('log[2]', 'Set variable (var-existing-a: fail)');
|
| +shouldBe('log.length', '3');
|
| +
|
| +debug('\nTest nested forEach calls with addition and deletion() over "var-existing-a: pass; var-existing-b: pass;"');
|
| +div.style.var.clear();
|
| +div.style.var.set('existing-a', 'pass');
|
| +div.style.var.set('existing-b', 'pass');
|
| +log = [];
|
| +div.style.var.forEach(function(value, name, varMap) {
|
| + logIteration(name, value);
|
| + log.push('Call forEach()');
|
| + varMap.forEach(function(innerValue, innerName) {
|
| + logIteration(innerName, innerValue, true);
|
| + if (name === 'existing-a' && innerName === 'existing-b') {
|
| + log.push('Delete variable (var-existing-b)');
|
| + varMap.delete('existing-b');
|
| + log.push('Add variable (var-inner-added: pass)');
|
| + varMap.set('inner-added', 'pass');
|
| + }
|
| + });
|
| +});
|
| +shouldBeEqualToString('log[0]', 'Iteration (var-existing-a: pass)');
|
| +shouldBeEqualToString('log[1]', 'Call forEach()');
|
| +shouldBeEqualToString('log[2]', 'Nested iteration (var-existing-a: pass)');
|
| +shouldBeEqualToString('log[3]', 'Nested iteration (var-existing-b: pass)');
|
| +shouldBeEqualToString('log[4]', 'Delete variable (var-existing-b)');
|
| +shouldBeEqualToString('log[5]', 'Add variable (var-inner-added: pass)');
|
| +shouldBeEqualToString('log[6]', 'Nested iteration (var-inner-added: pass)');
|
| +shouldBeEqualToString('log[7]', 'Iteration (var-inner-added: pass)');
|
| +shouldBeEqualToString('log[8]', 'Call forEach()');
|
| +shouldBeEqualToString('log[9]', 'Nested iteration (var-existing-a: pass)');
|
| +shouldBeEqualToString('log[10]', 'Nested iteration (var-inner-added: pass)');
|
| +shouldBe('log.length', '11');
|
| +
|
| +debug('');
|
| +</script>
|
| +<script src="../../js/resources/js-test-post.js"></script>
|
|
|