<!DOCTYPE html>
<html>
<head>
<title>CSSOM Test: test serialization of type selectors and namespace prefixes</title>
<link rel="author" title="Rune Lillesveen" href="mailto:[email protected]">
<link rel="help" href="https://drafts.csswg.org/cssom-1/#serializing-selectors">
<meta name="flags" content="dom">
<meta charset="utf-8">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<style id="teststyles">
</style>
</head>
<body>
<div id="log"></div>
<script>
var ns_rule = "@namespace ns url(ns);";
var default_ns_rules = "@namespace url(default_ns); @namespace nsdefault url(default_ns);" + ns_rule;
function assert_selector_serializes_to(source, expected_result) {
var style_element = document.getElementById("teststyles");
style_element.firstChild.data = source + "{ font-size: 1em; }";
var sheet = style_element.sheet;
assert_equals(sheet.cssRules[sheet.cssRules.length - 1].selectorText, expected_result);
}
test(function() {
assert_selector_serializes_to(ns_rule + "e", "e");
assert_selector_serializes_to(default_ns_rules + "e", "e");
}, "Simple type selector");
test(function() {
assert_selector_serializes_to(ns_rule + "|e", "|e");
assert_selector_serializes_to(default_ns_rules + "|e", "|e");
}, "Type selector without a namespace");
test(function() {
assert_selector_serializes_to(ns_rule + "*|e", "e");
assert_selector_serializes_to(default_ns_rules + "*|e", "*|e");
}, "Type selector with any namespace");
test(function() {
assert_selector_serializes_to(ns_rule + "*", "*");
assert_selector_serializes_to(default_ns_rules + "*", "*");
}, "Universal selector");
test(function() {
assert_selector_serializes_to(ns_rule + "|*", "|*");
assert_selector_serializes_to(default_ns_rules + "|*", "|*");
}, "Universal selector without a namespace");
test(function() {
assert_selector_serializes_to(ns_rule + "*|*", "*");
assert_selector_serializes_to(default_ns_rules + "*|*", "*|*");
}, "Universal selector in any namespace");
test(function() {
assert_selector_serializes_to(ns_rule + "ns|e", "ns|e");
assert_selector_serializes_to(default_ns_rules + "ns|e", "ns|e");
}, "Type selector with namespace");
test(function() {
assert_selector_serializes_to(ns_rule + "ns|*", "ns|*");
assert_selector_serializes_to(default_ns_rules + "ns|*", "ns|*");
}, "Universal selector with namespace");
test(function() {
assert_selector_serializes_to(ns_rule + "e.c", "e.c");
assert_selector_serializes_to(default_ns_rules + "e.c", "e.c");
}, "Simple type selector followed by class");
test(function() {
assert_selector_serializes_to(ns_rule + "e#i", "e#i");
assert_selector_serializes_to(default_ns_rules + "e#i", "e#i");
}, "Simple type selector followed by id");
test(function() {
assert_selector_serializes_to(ns_rule + "e:hover", "e:hover");
assert_selector_serializes_to(default_ns_rules + "e:hover", "e:hover");
}, "Simple type selector followed by pseudo class");
test(function() {
assert_selector_serializes_to(ns_rule + "e::before", "e::before");
assert_selector_serializes_to(default_ns_rules + "e::before", "e::before");
}, "Simple type selector followed by pseudo element");
test(function() {
assert_selector_serializes_to(ns_rule + "e[attr]", "e[attr]");
assert_selector_serializes_to(default_ns_rules + "e[attr]", "e[attr]");
}, "Simple type selector followed by atttribute selector");
test(function() {
assert_selector_serializes_to(ns_rule + "|e.c", "|e.c");
assert_selector_serializes_to(default_ns_rules + "|e.c", "|e.c");
}, "Type selector without a namespace followed by class");
test(function() {
assert_selector_serializes_to(ns_rule + "|e#i", "|e#i");
assert_selector_serializes_to(default_ns_rules + "|e#i", "|e#i");
}, "Type selector without a namespace followed by id");
test(function() {
assert_selector_serializes_to(ns_rule + "|e:hover", "|e:hover");
assert_selector_serializes_to(default_ns_rules + "|e:hover", "|e:hover");
}, "Type selector without a namespace followed by pseudo class");
test(function() {
assert_selector_serializes_to(ns_rule + "|e::before", "|e::before");
assert_selector_serializes_to(default_ns_rules + "|e::before", "|e::before");
}, "Type selector without a namespace followed by pseudo element");
test(function() {
assert_selector_serializes_to(ns_rule + "|e[attr]", "|e[attr]");
assert_selector_serializes_to(default_ns_rules + "|e[attr]", "|e[attr]");
}, "Type selector without a namespace followed by attribute selector");
test(function() {
assert_selector_serializes_to(ns_rule + "*|e.c", "e.c");
assert_selector_serializes_to(default_ns_rules + "*|e.c", "*|e.c");
}, "Type selector with any namespace followed by class");
test(function() {
assert_selector_serializes_to(ns_rule + "*|e#id", "e#id");
assert_selector_serializes_to(default_ns_rules + "*|e#id", "*|e#id");
}, "Type selector with any namespace followed by id");
test(function() {
assert_selector_serializes_to(ns_rule + "*|e:hover", "e:hover");
assert_selector_serializes_to(default_ns_rules + "*|e:hover", "*|e:hover");
}, "Type selector with any namespace followed by pseudo class");
test(function() {
assert_selector_serializes_to(ns_rule + "*|e::before", "e::before");
assert_selector_serializes_to(default_ns_rules + "*|e::before", "*|e::before");
}, "Type selector with any namespace followed by pseudo element");
test(function() {
assert_selector_serializes_to(ns_rule + "*|e[attr]", "e[attr]");
assert_selector_serializes_to(default_ns_rules + "*|e[attr]", "*|e[attr]");
}, "Type selector with any namespace followed by attribute selector");
test(function() {
assert_selector_serializes_to(ns_rule + "*.c", ".c");
assert_selector_serializes_to(default_ns_rules + "*.c", ".c");
}, "Universal selector followed by class");
test(function() {
assert_selector_serializes_to(ns_rule + "*#i", "#i");
assert_selector_serializes_to(default_ns_rules + "*#i", "#i");
}, "Universal selector followed by id");
test(function() {
assert_selector_serializes_to(ns_rule + "*:hover", ":hover");
assert_selector_serializes_to(default_ns_rules + "*:hover", ":hover");
}, "Universal selector followed by pseudo class");
test(function() {
assert_selector_serializes_to(ns_rule + "*::before", "::before");
assert_selector_serializes_to(default_ns_rules + "*::before", "::before");
}, "Universal selector followed by pseudo element");
test(function() {
assert_selector_serializes_to(ns_rule + "*[attr]", "[attr]");
assert_selector_serializes_to(default_ns_rules + "*[attr]", "[attr]");
}, "Universal selector followed by attribute selector");
test(function() {
assert_selector_serializes_to(ns_rule + "|*.c", "|*.c");
assert_selector_serializes_to(default_ns_rules + "|*.c", "|*.c");
}, "Universal selector without a namespace followed by class");
test(function() {
assert_selector_serializes_to(ns_rule + "|*#i", "|*#i");
assert_selector_serializes_to(default_ns_rules + "|*#i", "|*#i");
}, "Universal selector without a namespace followed by id");
test(function() {
assert_selector_serializes_to(ns_rule + "|*:hover", "|*:hover");
assert_selector_serializes_to(default_ns_rules + "|*:hover", "|*:hover");
}, "Universal selector without a namespace followed by pseudo class");
test(function() {
assert_selector_serializes_to(ns_rule + "|*::before", "|*::before");
assert_selector_serializes_to(default_ns_rules + "|*::before", "|*::before");
}, "Universal selector without a namespace followed by pseudo element");
test(function() {
assert_selector_serializes_to(ns_rule + "|*[attr]", "|*[attr]");
assert_selector_serializes_to(default_ns_rules + "|*[attr]", "|*[attr]");
}, "Universal selector without a namespace followed by attribute selector");
test(function() {
assert_selector_serializes_to(ns_rule + "*|*.c", ".c");
assert_selector_serializes_to(default_ns_rules + "*|*.c", "*|*.c");
}, "Universal selector in any namespace followed by class");
test(function() {
assert_selector_serializes_to(ns_rule + "*|*#id", "#id");
assert_selector_serializes_to(default_ns_rules + "*|*#id", "*|*#id");
}, "Universal selector in any namespace followed by id");
test(function() {
assert_selector_serializes_to(ns_rule + "*|*:hover", ":hover");
assert_selector_serializes_to(default_ns_rules + "*|*:hover", "*|*:hover");
}, "Universal selector in any namespace followed by pseudo class");
test(function() {
assert_selector_serializes_to(ns_rule + "*|*::before", "::before");
assert_selector_serializes_to(default_ns_rules + "*|*::before", "*|*::before");
}, "Universal selector in any namespace followed by pseudo element");
test(function() {
assert_selector_serializes_to(ns_rule + "*|*[attr]", "[attr]");
assert_selector_serializes_to(default_ns_rules + "*|*[attr]", "*|*[attr]");
}, "Universal selector in any namespace followed by attribute selector");
test(function() {
assert_selector_serializes_to(ns_rule + "ns|e.c", "ns|e.c");
assert_selector_serializes_to(default_ns_rules + "ns|e.c", "ns|e.c");
}, "Type selector with namespace followed by class");
test(function() {
assert_selector_serializes_to(ns_rule + "ns|e#i", "ns|e#i");
assert_selector_serializes_to(default_ns_rules + "ns|e#i", "ns|e#i");
}, "Type selector with namespace followed by id");
test(function() {
assert_selector_serializes_to(ns_rule + "ns|e:hover", "ns|e:hover");
assert_selector_serializes_to(default_ns_rules + "ns|e:hover", "ns|e:hover");
}, "Type selector with namespace followed by pseudo class");
test(function() {
assert_selector_serializes_to(ns_rule + "ns|e::before", "ns|e::before");
assert_selector_serializes_to(default_ns_rules + "ns|e::before", "ns|e::before");
}, "Type selector with namespace followed by pseudo element");
test(function() {
assert_selector_serializes_to(ns_rule + "ns|e[attr]", "ns|e[attr]");
assert_selector_serializes_to(default_ns_rules + "ns|e[attr]", "ns|e[attr]");
}, "Type selector with namespace followed by attribute selector");
test(function() {
assert_selector_serializes_to(ns_rule + "ns|*.c", "ns|*.c");
assert_selector_serializes_to(default_ns_rules + "ns|*.c", "ns|*.c");
}, "Universal selector with namespace followed by class");
test(function() {
assert_selector_serializes_to(ns_rule + "ns|*#i", "ns|*#i");
assert_selector_serializes_to(default_ns_rules + "ns|*#i", "ns|*#i");
}, "Universal selector with namespace followed by id");
test(function() {
assert_selector_serializes_to(ns_rule + "ns|*:hover", "ns|*:hover");
assert_selector_serializes_to(default_ns_rules + "ns|*:hover", "ns|*:hover");
}, "Universal selector with namespace followed by pseudo class");
test(function() {
assert_selector_serializes_to(ns_rule + "ns|*::before", "ns|*::before");
assert_selector_serializes_to(default_ns_rules + "ns|*::before", "ns|*::before");
}, "Universal selector with namespace followed by pseudo element");
test(function() {
assert_selector_serializes_to(ns_rule + "ns|*[attr]", "ns|*[attr]");
assert_selector_serializes_to(default_ns_rules + "ns|*[attr]", "ns|*[attr]");
}, "Universal selector with namespace followed by attribute selector");
test(function() {
assert_selector_serializes_to(default_ns_rules + "nsdefault|e", "e");
}, "Type selector with namespace equal to default namespace");
test(function() {
assert_selector_serializes_to(default_ns_rules + "nsdefault|*", "*");
}, "Universal selector with namespace equal to default namespace");
test(function() {
assert_selector_serializes_to(default_ns_rules + "nsdefault|e.c", "e.c");
}, "Type selector with namespace equal to default namespace followed by class");
test(function() {
assert_selector_serializes_to(default_ns_rules + "nsdefault|e#i", "e#i");
}, "Type selector with namespace equal to default namespace followed by id");
test(function() {
assert_selector_serializes_to(default_ns_rules + "nsdefault|e:hover", "e:hover");
}, "Type selector with namespace equal to default namespace followed by pseudo class");
test(function() {
assert_selector_serializes_to(default_ns_rules + "nsdefault|e::before", "e::before");
}, "Type selector with namespace equal to default namespace followed by pseudo element");
test(function() {
assert_selector_serializes_to(default_ns_rules + "nsdefault|e[attr]", "e[attr]");
}, "Type selector with namespace equal to default namespace followed by attribute selector");
test(function() {
assert_selector_serializes_to(default_ns_rules + "nsdefault|*.c", ".c");
}, "Universal selector with namespace equal to default namespace followed by class");
test(function() {
assert_selector_serializes_to(default_ns_rules + "nsdefault|*#i", "#i");
}, "Universal selector with namespace equal to default namespace followed by id");
test(function() {
assert_selector_serializes_to(default_ns_rules + "nsdefault|*:hover", ":hover");
}, "Universal selector with namespace equal to default namespace followed by pseudo class");
test(function() {
assert_selector_serializes_to(default_ns_rules + "nsdefault|*::before", "::before");
}, "Universal selector with namespace equal to default namespace followed by pseudo element");
test(function() {
assert_selector_serializes_to(default_ns_rules + "nsdefault|*[attr]", "[attr]");
}, "Universal selector with namespace equal to default namespace followed by attribute selector");
</script>
</body>
</html>