<!doctype html>
<meta charset="utf-8">
<title>CSSOM - CSS interface</title>
<link rel="help" href="https://drafts.csswg.org/cssom/#the-css.escape()-method">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
    test(function () {
        // https://drafts.csswg.org/cssom/#dom-css-escape
        // https://drafts.csswg.org/cssom/#serialize-an-identifier
        assert_equals(CSS.escape("hello world"), "hello\\ world", "CSS.escape: spaces get escaped with backslashes");
        assert_equals(CSS.escape("hello\0world"), "hello\u{FFFD}world", "CSS.escape: NULL get replaced with U+FFFD REPLACEMENT CHARACTER");
        assert_equals(CSS.escape("hello0world"), "hello0world", "CSS.escape: Numbers within string preserved");
        assert_equals(CSS.escape("hello\x10world"), "hello\\10 world", "CSS.escape: Values between \\x01 and \\x1f are unicode escaped");
        assert_equals(CSS.escape("hello\\world"), "hello\\\\world", "CSS.escape: Backslashes get backslash-escaped");
        assert_equals(CSS.escape("hello\u{1234}world"), "hello\u{1234}world", "CSS.escape: Code points greater than U+0080 are preserved");
        assert_equals(CSS.escape("hello\x7Fworld"), "hello\\7f world", "CSS.escape: Some code points less than U+0080 are unicode-escaped");
        assert_equals(CSS.escape("-"), "\\-", "CSS.escape: Single dash escaped");
        assert_equals(CSS.escape("0foo"), "\\30 foo", "CSS.escape: Numbers at the beginning of an ident get unicode escaped");
        assert_equals(CSS.escape("-0foo"), "-\\30 foo", "CSS.escape: Numbers at the beginning of an ident after single hyphen get unicode escaped");
        assert_equals(CSS.escape("--0foo"), "--0foo", "CSS.escape: Numbers at the beginning of an ident after multiple hyphens do not get unicode escaped");
    }, "CSS.escape");
    test(function () {
        // https://drafts.csswg.org/css-conditional/#dom-css-supports
        // https://drafts.csswg.org/css-conditional/#typedef-supports-condition
        assert_equals(CSS.supports("color: red"), true, "CSS.supports: Single-argument form allows for declarations without enclosing parentheses");
        assert_equals(CSS.supports("(color: red) and (color: blue)"), true, "CSS.supports: Complex conditions allowed");
        assert_equals(CSS.supports("not (foobar)"), true, "CSS.supports: general_enclosed still parses");
    }, "CSS.supports, one argument form");
    test(function () {
        // https://drafts.csswg.org/css-conditional/#dom-css-supports
        // https://drafts.csswg.org/css-conditional/#dfn-support
        assert_equals(CSS.supports("color", "red"), true, "CSS.supports: two argument form succeeds for known property");
        assert_equals(CSS.supports("unknownproperty", "blah"), false, "CSS.supports: two argument form fails for unknown property");
        assert_equals(CSS.supports("width", "blah"), false, "CSS.supports: two argument form fails for invalid value");
        assert_equals(CSS.supports("--foo", "blah"), true, "CSS.supports: two argument form succeeds for custom property");
    }, "CSS.supports, two argument form");
</script>
