mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
4d6a633bba
The -*- file variable lines -*- establish per-file settings that Emacs will pick up. This patch makes the following changes to those lines (and touches nothing else): - Never set the buffer's mode. Years ago, Emacs did not have a good JavaScript mode, so it made sense to use Java or C++ mode in .js files. However, Emacs has had js-mode for years now; it's perfectly serviceable, and is available and enabled by default in all major Emacs packagings. Selecting a mode in the -*- file variable line -*- is almost always the wrong thing to do anyway. It overrides Emacs's default choice, which is (now) reasonable; and even worse, it overrides settings the user might have made in their '.emacs' file for that file extension. It's only useful when there's something specific about that particular file that makes a particular mode appropriate. - Correctly propagate settings that establish the correct indentation level for this file: c-basic-offset and js2-basic-offset should be js-indent-level. Whatever value they're given should be preserved; different parts of our tree use different indentation styles. - We don't use tabs in Mozilla JS code. Always set indent-tabs-mode: nil. Remove tab-width: settings, at least in files that don't contain tab characters. - Remove js2-mode settings that belong in the user's .emacs file, like js2-skip-preprocessor-directives.
395 lines
15 KiB
JavaScript
395 lines
15 KiB
JavaScript
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
|
function run_test()
|
|
{
|
|
|
|
/**
|
|
* NOTE: [i] is not allowed in this test, since it's done via classinfo and
|
|
* we don't have that in xpcshell.
|
|
*/
|
|
|
|
test_getElementsByTagName();
|
|
test_getElementsByTagNameNS();
|
|
test_getElementsByAttribute();
|
|
test_getElementsByAttributeNS();
|
|
|
|
// What else should we test?
|
|
// XXXbz we need more tests here to test liveness!
|
|
|
|
}
|
|
|
|
function test_getElementsByTagName()
|
|
{
|
|
var doc = ParseFile("nodelist_data_1.xml");
|
|
var root = doc.documentElement;
|
|
|
|
// Check that getElementsByTagName returns a nodelist.
|
|
do_check_true(doc.getElementsByTagName("*") instanceof nsIDOMNodeList);
|
|
do_check_true(root.getElementsByTagName("*") instanceof nsIDOMNodeList);
|
|
|
|
// Check that getElementsByTagName excludes the element it's called on.
|
|
do_check_eq(doc.getElementsByTagName("*").length,
|
|
root.getElementsByTagName("*").length + 1);
|
|
do_check_eq(doc.getElementById("test2").getElementsByTagName("*").length,
|
|
8);
|
|
do_check_eq(doc.getElementById("test2").getElementsByTagName("test").length,
|
|
3);
|
|
|
|
// Check that the first element of getElementsByTagName on the document is
|
|
// the right thing.
|
|
do_check_eq(doc.getElementsByTagName("*").item(0), root);
|
|
|
|
// Check that we get the right things in the right order
|
|
var numTests = doc.getElementsByTagName("test").length;
|
|
do_check_eq(numTests, 5);
|
|
|
|
for (var i = 1; i <= numTests; ++i) {
|
|
do_check_true(doc.getElementById("test" + i) instanceof nsIDOMElement);
|
|
do_check_eq(doc.getElementById("test" + i),
|
|
doc.getElementsByTagName("test").item(i-1));
|
|
}
|
|
|
|
// Check that we handle tagnames containing ':' correctly
|
|
do_check_true(doc.getElementsByTagName("foo:test")
|
|
instanceof nsIDOMNodeList);
|
|
do_check_eq(doc.getElementsByTagName("foo:test").length, 2);
|
|
|
|
do_check_true(doc.getElementsByTagName("foo2:test")
|
|
instanceof nsIDOMNodeList);
|
|
do_check_eq(doc.getElementsByTagName("foo2:test").length, 3);
|
|
|
|
do_check_true(doc.getElementsByTagName("bar:test")
|
|
instanceof nsIDOMNodeList);
|
|
do_check_eq(doc.getElementsByTagName("bar:test").length, 4);
|
|
}
|
|
|
|
function test_getElementsByTagNameNS()
|
|
{
|
|
var doc = ParseFile("nodelist_data_1.xml");
|
|
var root = doc.documentElement;
|
|
|
|
// Check that getElementsByTagNameNS returns a nodelist.
|
|
do_check_true(doc.getElementsByTagNameNS("*", "*") instanceof nsIDOMNodeList);
|
|
do_check_true(root.getElementsByTagNameNS("*", "*") instanceof nsIDOMNodeList);
|
|
|
|
// Check that passing "" and null for the namespace URI gives the same result
|
|
var list1 = doc.getElementsByTagNameNS("", "test");
|
|
var list2 = doc.getElementsByTagNameNS(null, "test");
|
|
do_check_eq(list1.length, list2.length);
|
|
for (var i = 0; i < list1.length; ++i) {
|
|
do_check_eq(list1.item(i), list2.item(i));
|
|
}
|
|
|
|
// Check that getElementsByTagNameNS excludes the element it's called on.
|
|
do_check_eq(doc.getElementsByTagNameNS("*", "*").length,
|
|
root.getElementsByTagNameNS("*", "*").length + 1);
|
|
do_check_eq(doc.getElementById("test2")
|
|
.getElementsByTagNameNS("*", "*").length,
|
|
8);
|
|
do_check_eq(doc.getElementById("test2")
|
|
.getElementsByTagNameNS("", "test").length,
|
|
1);
|
|
do_check_eq(doc.getElementById("test2")
|
|
.getElementsByTagNameNS("*", "test").length,
|
|
7);
|
|
|
|
// Check that the first element of getElementsByTagNameNS on the document is
|
|
// the right thing.
|
|
do_check_eq(doc.getElementsByTagNameNS("*", "*").item(0), root);
|
|
do_check_eq(doc.getElementsByTagNameNS(null, "*").item(0), root);
|
|
|
|
// Check that we get the right things in the right order
|
|
|
|
|
|
var numTests = doc.getElementsByTagNameNS("*", "test").length;
|
|
do_check_eq(numTests, 14);
|
|
|
|
for (var i = 1; i <= numTests; ++i) {
|
|
do_check_true(doc.getElementById("test" + i) instanceof nsIDOMElement);
|
|
do_check_eq(doc.getElementById("test" + i),
|
|
doc.getElementsByTagNameNS("*", "test").item(i-1));
|
|
}
|
|
|
|
// Check general proper functioning of having a non-wildcard namespace.
|
|
var test2 = doc.getElementById("test2");
|
|
do_check_eq(doc.getElementsByTagNameNS("", "test").length,
|
|
3);
|
|
do_check_eq(test2.getElementsByTagNameNS("", "test").length,
|
|
1);
|
|
do_check_eq(doc.getElementsByTagNameNS("foo", "test").length,
|
|
7);
|
|
do_check_eq(test2.getElementsByTagNameNS("foo", "test").length,
|
|
4);
|
|
do_check_eq(doc.getElementsByTagNameNS("foo2", "test").length,
|
|
0);
|
|
do_check_eq(test2.getElementsByTagNameNS("foo2", "test").length,
|
|
0);
|
|
do_check_eq(doc.getElementsByTagNameNS("bar", "test").length,
|
|
4);
|
|
do_check_eq(test2.getElementsByTagNameNS("bar", "test").length,
|
|
2);
|
|
|
|
// Check that we handle tagnames containing ':' correctly
|
|
do_check_true(doc.getElementsByTagNameNS(null, "foo:test")
|
|
instanceof nsIDOMNodeList);
|
|
do_check_eq(doc.getElementsByTagNameNS(null, "foo:test").length, 0);
|
|
do_check_eq(doc.getElementsByTagNameNS("foo", "foo:test").length, 0);
|
|
do_check_eq(doc.getElementsByTagNameNS("bar", "foo:test").length, 0);
|
|
do_check_eq(doc.getElementsByTagNameNS("*", "foo:test").length, 0);
|
|
|
|
do_check_true(doc.getElementsByTagNameNS(null, "foo2:test")
|
|
instanceof nsIDOMNodeList);
|
|
do_check_eq(doc.getElementsByTagNameNS(null, "foo2:test").length, 0);
|
|
do_check_eq(doc.getElementsByTagNameNS("foo2", "foo2:test").length, 0);
|
|
do_check_eq(doc.getElementsByTagNameNS("bar", "foo2:test").length, 0);
|
|
do_check_eq(doc.getElementsByTagNameNS("*", "foo2:test").length, 0);
|
|
|
|
do_check_true(doc.getElementsByTagNameNS(null, "bar:test")
|
|
instanceof nsIDOMNodeList);
|
|
do_check_eq(doc.getElementsByTagNameNS(null, "bar:test").length, 0);
|
|
do_check_eq(doc.getElementsByTagNameNS("bar", "bar:test").length, 0);
|
|
do_check_eq(doc.getElementsByTagNameNS("*", "bar:test").length, 0);
|
|
|
|
// Check that previously-unknown namespaces are handled right. Note that we
|
|
// can just hardcode the strings, since we're running only once in XPCshell.
|
|
// If someone wants to run these in a browser, some use of Math.random() may
|
|
// be in order.
|
|
list1 = doc.getElementsByTagNameNS("random-bogus-namespace", "foo");
|
|
list2 = doc.documentElement.getElementsByTagNameNS("random-bogus-namespace2",
|
|
"foo");
|
|
do_check_neq(list1, list2);
|
|
do_check_eq(list1.length, 0);
|
|
do_check_eq(list2.length, 0);
|
|
var newNode = doc.createElementNS("random-bogus-namespace", "foo");
|
|
doc.documentElement.appendChild(newNode);
|
|
var newNode = doc.createElementNS("random-bogus-namespace2", "foo");
|
|
doc.documentElement.appendChild(newNode);
|
|
do_check_eq(list1.length, 1);
|
|
do_check_eq(list2.length, 1);
|
|
}
|
|
|
|
function test_getElementsByAttribute()
|
|
{
|
|
var doc = ParseFile("nodelist_data_2.xul");
|
|
var root = doc.documentElement;
|
|
|
|
// Sadly, DOMParser can't create XULDocument objects. But at least we have a
|
|
// XULElement!
|
|
|
|
do_check_true(root instanceof nsIDOMXULElement);
|
|
|
|
do_check_true(root.getElementsByAttribute("foo", "foo") instanceof
|
|
nsIDOMNodeList);
|
|
|
|
var master1 = doc.getElementById("master1");
|
|
var master2 = doc.getElementById("master2");
|
|
var master3 = doc.getElementById("master3");
|
|
var external = doc.getElementById("external");
|
|
|
|
do_check_true(master1 instanceof nsIDOMXULElement);
|
|
do_check_true(master2 instanceof nsIDOMXULElement);
|
|
do_check_true(master3 instanceof nsIDOMXULElement);
|
|
do_check_true(external instanceof nsIDOMXULElement);
|
|
|
|
// Basic tests
|
|
do_check_eq(root.getElementsByAttribute("foo", "foo").length,
|
|
14);
|
|
do_check_eq(master1.getElementsByAttribute("foo", "foo").length,
|
|
4);
|
|
|
|
do_check_eq(root.getElementsByAttribute("foo", "bar").length,
|
|
7);
|
|
do_check_eq(master1.getElementsByAttribute("foo", "bar").length,
|
|
2);
|
|
|
|
do_check_eq(root.getElementsByAttribute("bar", "bar").length,
|
|
7);
|
|
do_check_eq(master1.getElementsByAttribute("bar", "bar").length,
|
|
2);
|
|
|
|
do_check_eq(root.getElementsByAttribute("foo", "*").length,
|
|
21);
|
|
do_check_eq(master1.getElementsByAttribute("foo", "*").length,
|
|
6);
|
|
|
|
// Test the various combinations of attributes with colons in the name
|
|
do_check_eq(root.getElementsByAttribute("foo:foo", "foo").length,
|
|
16);
|
|
do_check_eq(master1.getElementsByAttribute("foo:foo", "foo").length,
|
|
5);
|
|
do_check_eq(master2.getElementsByAttribute("foo:foo", "foo").length,
|
|
4);
|
|
do_check_eq(master3.getElementsByAttribute("foo:foo", "foo").length,
|
|
4);
|
|
do_check_eq(external.getElementsByAttribute("foo:foo", "foo").length,
|
|
2);
|
|
|
|
do_check_eq(root.getElementsByAttribute("foo:foo", "bar").length,
|
|
9);
|
|
do_check_eq(master1.getElementsByAttribute("foo:foo", "bar").length,
|
|
2);
|
|
do_check_eq(master2.getElementsByAttribute("foo:foo", "bar").length,
|
|
3);
|
|
do_check_eq(master3.getElementsByAttribute("foo:foo", "bar").length,
|
|
2);
|
|
do_check_eq(external.getElementsByAttribute("foo:foo", "bar").length,
|
|
1);
|
|
|
|
do_check_eq(root.getElementsByAttribute("foo:bar", "foo").length,
|
|
7);
|
|
do_check_eq(master1.getElementsByAttribute("foo:bar", "foo").length,
|
|
2);
|
|
do_check_eq(master2.getElementsByAttribute("foo:bar", "foo").length,
|
|
2);
|
|
do_check_eq(master3.getElementsByAttribute("foo:bar", "foo").length,
|
|
2);
|
|
do_check_eq(external.getElementsByAttribute("foo:bar", "foo").length,
|
|
1);
|
|
|
|
do_check_eq(root.getElementsByAttribute("foo:bar", "bar").length,
|
|
14);
|
|
do_check_eq(master1.getElementsByAttribute("foo:bar", "bar").length,
|
|
4);
|
|
do_check_eq(master2.getElementsByAttribute("foo:bar", "bar").length,
|
|
4);
|
|
do_check_eq(master3.getElementsByAttribute("foo:bar", "bar").length,
|
|
4);
|
|
do_check_eq(external.getElementsByAttribute("foo:bar", "bar").length,
|
|
2);
|
|
|
|
do_check_eq(root.getElementsByAttribute("foo2:foo", "foo").length,
|
|
8);
|
|
do_check_eq(master1.getElementsByAttribute("foo2:foo", "foo").length,
|
|
2);
|
|
do_check_eq(master2.getElementsByAttribute("foo2:foo", "foo").length,
|
|
2);
|
|
do_check_eq(master3.getElementsByAttribute("foo2:foo", "foo").length,
|
|
3);
|
|
do_check_eq(external.getElementsByAttribute("foo2:foo", "foo").length,
|
|
1);
|
|
|
|
do_check_eq(root.getElementsByAttribute("foo:foo", "*").length,
|
|
25);
|
|
do_check_eq(master1.getElementsByAttribute("foo:foo", "*").length,
|
|
7);
|
|
do_check_eq(master2.getElementsByAttribute("foo:foo", "*").length,
|
|
7);
|
|
do_check_eq(master3.getElementsByAttribute("foo:foo", "*").length,
|
|
6);
|
|
do_check_eq(external.getElementsByAttribute("foo:foo", "*").length,
|
|
3);
|
|
|
|
do_check_eq(root.getElementsByAttribute("foo2:foo", "bar").length,
|
|
0);
|
|
do_check_eq(root.getElementsByAttribute("foo:foo", "baz").length,
|
|
0);
|
|
}
|
|
|
|
function test_getElementsByAttributeNS()
|
|
{
|
|
var doc = ParseFile("nodelist_data_2.xul");
|
|
var root = doc.documentElement;
|
|
|
|
// Sadly, DOMParser can't create XULDocument objects. But at least we have a
|
|
// XULElement!
|
|
|
|
do_check_true(root instanceof nsIDOMXULElement);
|
|
|
|
// Check that getElementsByAttributeNS returns a nodelist.
|
|
do_check_true(root.getElementsByAttributeNS("*", "*", "*") instanceof
|
|
nsIDOMNodeList);
|
|
|
|
var master1 = doc.getElementById("master1");
|
|
var master2 = doc.getElementById("master2");
|
|
var master3 = doc.getElementById("master3");
|
|
var external = doc.getElementById("external");
|
|
|
|
do_check_true(master1 instanceof nsIDOMXULElement);
|
|
do_check_true(master2 instanceof nsIDOMXULElement);
|
|
do_check_true(master3 instanceof nsIDOMXULElement);
|
|
do_check_true(external instanceof nsIDOMXULElement);
|
|
|
|
// Test wildcard namespace
|
|
do_check_eq(root.getElementsByAttributeNS("*", "foo", "foo").length,
|
|
38);
|
|
do_check_eq(master1.getElementsByAttributeNS("*", "foo", "foo").length,
|
|
11);
|
|
do_check_eq(master2.getElementsByAttributeNS("*", "foo", "foo").length,
|
|
10);
|
|
do_check_eq(master3.getElementsByAttributeNS("*", "foo", "foo").length,
|
|
11);
|
|
|
|
do_check_eq(root.getElementsByAttributeNS("*", "foo", "bar").length,
|
|
16);
|
|
do_check_eq(master1.getElementsByAttributeNS("*", "foo", "bar").length,
|
|
4);
|
|
do_check_eq(master2.getElementsByAttributeNS("*", "foo", "bar").length,
|
|
5);
|
|
do_check_eq(master3.getElementsByAttributeNS("*", "foo", "bar").length,
|
|
4);
|
|
|
|
do_check_eq(root.getElementsByAttributeNS("*", "bar", "bar").length,
|
|
21);
|
|
do_check_eq(master1.getElementsByAttributeNS("*", "bar", "bar").length,
|
|
6);
|
|
do_check_eq(master2.getElementsByAttributeNS("*", "bar", "bar").length,
|
|
6);
|
|
do_check_eq(master3.getElementsByAttributeNS("*", "bar", "bar").length,
|
|
6);
|
|
|
|
do_check_eq(root.getElementsByAttributeNS("*", "foo", "*").length,
|
|
54);
|
|
do_check_eq(master1.getElementsByAttributeNS("*", "foo", "*").length,
|
|
15);
|
|
do_check_eq(master2.getElementsByAttributeNS("*", "foo", "*").length,
|
|
15);
|
|
do_check_eq(master3.getElementsByAttributeNS("*", "foo", "*").length,
|
|
15);
|
|
|
|
// Test null namespace. This should be the same as getElementsByAttribute.
|
|
do_check_eq(root.getElementsByAttributeNS("", "foo", "foo").length,
|
|
root.getElementsByAttribute("foo", "foo").length);
|
|
do_check_eq(master1.getElementsByAttributeNS("", "foo", "foo").length,
|
|
master1.getElementsByAttribute("foo", "foo").length);
|
|
do_check_eq(master2.getElementsByAttributeNS("", "foo", "foo").length,
|
|
master2.getElementsByAttribute("foo", "foo").length);
|
|
do_check_eq(master3.getElementsByAttributeNS("", "foo", "foo").length,
|
|
master3.getElementsByAttribute("foo", "foo").length);
|
|
|
|
// Test namespace "foo"
|
|
do_check_eq(root.getElementsByAttributeNS("foo", "foo", "foo").length,
|
|
24);
|
|
do_check_eq(master1.getElementsByAttributeNS("foo", "foo", "foo").length,
|
|
7);
|
|
do_check_eq(master2.getElementsByAttributeNS("foo", "foo", "foo").length,
|
|
6);
|
|
do_check_eq(master3.getElementsByAttributeNS("foo", "foo", "foo").length,
|
|
7);
|
|
|
|
do_check_eq(root.getElementsByAttributeNS("foo", "foo", "bar").length,
|
|
9);
|
|
do_check_eq(master1.getElementsByAttributeNS("foo", "foo", "bar").length,
|
|
2);
|
|
do_check_eq(master2.getElementsByAttributeNS("foo", "foo", "bar").length,
|
|
3);
|
|
do_check_eq(master3.getElementsByAttributeNS("foo", "foo", "bar").length,
|
|
2);
|
|
|
|
do_check_eq(root.getElementsByAttributeNS("foo", "bar", "foo").length,
|
|
7);
|
|
do_check_eq(master1.getElementsByAttributeNS("foo", "bar", "foo").length,
|
|
2);
|
|
do_check_eq(master2.getElementsByAttributeNS("foo", "bar", "foo").length,
|
|
2);
|
|
do_check_eq(master3.getElementsByAttributeNS("foo", "bar", "foo").length,
|
|
2);
|
|
|
|
do_check_eq(root.getElementsByAttributeNS("foo", "bar", "bar").length,
|
|
14);
|
|
do_check_eq(master1.getElementsByAttributeNS("foo", "bar", "bar").length,
|
|
4);
|
|
do_check_eq(master2.getElementsByAttributeNS("foo", "bar", "bar").length,
|
|
4);
|
|
do_check_eq(master3.getElementsByAttributeNS("foo", "bar", "bar").length,
|
|
4);
|
|
}
|