/*
* 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.sli
ce(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 get_qualified_name(el) {
if (el.prefix) {
return el.prefix + ":" + el.localName;
}
return el.localName;
}
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 get_qualified_name(node) === expected_case(search_string);
} else {
return get_qualified_name(node) === 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);
Messung V0.5 C=96 H=100 G=97
¤ Dauer der Verarbeitung: 0.3 Sekunden
¤
*© Formatika GbR, Deutschland