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 |