1 description("createAttirbuteNS tests adapted from createElementNS tests attached to webkit bug 16833");
11 function stringForExceptionCode(c
)
15 case DOMException
.INVALID_CHARACTER_ERR
:
16 exceptionName
= "INVALID_CHARACTER_ERR";
18 case DOMException
.NAMESPACE_ERR
:
19 exceptionName
= "NAMESPACE_ERR";
22 return exceptionName
; // + "(" + c + ")";
26 function assertExceptionCode(exception
, expect
, m
)
28 var actual
= exception
.code
;
29 if (actual
!== expect
) {
30 m
+= "; expected " + stringForExceptionCode(expect
) + ", threw " + stringForExceptionCode(actual
);
33 m
+= "; threw " + exception
.toString();
39 { args
: [undefined, undefined] },
40 { args
: [null, undefined] },
41 { args
: [undefined, null] },
42 { args
: [null, null] },
43 { args
: [null, ""], code
: 5 },
45 { args
: ["", ""], code
: 5 },
46 { args
: [null, "<div>"], code
: 5 },
47 { args
: [null, "0div"], code
: 5 },
48 { args
: [null, "di v"], code
: 5 },
49 { args
: [null, "di<v"], code
: 5 },
50 { args
: [null, "-div"], code
: 5 },
51 { args
: [null, ".div"], code
: 5 },
52 { args
: ["http://example.com/", "<div>"], code
: 5 },
53 { args
: ["http://example.com/", "0div"], code
: 5 },
54 { args
: ["http://example.com/", "di<v"], code
: 5 },
55 { args
: ["http://example.com/", "-div"], code
: 5 },
56 { args
: ["http://example.com/", ".div"], code
: 5 },
57 { args
: [null, ":div"], code
: 14 },
58 { args
: [null, "div:"], code
: 14 },
59 { args
: ["http://example.com/", ":div"], code
: 14 },
60 { args
: ["http://example.com/", "div:"], code
: 14 },
61 { args
: [null, "d:iv"], code
: 14 },
62 { args
: [null, "a:b:c"], code
: 14, message
: "valid XML name, invalid QName" },
63 { args
: ["http://example.com/", "a:b:c"], code
: 14, message
: "valid XML name, invalid QName" },
64 { args
: [null, "a::c"], code
: 14, message
: "valid XML name, invalid QName" },
65 { args
: ["http://example.com/", "a::c"], code
: 14, message
: "valid XML name, invalid QName" },
66 { args
: ["http://example.com/", "a:0"], code
: 5, message
: "valid XML name, not a valid QName" },
67 { args
: ["http://example.com/", "0:a"], code
: 5, message
: "0 at start makes it not a valid XML name" },
68 { args
: ["http://example.com/", "a:_"] },
69 { args
: ["http://example.com/", "a:\u0BC6"], code
: 14,
70 message
: "non-ASCII character after colon is CombiningChar, which is " +
71 "NCNameChar but not (Letter | \"_\") so invalid at start of " +
72 "NCName (but still a valid XML name, hence not INVALID_CHARACTER_ERR)" },
73 { args
: ["http://example.com/", "\u0BC6:a"], code
: 5,
74 message
: "non-ASCII character after colon is CombiningChar, which is " +
75 "NCNameChar but not (Letter | \"_\") so invalid at start of " +
76 "NCName (Gecko chooses to throw NAMESPACE_ERR here, but either is valid " +
77 "as this is both an invalid XML name and an invalid QName)" },
78 { args
: ["http://example.com/", "a:a\u0BC6"] },
79 { args
: ["http://example.com/", "a\u0BC6:a"] },
80 { args
: ["http://example.com/", "xml:test"], code
: 14, message
: "binding xml prefix wrong" },
81 { args
: ["http://example.com/", "xmlns:test"], code
: 14, message
: "binding xmlns prefix wrong" },
82 { args
: ["http://www.w3.org/2000/xmlns/", "x:test"], code
: 14, message
: "binding namespace namespace to wrong prefix" },
83 { args
: ["http://www.w3.org/2000/xmlns/", "xmlns:test"] },
84 { args
: ["http://www.w3.org/XML/1998/namespace", "xml:test"] },
85 { args
: ["http://www.w3.org/XML/1998/namespace", "x:test"] },
86 { args
: ["http://www.w3.org/2000/xmlns/", "xmlns"] }, // See http://www.w3.org/2000/xmlns/
87 { args
: ["http://example.com/", "xmlns"], code
: 14 }, // from the createAttributeNS section
97 return '"' + v
.replace('"', '\\"') + '"';
104 function runNSTests()
106 var createFunction
= document
.createAttributeNS
;
107 var createFunctionName
= "createAttributeNS";
110 for (var i
= 0, sz
= allNSTests
.length
; i
< sz
; i
++) {
111 var test
= allNSTests
[i
];
114 var argStr
= sourceify(test
.args
[0]) + ", " + sourceify(test
.args
[1]);
115 var msg
= createFunctionName
+ "(" + argStr
+ ")";
116 if ("message" in test
)
117 msg
+= "; " + test
.message
;
119 createFunction
.apply(doc
, test
.args
);
120 assert(!("code" in test
), msg
);
122 assertExceptionCode(e
, test
.code
|| "expected no exception", msg
);