Index: third_party/WebKit/LayoutTests/imported/web-platform-tests/dom/nodes/case.js |
diff --git a/third_party/WebKit/LayoutTests/imported/web-platform-tests/dom/nodes/case.js b/third_party/WebKit/LayoutTests/imported/web-platform-tests/dom/nodes/case.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..fb28b9514a303c4af7cba4d32b9284b5b5f98d9c |
--- /dev/null |
+++ b/third_party/WebKit/LayoutTests/imported/web-platform-tests/dom/nodes/case.js |
@@ -0,0 +1,179 @@ |
+/* |
+ * document.createElement(NS) |
+ * |
+ * document.getElementsByTagName(NS) |
+ * |
+ * Element.setAttribute(NS) |
+ * |
+ * Element.getAttribute(NS) |
+ * Element.hasAttribute(NS) |
+ * Element.getElementsByTagName(NS) |
+ */ |
+ |
+var tests = []; |
+setup(function() { |
+ var name_inputs = ["abc", "Abc", "ABC", "ä", "Ä"]; |
+ var namespaces = ["http://www.w3.org/1999/xhtml", "http://www.w3.org/2000/svg", "http://FOO"]; |
+ name_inputs.forEach(function(x) { |
+ tests.push(["createElement " + x, test_create_element, [x]]); |
+ tests.push(["setAttribute " +x, test_set_attribute, [x]]); |
+ tests.push(["getAttribute " +x, test_get_attribute, [x]]); |
+ tests.push(["getElementsByTagName a:" +x, test_get_elements_tag_name, |
+ [outer_product(namespaces, ["a"], name_inputs), |
+ x]]); |
+ tests.push(["getElementsByTagName " +x, test_get_elements_tag_name, |
+ [outer_product(namespaces, [null], name_inputs), |
+ x]]); |
+ }); |
+ outer_product(namespaces, name_inputs, name_inputs).forEach(function(x) { |
+ tests.push(["createElementNS " + x, test_create_element_ns, x]); |
+ tests.push(["setAttributeNS " + x, test_set_attribute_ns, x]); |
+ tests.push(["getAttributeNS " + x, test_get_attribute_ns, x]); |
+ }); |
+ outer_product([null].concat(namespaces), name_inputs).forEach(function(x) { |
+ tests.push(["getElementsByTagNameNS " + x, test_get_elements_tag_name_ns, |
+ outer_product(namespaces, name_inputs), x]); |
+ }); |
+ name_inputs.forEach(function(x) { |
+ tests.push(["createElementNS " + x, test_create_element_ns, [null, null, x]]); |
+ tests.push(["setAttributeNS " + x, test_set_attribute_ns, [null, null, x]]); |
+ tests.push(["getAttributeNS " + x, test_get_attribute_ns, [null, null, x]]); |
+ }); |
+ |
+ }); |
+function outer_product() { |
+ var rv = []; |
+ function compute_outer_product() { |
+ var args = Array.prototype.slice.call(arguments); |
+ var index = args[0]; |
+ if (index < args.length) { |
+ args[index].forEach(function(x) { |
+ compute_outer_product.apply(this, [index+1].concat(args.slice(1, index), x, args.slice(index+1))); |
+ }); |
+ } else { |
+ rv.push(args.slice(1)); |
+ } |
+ } |
+ compute_outer_product.apply(this, [1].concat(Array.prototype.slice.call(arguments))); |
+ return rv; |
+} |
+ |
+function expected_case(input) { |
+ //is_html gets set by a global on the page loading the tests |
+ if (is_html) { |
+ return ascii_lowercase(input); |
+ } else { |
+ return input; |
+ } |
+} |
+ |
+function ascii_lowercase(input) { |
+ return input.replace(/[A-Z]/g, function(x) { |
+ return x.toLowerCase(); |
+ }); |
+} |
+ |
+function test_create_element(name) { |
+ var node = document.createElement(name); |
+ assert_equals(node.localName, expected_case(name)); |
+} |
+ |
+function test_create_element_ns(namespace, prefix, local_name) { |
+ var qualified_name = prefix ? prefix + ":" + local_name : local_name; |
+ var node = document.createElementNS(namespace, qualified_name); |
+ assert_equals(node.prefix, prefix, "prefix"); |
+ assert_equals(node.localName, local_name, "localName"); |
+} |
+ |
+function test_set_attribute(name) { |
+ var node = document.createElement("div"); |
+ node.setAttribute(name, "test"); |
+ assert_equals(node.attributes[0].localName, expected_case(name)); |
+} |
+ |
+function test_set_attribute_ns(namespace, prefix, local_name) { |
+ var qualified_name = prefix ? prefix + ":" + local_name : local_name; |
+ var node = document.createElement("div"); |
+ node.setAttributeNS(namespace, qualified_name, "test"); |
+ var attr = node.attributes[0]; |
+ assert_equals(attr.prefix, prefix, "prefix"); |
+ assert_equals(attr.localName, local_name, "localName"); |
+} |
+ |
+function test_get_attribute(name) { |
+ var node = document.createElement("div"); |
+ node.setAttribute(name, "test"); |
+ var expected_name = expected_case(name); |
+ assert_equals(node.getAttribute(expected_name), "test"); |
+ if (expected_name != name) { |
+ assert_equals(node.getAttribute(expected_name), "test"); |
+ } else if (name !== ascii_lowercase(name)) { |
+ assert_equals(node.getAttribute(ascii_lowercase(name)), null); |
+ } |
+} |
+ |
+function test_get_attribute_ns(namespace, prefix, local_name) { |
+ var qualified_name = prefix ? prefix + ":" + local_name : local_name; |
+ var node = document.createElement("div"); |
+ node.setAttributeNS(namespace, qualified_name, "test"); |
+ var expected_name = local_name; |
+ assert_equals(node.getAttributeNS(namespace, expected_name), "test"); |
+ if (local_name !== ascii_lowercase(local_name)) { |
+ assert_equals(node.getAttributeNS(namespace, ascii_lowercase(local_name)), null); |
+ } |
+} |
+ |
+function test_get_elements_tag_name(elements_to_create, search_string) { |
+ var container = document.createElement("div"); |
+ elements_to_create.forEach(function(x) { |
+ var qualified_name = x[1] ? x[1] + ":" + x[2] : x[2]; |
+ var element = document.createElementNS(x[0], qualified_name); |
+ container.appendChild(element); |
+ }); |
+ var expected = Array.prototype.filter.call(container.childNodes, |
+ function(node) { |
+ if (is_html && node.namespaceURI === "http://www.w3.org/1999/xhtml") { |
+ return node.localName === expected_case(search_string); |
+ } else { |
+ return node.localName === search_string; |
+ } |
+ }); |
+ document.documentElement.appendChild(container); |
+ try { |
+ assert_array_equals(document.getElementsByTagName(search_string), expected); |
+ } finally { |
+ document.documentElement.removeChild(container); |
+ } |
+} |
+ |
+function test_get_elements_tag_name_ns(elements_to_create, search_input) { |
+ var search_uri = search_input[0]; |
+ var search_name = search_input[1]; |
+ var container = document.createElement("div"); |
+ elements_to_create.forEach(function(x) { |
+ var qualified_name = x[1] ? x[1] + ":" + x[2] : x[2]; |
+ var element = document.createElementNS(x[0], qualified_name); |
+ container.appendChild(element); |
+ }); |
+ var expected = Array.prototype.filter.call(container.childNodes, |
+ function(node) { |
+ return node.namespaceURI === search_uri; |
+ return node.localName === search_name; |
+ }); |
+ document.documentElement.appendChild(container); |
+ try { |
+ assert_array_equals(document.getElementsByTagNameNS(search_uri, search_name), expected); |
+ } catch(e) { |
+ throw e; |
+ } finally { |
+ document.documentElement.removeChild(container); |
+ } |
+} |
+ |
+function test_func() { |
+ var func = arguments[0]; |
+ var rest = arguments[1]; |
+ func.apply(this, rest); |
+} |
+ |
+generate_tests(test_func, tests); |