123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212 |
- <!DOCTYPE HTML>
- <html>
- <!--
- https://bugzilla.mozilla.org/show_bug.cgi?id=560112
- -->
- <head>
- <title>Test for Bug 560112</title>
- <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
- <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
- </head>
- <body>
- <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=560112">Mozilla Bug 560112</a>
- <p id="display"></p>
- <div id="content" style="display: none">
- </div>
- <pre id="test">
- <script type="application/javascript">
- /** Test for Bug 560112 **/
- /**
- * Sets dataset property. Checks data attribute "attr".
- * Gets dataset property. Checks data attribute "attr".
- * Overwrites dataset property Checks data attribute "attr".
- * Deletes dataset property. Checks data attribute "attr".
- */
- function SetGetOverwriteDel(attr, prop)
- {
- var el = document.createElement('div');
- // Set property.
- is(prop in el.dataset, false, 'Property should not be in dataset before setting.');
- el.dataset[prop] = "zzzzzz";
- is(prop in el.dataset, true, 'Property should be in dataset after setting.');
- ok(el.hasAttribute(attr), 'Element should have data attribute for dataset property "' + prop + '".');
- // Get property.
- is(el.dataset[prop], "zzzzzz", 'Dataset property "' + prop + '" should have value "zzzzzz".');
- is(el.getAttribute(attr), "zzzzzz", 'Attribute "' + attr + '" should have value "zzzzzz".');
- // Overwrite property.
- el.dataset[prop] = "yyyyyy";
- is(el.dataset[prop], "yyyyyy", 'Dataset property "' + prop + '" should have value "yyyyyy".');
- is(el.getAttribute(attr), "yyyyyy", 'Attribute "' + attr + '" should have value "yyyyyy".');
- // Delete property.
- delete el.dataset[prop];
- ok(!el.hasAttribute(attr), 'Element should not have data attribute for dataset property "' + prop + '".');
- is(prop in el.dataset, false, 'Deleted property should not be in dataset.');
- }
- /**
- * Sets dataset property and expects exception.
- */
- function SetExpectException(prop)
- {
- var el = document.createElement('div');
- try {
- el.dataset[prop] = "xxxxxx";
- ok(false, 'Exception should have been thrown.');
- } catch (ex) {
- ok(true, 'Exception should have been thrown.');
- }
- }
- /**
- * Adds attributes in "attrList" to element.
- * Deletes attributes in "delList" from element.
- * Checks for "numProp" properties in dataset.
- */
- function DelAttrEnumerate(attrList, delList, numProp)
- {
- var el = document.createElement('div');
-
- // Adds attributes in "attrList".
- for (var i = 0; i < attrList.length; ++i) {
- el.setAttribute(attrList[i], "aaaaaa");
- }
- // Remove attributes in "delList".
- for (var i = 0; i < delList.length; ++i) {
- el.removeAttribute(delList[i]);
- }
- var numPropCounted = 0;
- for (var prop in el.dataset) {
- if (el.dataset[prop] == "aaaaaa") {
- ++numPropCounted;
- }
- }
- is(numPropCounted, numProp, 'Number of enumerable dataset properties is incorrent after attribute removal.');
- }
- /**
- * Adds attributes in "attrList" to element.
- * Checks for "numProp" properties in dataset.
- */
- function Enumerate(attrList, numProp)
- {
- var el = document.createElement('div');
- // Adds attributes in "attrList" to element.
- for (var i = 0; i < attrList.length; ++i) {
- el.setAttribute(attrList[i], "aaaaaa");
- }
- var numPropCounted = 0;
- for (var prop in el.dataset) {
- if (el.dataset[prop] == "aaaaaa") {
- ++numPropCounted;
- }
- }
- is(numPropCounted, numProp, 'Number of enumerable dataset properties is incorrect.');
- }
- /**
- * Adds dataset property then removes attribute from element and check for presence of
- * properties using the "in" operator.
- */
- function AddPropDelAttr(attr, prop)
- {
- var el = document.createElement('div');
- el.dataset[prop] = 'dddddd';
- is(prop in el.dataset, true, 'Operator "in" should return true after setting property.');
- el.removeAttribute(attr);
- is(prop in el.dataset, false, 'Operator "in" should return false for removed attribute.');
- }
- /**
- * Adds then removes attribute from element and check for presence of properties using the
- * "in" operator.
- */
- function AddDelAttr(attr, prop)
- {
- var el = document.createElement('div');
- el.setAttribute(attr, 'dddddd');
- is(prop in el.dataset, true, 'Operator "in" should return true after setting attribute.');
- el.removeAttribute(attr);
- is(prop in el.dataset, false, 'Operator "in" should return false for removed attribute.');
- }
- // Typical use case.
- SetGetOverwriteDel('data-property', 'property');
- SetGetOverwriteDel('data-a-longer-property', 'aLongerProperty');
- AddDelAttr('data-property', 'property');
- AddDelAttr('data-a-longer-property', 'aLongerProperty');
- AddPropDelAttr('data-property', 'property');
- AddPropDelAttr('data-a-longer-property', 'aLongerProperty');
- // Empty property name.
- SetGetOverwriteDel('data-', '');
- // Leading dash characters.
- SetGetOverwriteDel('data--', '-');
- SetGetOverwriteDel('data--d', 'D');
- SetGetOverwriteDel('data---d', '-D');
- // Trailing dash characters.
- SetGetOverwriteDel('data-d-', 'd-');
- SetGetOverwriteDel('data-d--', 'd--');
- SetGetOverwriteDel('data-d-d-', 'dD-');
- // "data-" in attribute name.
- SetGetOverwriteDel('data-data-', 'data-');
- SetGetOverwriteDel('data-data-data-', 'dataData-');
- // Longer attribute.
- SetGetOverwriteDel('data-long-long-long-long-long-long-long-long-long-long-long-long-long', 'longLongLongLongLongLongLongLongLongLongLongLongLong');
- var longAttr = 'data-long';
- var longProp = 'long';
- for (var i = 0; i < 30000; ++i) {
- // Create really long attribute and property names.
- longAttr += '-long';
- longProp += 'Long';
- }
- SetGetOverwriteDel(longAttr, longProp);
- // Syntax error in setting dataset property (dash followed by lower case).
- SetExpectException('-a');
- SetExpectException('a-a');
- SetExpectException('a-a-a');
- // Invalid character.
- SetExpectException('a a');
- // Enumeration over dataset properties.
- Enumerate(['data-a-big-fish'], 1);
- Enumerate(['dat-a-big-fish'], 0);
- Enumerate(['data-'], 1);
- Enumerate(['data-', 'data-more-data'], 2);
- Enumerate(['daaata-', 'data-more-data'], 1);
- // Delete data attributes and enumerate properties.
- DelAttrEnumerate(['data-one', 'data-two'], ['data-one'], 1);
- DelAttrEnumerate(['data-one', 'data-two'], ['data-three'], 2);
- DelAttrEnumerate(['data-one', 'data-two'], ['one'], 2);
- </script>
- </pre>
- </body>
- </html>
|