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