blob: 30da47600735380e93f66f4220b40a51322e6ac6 [file] [log] [blame]
<head>
<script src="../../resources/js-test-pre.js"></script>
</head>
<body style="text-decoration: underline; border-top-color: green">
<div id="description">This test makes sure that CSSStyleDeclaration enumerates JavaScript properties for defined and non-defined CSS properties, indexed properties, and properties defined on the prototype. See <a href="https://bugs.webkit.org/show_bug.cgi?id=23946">Bug 23946</a>.</div>
<div id="console"></div>
<script>
if (window.testRunner)
testRunner.dumpAsText();
shouldBe("document.body.style.length", "2");
shouldBeTrue("'0' in document.body.style");
shouldBeTrue("'1' in document.body.style");
shouldBeTrue("'textDecoration' in document.body.style");
shouldBeTrue("'borderTopColor' in document.body.style");
shouldBeTrue("'border' in document.body.style");
shouldBeTrue("'font' in document.body.style");
shouldBeTrue("'webkitTransform' in document.body.style");
shouldBeTrue("'WebkitTransform' in document.body.style");
shouldBeFalse("'bogus-random-String' in document.body.style");
shouldBeTrue("'cssText' in document.body.style");
shouldBeTrue("'getPropertyCSSValue' in document.body.style");
// Test invariants on the order of the enumerated properties. These are not in the spec, but we
// currently expect them to hold.
// - 6 groupings
//. - 1st grouping [0, 1, cssText, length, parentRule, cssFloat]
// - 2nd grouping, camel case, alphabetical, includes properties with "Webkit" and "Epub"
// prefix with initial uppercase letter, no dashes anywhere in the name
// - 3nd grouping, webkit case, alphabetical, all properties prefixed with "webkit" with
// initial lowercase letter 'w'.
// - 4th grouping, dashed case, alphabetical, all properties have a dash in them.
// - 5th grouping, epub case, alphabetical, all properties prefixed with "epub" with
// initial lowercase letter 'e'.
// - 6th grouping, [item, getPropertyValue, getPropertyPriority, setProperty, removeProperty,
// getPropertyShorthand, isPropertyImplicit, getPropertyCSSValue]
let properties = [];
for (let p in document.body.style)
properties.push(p);
let initialIndexOfGroup1 = 0;
let initialIndexOfGroup2 = properties.findIndex(property => property == "cssFloat") + 1;
let initialIndexOfGroup3 = properties.findIndex(property => property.startsWith("webkit"));
let initialIndexOfGroup4 = properties.findIndex(property => property.includes("-"));
let initialIndexOfGroup5 = properties.findIndex(property => property.startsWith("epub"));
let initialIndexOfGroup6 = properties.findIndex(property => property == "item");
shouldBeTrue("initialIndexOfGroup2 > initialIndexOfGroup1");
shouldBeTrue("initialIndexOfGroup3 > initialIndexOfGroup2");
shouldBeTrue("initialIndexOfGroup4 > initialIndexOfGroup3");
shouldBeTrue("initialIndexOfGroup5 > initialIndexOfGroup4");
shouldBeTrue("initialIndexOfGroup6 > initialIndexOfGroup5");
let group1 = properties.slice(initialIndexOfGroup1, initialIndexOfGroup2);
let group2 = properties.slice(initialIndexOfGroup2, initialIndexOfGroup3);
let group3 = properties.slice(initialIndexOfGroup3, initialIndexOfGroup4);
let group4 = properties.slice(initialIndexOfGroup4, initialIndexOfGroup5);
let group5 = properties.slice(initialIndexOfGroup5, initialIndexOfGroup6);
let group6 = properties.slice(initialIndexOfGroup6);
// Group 1
shouldBe(`group1`, `["0", "1", "cssText", "length", "parentRule", "cssFloat"]`);
// Group 2 - Camel Case
let group2Clone = [...group2];
group2Clone.sort();
shouldBe("group2", "group2Clone");
shouldBeTrue(`group2.some(property => property.startsWith("Webkit"))`);
shouldBeTrue(`group2.some(property => property.startsWith("Epub"))`);
shouldBeTrue(`group2.every(property => !property.includes("-"))`);
// Group 3 - WebKit Case
let group3Clone = [...group3];
group3Clone.sort();
shouldBe("group3", "group3Clone");
shouldBeTrue(`group3.every(property => !property.startsWith("Webkit"))`);
shouldBeTrue(`group3.every(property => !property.startsWith("Epub"))`);
shouldBeTrue(`group3.every(property => !property.includes("-"))`);
shouldBeTrue(`group3.every(property => property.startsWith("webkit"))`);
// Group 4 - Dashed Case
let group4Clone = [...group4];
group4Clone.sort();
shouldBe("group4", "group4Clone");
shouldBeTrue(`group4.every(property => !property.startsWith("Webkit"))`);
shouldBeTrue(`group4.every(property => !property.startsWith("Epub"))`);
shouldBeTrue(`group4.every(property => !property.startsWith("webkit"))`);
shouldBeTrue(`group4.every(property => property.includes("-"))`);
// Group 5 - Epub Case
let group5Clone = [...group5];
group5Clone.sort();
shouldBe("group5", "group5Clone");
shouldBeTrue(`group5.every(property => !property.startsWith("Webkit"))`);
shouldBeTrue(`group5.every(property => !property.startsWith("Epub"))`);
shouldBeTrue(`group5.every(property => !property.includes("-"))`);
shouldBeTrue(`group5.every(property => property.startsWith("epub"))`);
// Group 6
shouldBe(`group6`, `["item", "getPropertyValue", "getPropertyPriority", "setProperty", "removeProperty", "getPropertyShorthand", "isPropertyImplicit", "getPropertyCSSValue"]`);
</script>
<script src="../../resources/js-test-post.js"></script>
</body>