<!DOCTYPE HTML>
<script src="../resources/js-test-pre.js"></script>
<p id="description"></p>
<div id="console"></div>
<script>
description("Test the parsing of the -webkit-animation-trigger property.");

// These have to be global for the test helpers to see them.
var stylesheet, cssRule, declaration, triggerRule, subRule;
var styleElement = document.createElement("style");
document.head.appendChild(styleElement);
stylesheet = styleElement.sheet;

function testTriggerRule(description, rule, expectedLength, expectedValue, expectedTexts)
{
    debug("");
    debug(description + " : " + rule);

    stylesheet.insertRule("body { -webkit-animation-trigger: " + rule + "; }", 0);
    cssRule = stylesheet.cssRules.item(0);

    shouldBe("cssRule.type", "1");

    declaration = cssRule.style;
    if (!expectedLength || !expectedValue) {
        shouldBe("declaration.length", "0");
        shouldBeEqualToString("declaration.getPropertyValue('-webkit-animation-trigger')", "");
        return;
    }
    shouldBe("declaration.length", "1");
    shouldBe("declaration.getPropertyValue('-webkit-animation-trigger')", "'" + expectedValue + "'");

    triggerRule = declaration.getPropertyCSSValue("-webkit-animation-trigger");
    if (expectedLength > 1) {
        shouldBe("triggerRule.length", "" + expectedLength);
        for (var i = 0; i < expectedLength; i++) {
            subRule = triggerRule[i];
            shouldBe("subRule.cssText", "'" + expectedTexts[i] + "'");
        }
    } else {
        shouldBe("triggerRule.cssText", "'" + expectedValue + "'");
    }

    stylesheet.deleteRule(0);
}

debug("")
debug("Valid property tests");
debug("")

testTriggerRule("Auto",
                "auto", 1, "auto");

testTriggerRule("Container Scroll",
                "container-scroll(200px)", 1, "container-scroll(200px)");

testTriggerRule("Container Scroll",
                "container-scroll(2em)", 1, "container-scroll(2em)");

testTriggerRule("Container Scroll",
                "container-scroll(30vw)", 1, "container-scroll(30vw)");

testTriggerRule("Container Scroll with end value",
                "container-scroll(200px, 300px)", 1, "container-scroll(200px, 300px)");

testTriggerRule("Two scroll values",
                "container-scroll(1px), container-scroll(2px)", 2, "container-scroll(1px), container-scroll(2px)", ["container-scroll(1px)", "container-scroll(2px)"]);

testTriggerRule("Many scroll values",
                "container-scroll(1px), container-scroll(2px), container-scroll(3px), container-scroll(4px), container-scroll(5px), container-scroll(3000px)",
                6,
                "container-scroll(1px), container-scroll(2px), container-scroll(3px), container-scroll(4px), container-scroll(5px), container-scroll(3000px)",
                ["container-scroll(1px)", "container-scroll(2px)", "container-scroll(3px)", "container-scroll(4px)", "container-scroll(5px)", "container-scroll(3000px)"]);

debug("")
debug("Invalid property tests");
debug("")

testTriggerRule("No value", "", 0, null);
testTriggerRule("Bad value", "banana", 0, null);
testTriggerRule("Bad list", "container-scroll(1px), orange", 0, null);
testTriggerRule("Missing comma", "container-scroll(1px) container-scroll(2px)", 0, null);
testTriggerRule("Too many values", "container-scroll(1px, 2px, 3px)", 0, null);

successfullyParsed = true;
</script>
<script src="../resources/js-test-post.js"></script>
