<head>
    <script src="../../resources/js-test-pre.js"></script>
    <script>
        if (window.testRunner)
            testRunner.dumpAsText();


    </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>
        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 CSS property order.
        var started;
        var cssPropertyCount = 0;
        var previous;
        var seenFilter;
        for (var p in document.body.style) {
            if (p === "alignmentBaseline")
                started = true;
            if (!started)
                continue;
            if (p === "filter")
                seenFilter = true;
            if (previous && previous >= p) {
                testFailed("Invalid CSS-mapped property order: '" + p + "' after '" + previous + "'");
                break;
            }
            if (++cssPropertyCount <= 100)
                previous = p;
            else {
                if (seenFilter)
                    testPassed("The CSS property order is correct");
                else
                    testFailed("The 'filter' property was not enumerated");
                break;
            }
        }
    </script>
    <script src="../../resources/js-test-post.js"></script>
</body>
