Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 <!DOCTYPE html> | |
| 2 <script src="../../resources/testharness.js"></script> | |
|
pdr.
2016/08/24 18:42:15
This test copies fast/dom/script-tests/dataset.js.
ramya.v
2016/08/25 10:51:33
If we wrap this way, getting the below error at li
| |
| 3 <script src="../../resources/testharnessreport.js"></script> | |
| 4 <body> | |
| 5 <script> | |
| 6 var svgNS = "http://www.w3.org/2000/svg"; | |
| 7 | |
| 8 function getSVGCircle(c) { | |
| 9 c = document.createElementNS(svgNS,"circle"); | |
| 10 c.setAttributeNS(null, "cx", 25); | |
| 11 c.setAttributeNS(null, "cy", 25); | |
| 12 c.setAttributeNS(null, "r", 20); | |
| 13 return c; | |
| 14 } | |
| 15 | |
| 16 function testGet(attr, expected) | |
| 17 { | |
| 18 var c = getSVGCircle(c); | |
| 19 c.setAttribute(attr, "value"); | |
| 20 return c.dataset[expected] == "value"; | |
| 21 } | |
| 22 | |
| 23 test (function() { | |
| 24 assert_true(testGet('data-foo', 'foo')); | |
| 25 assert_true(testGet('data-foo-bar', 'fooBar')); | |
| 26 assert_true(testGet('data--', '-')); | |
| 27 assert_true(testGet('data--foo', 'Foo')); | |
| 28 assert_true(testGet('data---foo', '-Foo')); | |
| 29 assert_true(testGet('data---foo--bar', '-Foo-Bar')); | |
| 30 assert_true(testGet('data---foo---bar', '-Foo--Bar')); | |
| 31 assert_true(testGet('data-foo-', 'foo-')); | |
| 32 assert_true(testGet('data-foo--', 'foo--')); | |
| 33 assert_true(testGet('data-Foo', 'Foo')); | |
| 34 assert_true(testGet('data-', '')); | |
| 35 assert_true(testGet('data-\xE0', '\xE0')); | |
| 36 assert_true(testGet('data-1', '1')); | |
| 37 assert_true(testGet('data-01', '01')); | |
| 38 assert_true(testGet('data-zx81', 'zx81')); | |
| 39 assert_true(testGet('data-i4770k', 'i4770k')); | |
| 40 assert_true(testGet('data-r-7', 'r-7')); | |
| 41 assert_true(testGet('data-r-7-k', 'r-7K')); | |
| 42 assert_equals(document.body.dataset.nonExisting, undefined); | |
| 43 },'This tests Get function'); | |
| 44 | |
| 45 | |
| 46 function testIsUndefined(attr, prop) | |
| 47 { | |
| 48 var c = getSVGCircle(c); | |
| 49 c.setAttribute(attr, "value"); | |
| 50 return c.dataset[prop] === undefined; | |
| 51 } | |
| 52 | |
| 53 test (function() { | |
| 54 assert_true(testIsUndefined('data-022', '22')); | |
| 55 assert_true(testIsUndefined('data-22', '022')); | |
| 56 },'Tests Undefined'); | |
| 57 | |
| 58 | |
| 59 function matchesNothingInDataset(attr) | |
| 60 { | |
| 61 var c = getSVGCircle(c); | |
| 62 c.setAttribute(attr, "value"); | |
| 63 | |
| 64 var count = 0; | |
| 65 for (var item in c.dataset) | |
| 66 count++; | |
| 67 return count == 0; | |
| 68 } | |
| 69 | |
| 70 test (function() { | |
| 71 assert_true(matchesNothingInDataset('dataFoo')); | |
| 72 },'Tests matchesNothingInDataset'); | |
| 73 | |
| 74 | |
| 75 function testSet(prop, expected) | |
| 76 { | |
| 77 var c = getSVGCircle(c); | |
| 78 c.dataset[prop] = "value"; | |
| 79 return c.getAttribute(expected) == "value"; | |
| 80 } | |
| 81 | |
| 82 test (function() { | |
| 83 assert_true(testSet('foo', 'data-foo')); | |
| 84 assert_true(testSet('fooBar', 'data-foo-bar')); | |
| 85 assert_true(testSet('-', 'data--')); | |
| 86 assert_true(testSet('Foo', 'data--foo')); | |
| 87 assert_true(testSet('-Foo', 'data---foo')); | |
| 88 assert_true(testSet('', 'data-')); | |
| 89 assert_true(testSet('\xE0', 'data-\xE0')); | |
| 90 assert_true(testSet('32', 'data-32')); | |
| 91 assert_true(testSet('0032', 'data-0032')); | |
| 92 assert_true(testSet('i18n', 'data-i18n')); | |
| 93 assert_true(testSet('d2', 'data-d2')); | |
| 94 assert_true(testSet('2d', 'data-2d')); | |
| 95 assert_true(testSet('d-2', 'data-d-2')); | |
| 96 assert_true(testSet('A--S', 'data--a---s')); | |
| 97 assert_throws(null, function() { testSet('-foo', 'dummy'); }, '"SyntaxEr ror: Failed to set the \'-foo\' property on \'DOMStringMap\': \'-foo\' is not a valid property name."'); | |
| 98 assert_throws(null, function() { testSet('foo\x20', 'dummy'); }, '"Inval idCharacterError: Failed to set the \'foo\x20\' property on \'DOMStringMap\': \' data-foo\x20\' is not a valid attribute name."'); | |
| 99 assert_throws(null, function() { testSet('foo\uF900', 'dummy'); }, '"Inv alidCharacterError: Failed to set the \'foo\uF900\' property on \'DOMStringMap\' : \'data-foo\uF900\' is not a valid attribute name."'); | |
| 100 },'Tests Set'); | |
| 101 | |
| 102 | |
| 103 function testIsNull(prop, attr) | |
| 104 { | |
| 105 var c = getSVGCircle(c); | |
| 106 c.dataset[prop] = "value"; | |
| 107 return c.getAttribute(attr) === null; | |
| 108 } | |
| 109 | |
| 110 test (function() { | |
| 111 assert_true(testIsNull('0123', 'data-123')); | |
| 112 assert_true(testIsNull('123', 'data-0123')); | |
| 113 },'Tests Is Null'); | |
| 114 | |
| 115 | |
| 116 function testDelete(attr, prop) | |
| 117 { | |
| 118 var c = getSVGCircle(c); | |
| 119 c.setAttribute(attr, "value"); | |
| 120 delete c.dataset[prop]; | |
| 121 return c.getAttribute(attr) != "value"; | |
| 122 } | |
| 123 | |
| 124 test (function() { | |
| 125 assert_true(testDelete('data-foo', 'foo')); | |
| 126 assert_true(testDelete('data-foo-bar', 'fooBar')); | |
| 127 assert_true(testDelete('data--', '-')); | |
| 128 assert_true(testDelete('data--foo', 'Foo')); | |
| 129 assert_true(testDelete('data---foo', '-Foo')); | |
| 130 assert_true(testDelete('data-', '')); | |
| 131 assert_true(testDelete('data-\xE0', '\xE0')); | |
| 132 assert_true(testDelete('data-33', '33')); | |
| 133 assert_true(testDelete('data-00033', '00033')); | |
| 134 assert_true(testDelete('data-r2', 'r2')); | |
| 135 assert_true(testDelete('data-2r', '2r')); | |
| 136 assert_true(testDelete('data-r-2', 'r-2')); | |
| 137 assert_true(testDelete('data--r-2-', 'R-2-')); | |
| 138 assert_true(testDelete('data--r-2r', 'R-2r')); | |
| 139 assert_true(testDelete('data--r-2-----r', 'R-2----R')); | |
| 140 assert_false(testDelete('dummy', '-foo')); | |
| 141 },'Tests Delete'); | |
| 142 | |
| 143 | |
| 144 | |
| 145 // The SVGElement.dataset deleter is only applied to properties | |
| 146 // that are present; check that any underlying native property | |
| 147 // is deleted instead. | |
| 148 function testNativeDelete(prop, isConfigurable) | |
| 149 { | |
| 150 var c = getSVGCircle(c); | |
| 151 Object.defineProperty(c.dataset, prop, {configurable: isConfigurable, value: "native_value"}); | |
| 152 delete c.dataset[prop]; | |
| 153 return isConfigurable ? !(prop in c.dataset) : (c.dataset[prop] === "native_ value"); | |
| 154 } | |
| 155 | |
| 156 test (function() { | |
| 157 // TODO(jochen): Reenable this once it behaves correctly | |
| 158 //assert_true(testNativeDelete('-r-2-', false)); | |
| 159 assert_true(testNativeDelete('foo', true)); | |
| 160 },'Tests Native Delete'); | |
| 161 | |
| 162 | |
| 163 function testForIn(array) | |
| 164 { | |
| 165 var c = getSVGCircle(c); | |
| 166 for (var i = 0; i < array.length; ++i) { | |
| 167 c.setAttribute(array[i], "value"); | |
| 168 } | |
| 169 | |
| 170 var count = 0; | |
| 171 for (var item in c.dataset) | |
| 172 count++; | |
| 173 | |
| 174 return count; | |
| 175 } | |
| 176 | |
| 177 test (function() { | |
| 178 assert_equals(testForIn(['data-foo', 'data-bar', 'data-baz']), 3); | |
| 179 assert_equals(testForIn(['data-foo', 'data-bar', 'dataFoo']), 2); | |
| 180 assert_equals(testForIn(['data-foo', 'data-bar', 'style']), 2); | |
| 181 assert_equals(testForIn(['data-foo', 'data-bar', 'data-']), 3); | |
| 182 assert_equals(testForIn(['data-foo', 'data-bar', 'data-43']), 3); | |
| 183 assert_equals(testForIn(['data-foo', 'data-oric1', 'data-bar']), 3); | |
| 184 assert_equals(testForIn(['data-foo', 'data-oric-1', 'data-bar']), 3); | |
| 185 assert_equals(testForIn(['data-foo', 'data-oric-1x', 'data-bar']), 3); | |
| 186 },'Tests For In'); | |
| 187 | |
| 188 test (function() { | |
| 189 var c = getSVGCircle(c); | |
| 190 | |
| 191 // If the Object prototype already has "foo", dataset doesnot create the corresponding attribute for foo | |
| 192 Object.prototype.foo = 'on Object'; | |
| 193 assert_equals(c.dataset.foo, 'on Object'); | |
| 194 c.dataset['foo'] = 'on dataset'; | |
| 195 assert_equals(c.dataset.foo, 'on dataset'); | |
| 196 assert_true(c.hasAttribute('data-foo')); | |
| 197 c.setAttribute('data-foo', 'attr'); | |
| 198 assert_equals(c.dataset.foo, 'attr'); | |
| 199 | |
| 200 // Update the JavaScript property | |
| 201 c.dataset.foo = 'updated'; | |
| 202 assert_equals(c.dataset.foo, 'updated'); | |
| 203 assert_equals(c.getAttribute('data-foo'), 'updated'); | |
| 204 | |
| 205 // "Bar" can't be represented as a data- attribute. | |
| 206 c.dataset.Bar = 'on dataset'; | |
| 207 assert_equals(c.dataset.Bar, 'on dataset'); | |
| 208 assert_false(c.hasAttribute('data-Bar')); | |
| 209 | |
| 210 // Make the JavaScript property empty | |
| 211 c.dataset.foo = ''; | |
| 212 assert_equals(c.dataset.foo, ''); | |
| 213 assert_equals(c.getAttribute('data-foo'), ''); | |
| 214 | |
| 215 // Remove the attribute | |
| 216 c.removeAttribute('data-foo'); | |
| 217 assert_equals(c.dataset.foo, 'on Object'); | |
| 218 | |
| 219 // Remove the JavaScript property | |
| 220 c.setAttribute('data-foo', 'attr'); | |
| 221 delete c.dataset.foo; | |
| 222 assert_equals(c.dataset.foo, 'on Object'); | |
| 223 assert_false(c.hasAttribute('foo')); | |
| 224 delete c.dataset.Bar; | |
| 225 assert_equals(c.dataset.Bar, undefined); | |
| 226 Object.prototype[11] = 'on Object'; | |
| 227 assert_equals(c.dataset[11], 'on Object'); | |
| 228 c.dataset['11'] = 'on dataset'; | |
| 229 assert_equals(c.dataset[11], 'on dataset'); | |
| 230 assert_true(c.hasAttribute('data-11')); | |
| 231 c.setAttribute('data-11', 'attr'); | |
| 232 assert_equals(c.dataset[11], 'attr'); | |
| 233 | |
| 234 // Update the JavaScript property | |
| 235 c.dataset[11] = 'updated'; | |
| 236 assert_equals(c.dataset[11], 'updated'); | |
| 237 assert_equals(c.getAttribute('data-11'), 'updated'); | |
| 238 | |
| 239 Object.prototype['a500'] = 'on Object'; | |
| 240 assert_equals(c.dataset['a500'], 'on Object'); | |
| 241 c.dataset['a500'] = 'on dataset'; | |
| 242 assert_equals(c.dataset['a500'], 'on dataset'); | |
| 243 assert_true(c.hasAttribute('data-a500')); | |
| 244 c.setAttribute('data-a500', 'attr'); | |
| 245 assert_equals(c.dataset['a500'], 'attr'); | |
| 246 | |
| 247 // Update the JavaScript property | |
| 248 c.dataset['a500'] = 'updated'; | |
| 249 assert_equals(c.dataset['a500'], 'updated'); | |
| 250 assert_equals(c.getAttribute('data-a500'), 'updated'); | |
| 251 Object.prototype['a-500k'] = 'on Object'; | |
| 252 assert_equals(c.dataset['a-500k'], 'on Object'); | |
| 253 c.dataset['a-500k'] = 'on dataset'; | |
| 254 assert_equals(c.dataset['a-500k'], 'on dataset'); | |
| 255 assert_true(c.hasAttribute('data-a-500k')); | |
| 256 c.setAttribute('data-a-500k', 'attr'); | |
| 257 assert_equals(c.dataset['a-500k'], 'attr'); | |
| 258 | |
| 259 // Update the JavaScript property | |
| 260 c.dataset['a-500k'] = 'updated'; | |
| 261 assert_equals(c.dataset['a-500k'], 'updated'); | |
| 262 assert_equals(c.getAttribute('data-a-500k'), 'updated'); | |
| 263 | |
| 264 },''); | |
| 265 | |
| 266 test (function() { | |
| 267 var c = getSVGCircle(c); | |
| 268 c.dataset.foo = null; | |
| 269 assert_equals(c.dataset.foo, 'null'); | |
| 270 },'Set null'); | |
| 271 </script> | |
| 272 </body> | |
| OLD | NEW |