Index: third_party/WebKit/LayoutTests/fast/dom/dataset.html |
diff --git a/third_party/WebKit/LayoutTests/fast/dom/dataset.html b/third_party/WebKit/LayoutTests/fast/dom/dataset.html |
index 5fe49b747ed5586e413aa9ad36b44a3970be0f72..7db2dbb7fac0116a31838917f16d4c7fd287db37 100644 |
--- a/third_party/WebKit/LayoutTests/fast/dom/dataset.html |
+++ b/third_party/WebKit/LayoutTests/fast/dom/dataset.html |
@@ -1,9 +1,279 @@ |
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> |
-<html> |
-<head> |
-<script src="../../resources/js-test.js"></script> |
-</head> |
+<!DOCTYPE html> |
+<script src="../../resources/testharness.js"></script> |
+<script src="../../resources/testharnessreport.js"></script> |
<body> |
-<script src="script-tests/dataset.js"></script> |
+<script> |
+function testDataset(getTestElement) { |
+ function testGet(attr, expected) |
+ { |
+ var e = getTestElement(); |
+ e.setAttribute(attr, "value"); |
+ return e.dataset[expected] == "value"; |
+ } |
+ |
+ test (function() { |
+ assert_true(testGet('data-foo', 'foo')); |
+ assert_true(testGet('data-foo-bar', 'fooBar')); |
+ assert_true(testGet('data--', '-')); |
+ assert_true(testGet('data--foo', 'Foo')); |
+ assert_true(testGet('data---foo', '-Foo')); |
+ assert_true(testGet('data---foo--bar', '-Foo-Bar')); |
+ assert_true(testGet('data---foo---bar', '-Foo--Bar')); |
+ assert_true(testGet('data-foo-', 'foo-')); |
+ assert_true(testGet('data-foo--', 'foo--')); |
+ assert_true(testGet('data-', '')); |
+ assert_true(testGet('data-\xE0', '\xE0')); |
+ assert_true(testGet('data-1', '1')); |
+ assert_true(testGet('data-01', '01')); |
+ assert_true(testGet('data-zx81', 'zx81')); |
+ assert_true(testGet('data-i4770k', 'i4770k')); |
+ assert_true(testGet('data-r-7', 'r-7')); |
+ assert_true(testGet('data-r-7-k', 'r-7K')); |
+ assert_equals(document.body.dataset.nonExisting, undefined); |
+ },'This tests Get function'); |
+ |
+ test (function() { |
+ var e = getTestElement(); |
+ e.setAttribute('data-Foo', 'value'); |
+ // HTML lowercases all attributes whereas SVG does not. |
+ if (e instanceof HTMLElement) |
+ assert_true(e.dataset['foo'] == "value"); |
+ else |
+ assert_true(e.dataset['Foo'] == "value"); |
+ }, 'This tests case sensitive scenario'); |
+ |
+ |
+ function testIsUndefined(attr, prop) |
+ { |
+ var e = getTestElement(); |
+ e.setAttribute(attr, "value"); |
+ return e.dataset[prop] === undefined; |
+ } |
+ |
+ test (function() { |
+ assert_true(testIsUndefined('data-022', '22')); |
+ assert_true(testIsUndefined('data-22', '022')); |
+ },'Tests Undefined'); |
+ |
+ |
+ function matchesNothingInDataset(attr) |
+ { |
+ var e = getTestElement(); |
+ e.setAttribute(attr, "value"); |
+ |
+ var count = 0; |
+ for (var item in e.dataset) |
+ count++; |
+ return count == 0; |
+ } |
+ |
+ test (function() { |
+ assert_true(matchesNothingInDataset('dataFoo')); |
+ },'Tests matchesNothingInDataset'); |
+ |
+ |
+ function testSet(prop, expected) |
+ { |
+ var e = getTestElement(); |
+ e.dataset[prop] = "value"; |
+ return e.getAttribute(expected) == "value"; |
+ } |
+ |
+ test (function() { |
+ assert_true(testSet('foo', 'data-foo')); |
+ assert_true(testSet('fooBar', 'data-foo-bar')); |
+ assert_true(testSet('-', 'data--')); |
+ assert_true(testSet('Foo', 'data--foo')); |
+ assert_true(testSet('-Foo', 'data---foo')); |
+ assert_true(testSet('', 'data-')); |
+ assert_true(testSet('\xE0', 'data-\xE0')); |
+ assert_true(testSet('32', 'data-32')); |
+ assert_true(testSet('0032', 'data-0032')); |
+ assert_true(testSet('i18n', 'data-i18n')); |
+ assert_true(testSet('d2', 'data-d2')); |
+ assert_true(testSet('2d', 'data-2d')); |
+ assert_true(testSet('d-2', 'data-d-2')); |
+ assert_true(testSet('A--S', 'data--a---s')); |
+ assert_throws(null, function() { testSet('-foo', 'dummy'); }, '"SyntaxError: Failed to set the \'-foo\' property on \'DOMStringMap\': \'-foo\' is not a valid property name."'); |
+ assert_throws(null, function() { testSet('foo\x20', 'dummy'); }, '"InvalidCharacterError: Failed to set the \'foo\x20\' property on \'DOMStringMap\': \'data-foo\x20\' is not a valid attribute name."'); |
+ assert_throws(null, function() { testSet('foo\uF900', 'dummy'); }, '"InvalidCharacterError: Failed to set the \'foo\uF900\' property on \'DOMStringMap\': \'data-foo\uF900\' is not a valid attribute name."'); |
+ },'Tests Set'); |
+ |
+ |
+ function testIsNull(prop, attr) |
+ { |
+ var e = getTestElement(); |
+ e.dataset[prop] = "value"; |
+ return e.getAttribute(attr) === null; |
+ } |
+ |
+ test (function() { |
+ assert_true(testIsNull('0123', 'data-123')); |
+ assert_true(testIsNull('123', 'data-0123')); |
+ },'Tests Is Null'); |
+ |
+ |
+ function testDelete(attr, prop) |
+ { |
+ var e = getTestElement(); |
+ e.setAttribute(attr, "value"); |
+ delete e.dataset[prop]; |
+ return e.getAttribute(attr) != "value"; |
+ } |
+ |
+ test (function() { |
+ assert_true(testDelete('data-foo', 'foo')); |
+ assert_true(testDelete('data-foo-bar', 'fooBar')); |
+ assert_true(testDelete('data--', '-')); |
+ assert_true(testDelete('data--foo', 'Foo')); |
+ assert_true(testDelete('data---foo', '-Foo')); |
+ assert_true(testDelete('data-', '')); |
+ assert_true(testDelete('data-\xE0', '\xE0')); |
+ assert_true(testDelete('data-33', '33')); |
+ assert_true(testDelete('data-00033', '00033')); |
+ assert_true(testDelete('data-r2', 'r2')); |
+ assert_true(testDelete('data-2r', '2r')); |
+ assert_true(testDelete('data-r-2', 'r-2')); |
+ assert_true(testDelete('data--r-2-', 'R-2-')); |
+ assert_true(testDelete('data--r-2r', 'R-2r')); |
+ assert_true(testDelete('data--r-2-----r', 'R-2----R')); |
+ assert_false(testDelete('dummy', '-foo')); |
+ },'Tests Delete'); |
+ |
+ |
+ |
+ // The (HTML/SVG)Element.dataset deleter is only applied to properties |
+ // that are present; check that any underlying native property |
+ // is deleted instead. |
+ function testNativeDelete(prop, isConfigurable) |
+ { |
+ var e = getTestElement(); |
+ Object.defineProperty(e.dataset, prop, {configurable: isConfigurable, value: "native_value"}); |
+ delete e.dataset[prop]; |
+ return isConfigurable ? !(prop in e.dataset) : (e.dataset[prop] === "native_value"); |
+ } |
+ |
+ test (function() { |
+ // TODO(jochen): Reenable this once it behaves correctly |
+ //assert_true(testNativeDelete('-r-2-', false)); |
+ assert_true(testNativeDelete('foo', true)); |
+ },'Tests Native Delete'); |
+ |
+ |
+ function testForIn(array) |
+ { |
+ var e = getTestElement(); |
+ |
+ for (var i = 0; i < array.length; ++i) { |
+ e.setAttribute(array[i], "value"); |
+ } |
+ |
+ var count = 0; |
+ for (var item in e.dataset) |
+ count++; |
+ |
+ return count; |
+ } |
+ |
+ test (function() { |
+ assert_equals(testForIn(['data-foo', 'data-bar', 'data-baz']), 3); |
+ assert_equals(testForIn(['data-foo', 'data-bar', 'dataFoo']), 2); |
+ assert_equals(testForIn(['data-foo', 'data-bar', 'style']), 2); |
+ assert_equals(testForIn(['data-foo', 'data-bar', 'data-']), 3); |
+ assert_equals(testForIn(['data-foo', 'data-bar', 'data-43']), 3); |
+ assert_equals(testForIn(['data-foo', 'data-oric1', 'data-bar']), 3); |
+ assert_equals(testForIn(['data-foo', 'data-oric-1', 'data-bar']), 3); |
+ assert_equals(testForIn(['data-foo', 'data-oric-1x', 'data-bar']), 3); |
+ },'Tests For In'); |
+ |
+ test (function() { |
+ var e = getTestElement(); |
+ e.dataset.foo = null; |
+ assert_equals(e.dataset.foo, 'null'); |
+ },'Set null'); |
+} |
+ |
+function testDatasetPropertyOverride(getTestElement) { |
+ var e = getTestElement(); |
+ |
+ // If the Object prototype already has "foo", dataset doesnot create the corresponding attribute for foo |
+ Object.prototype.foo = 'on Object'; |
+ assert_equals(e.dataset.foo, 'on Object'); |
+ e.dataset['foo'] = 'on dataset'; |
+ assert_equals(e.dataset.foo, 'on dataset'); |
+ assert_true(e.hasAttribute('data-foo')); |
+ e.setAttribute('data-foo', 'attr'); |
+ assert_equals(e.dataset.foo, 'attr'); |
+ |
+ // Update the JavaScript property |
+ e.dataset.foo = 'updated'; |
+ assert_equals(e.dataset.foo, 'updated'); |
+ assert_equals(e.getAttribute('data-foo'), 'updated'); |
+ |
+ // "Bar" can't be represented as a data- attribute. |
+ e.dataset.Bar = 'on dataset'; |
+ assert_equals(e.dataset.Bar, 'on dataset'); |
+ assert_false(e.hasAttribute('data-Bar')); |
+ |
+ // Make the JavaScript property empty |
+ e.dataset.foo = ''; |
+ assert_equals(e.dataset.foo, ''); |
+ assert_equals(e.getAttribute('data-foo'), ''); |
+ |
+ // Remove the attribute |
+ e.removeAttribute('data-foo'); |
+ assert_equals(e.dataset.foo, 'on Object'); |
+ |
+ // Remove the JavaScript property |
+ e.setAttribute('data-foo', 'attr'); |
+ delete e.dataset.foo; |
+ assert_equals(e.dataset.foo, 'on Object'); |
+ assert_false(e.hasAttribute('foo')); |
+ delete e.dataset.Bar; |
+ assert_equals(e.dataset.Bar, undefined); |
+ Object.prototype[11] = 'on Object'; |
+ assert_equals(e.dataset[11], 'on Object'); |
+ e.dataset['11'] = 'on dataset'; |
+ assert_equals(e.dataset[11], 'on dataset'); |
+ assert_true(e.hasAttribute('data-11')); |
+ e.setAttribute('data-11', 'attr'); |
+ assert_equals(e.dataset[11], 'attr'); |
+ |
+ // Update the JavaScript property |
+ e.dataset[11] = 'updated'; |
+ assert_equals(e.dataset[11], 'updated'); |
+ assert_equals(e.getAttribute('data-11'), 'updated'); |
+ |
+ Object.prototype['a500'] = 'on Object'; |
+ assert_equals(e.dataset['a500'], 'on Object'); |
+ e.dataset['a500'] = 'on dataset'; |
+ assert_equals(e.dataset['a500'], 'on dataset'); |
+ assert_true(e.hasAttribute('data-a500')); |
+ e.setAttribute('data-a500', 'attr'); |
+ assert_equals(e.dataset['a500'], 'attr'); |
+ |
+ // Update the JavaScript property |
+ e.dataset['a500'] = 'updated'; |
+ assert_equals(e.dataset['a500'], 'updated'); |
+ assert_equals(e.getAttribute('data-a500'), 'updated'); |
+ Object.prototype['a-500k'] = 'on Object'; |
+ assert_equals(e.dataset['a-500k'], 'on Object'); |
+ e.dataset['a-500k'] = 'on dataset'; |
+ assert_equals(e.dataset['a-500k'], 'on dataset'); |
+ assert_true(e.hasAttribute('data-a-500k')); |
+ e.setAttribute('data-a-500k', 'attr'); |
+ assert_equals(e.dataset['a-500k'], 'attr'); |
+ |
+ // Update the JavaScript property |
+ e.dataset['a-500k'] = 'updated'; |
+ assert_equals(e.dataset['a-500k'], 'updated'); |
+ assert_equals(e.getAttribute('data-a-500k'), 'updated'); |
+} |
+ |
+var svgNS = "http://www.w3.org/2000/svg"; |
+testDataset(function() { return document.createElement("div"); }); |
+testDataset(function() { return document.createElementNS(svgNS, "circle"); }); |
+testDatasetPropertyOverride(function() { return document.createElement("div"); }); |
+testDatasetPropertyOverride(function() { return document.createElementNS(svgNS, "circle"); }); |
+</script> |
</body> |
-</html> |