blob: b9c8d04ba024df7f31fb672ac6d82ba45baefd8e [file] [log] [blame]
<!DOCTYPE html>
<html xmlns:foo="http://www.webkit.org/awesome.html">
<head>
<meta charset="utf-8">
<script src="../../../resources/js-test-pre.js"></script>
</head>
<body>
<div id="test-container" style="display: none;"></div>
</body>
<script>
description('In HTML, attributes should be ASCII case-insensitive. This test includes basic coverage for setting names with the prefix syntax through the simple attribute API.');
var testContainer = document.getElementById('test-container');
function testAttributeOnTarget(equivalentNames, distinctNames) {
for (var equivalentName of equivalentNames) {
shouldBeTrue('document.getElementById("target").hasAttribute("' + equivalentName + '")');
shouldBeEqualToString('document.getElementById("target").getAttribute("' + equivalentName + '")', 'WebKit!');
}
for (var distinctName of distinctNames) {
shouldBeFalse('document.getElementById("target").hasAttribute("' + distinctName + '")');
shouldBe('document.getElementById("target").getAttribute("' + distinctName + '")', 'null');
}
var target = document.getElementById("target");
for (var distinctName of distinctNames) {
target.removeAttribute(distinctName);
}
for (var equivalentName of equivalentNames) {
shouldBeTrue('document.getElementById("target").hasAttribute("' + equivalentName + '")');
shouldBeEqualToString('document.getElementById("target").getAttribute("' + equivalentName + '")', 'WebKit!');
}
}
function testParsedAttribute(attribute, equivalentNames, distinctNames) {
testContainer.innerHTML = '<div ' + attribute + '="WebKit!" id="target"></div>';
testAttributeOnTarget(equivalentNames, distinctNames);
testContainer.innerHTML = '';
}
function testAttributeFromDOMApis(attribute, equivalentNames, distinctNames) {
var newElement = document.createElement('div');
newElement.setAttribute('id', 'target');
newElement.setAttribute(attribute, "WebKit!");
testContainer.appendChild(newElement);
testAttributeOnTarget(equivalentNames, distinctNames);
testContainer.innerHTML = '';
}
function testAttribute(equivalentNames, distinctNames) {
for (var testCase of equivalentNames) {
debug("Testing " + testCase);
testParsedAttribute(testCase, equivalentNames, distinctNames);
testAttributeFromDOMApis(testCase, equivalentNames, distinctNames);
debug("");
}
}
// ASCII prefixes.
testAttribute(['foo:data-æøå', 'foo:DATA-æøå', 'foo:Data-æøå', 'FOO:data-æøå', 'Foo:data-æøå'], ['data-ÆØÅ', 'data-Æøå', 'foo:data-ÆØÅ', 'foo:data-Æøå']);
testAttribute(['foo:data-Æøå', 'foo:DATA-Æøå', 'foo:Data-Æøå', 'FOO:data-Æøå', 'Foo:data-Æøå'], ['data-ÆØÅ', 'data-æøå', 'foo:data-ÆØÅ', 'foo:data-æøå']);
testAttribute(['foo:data-ÆØÅ', 'foo:DATA-ÆØÅ', 'foo:Data-ÆØÅ', 'FOO:data-ÆØÅ', 'Foo:data-ÆØÅ'], ['data-Æøå', 'data-æøå', 'foo:data-Æøå', 'foo:data-æøå']);
// Non-ASCII prefixes.
testAttribute(['fooæøå:data-æøå', 'Fooæøå:DATA-æøå', 'FOOæøå:Data-æøå'], ['fooÆøå:data-ÆØÅ', 'FooÆøå:data-Æøå', 'FOOÆøå:data-ÆØÅ', 'fooæøå:data-Æøå', 'fooæøå:data-ÆØÅ', 'fooæøå:data-Æøå']);
</script>
<script src="../../../resources/js-test-post.js"></script>
</html>