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 |