1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
|
<!DOCTYPE html>
<html>
<head>
<title>math in html: parsing</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
</head>
<body>
<h1>math in html: parsing</h1>
<div id="log"></div>
<div>
<div><MATH id="m1"><Mtext/></math></div>
<div id="d1"><math><MI MATHVARIANT="BOLD" /></math></div>
<div id="d2"><math><semantics DEFINITIONurl="www.example.org/FOO"><mi>a</mi><annotation-xml><foo/><bar/></annotation-xml></semantics></math></div>
<div><math id="m3span-mtext"><mtext><Span>x</Span></mtext></math></div>
<div><math id="m3span-mi"><mi><Span>x</Span></mi></math></div>
<div><math id="m3span-mrow"><mi><Span>x</Span></mrow></math></div>
<div><math id="m3p-mtext"><mtext><P>x</P></mtext></math></div>
<div><math id="m3p-mi"><mi><P>x</P></mi></math></div>
<div id="d3p-mrow"><math><mrow><P>x</P><mi>y</mi></mrow></math></div>
<div><math id="m4"><mtext><Undefinedelement>x</Undefinedelement></mtext></math></div>
<div><math id="m5"><mtext><mi>x</mi></mtext></math></div>
<div><math><semantics><mi>x</mi>
<annotation-xml><p id="p6default">x</p></annotation-xml>
</semantics></math></div>
<div><math><semantics><mi>x</mi>
<annotation-xml encoding=text/html><p id="p6texthtml">x</p></annotation-xml>
</semantics></math></div>
<div><math><semantics><mi>x</mi>
<annotation-xml encoding=TEXT/HTML><p id="p6uctexthtml">x</p></annotation-xml>
</semantics></math></div>
<div><math><semantics><mi>x</mi>
<annotation-xml encoding=application/xhtml+xml><p id="p6applicationxhtmlxml">x</p></annotation-xml>
</semantics></math></div>
<div><math><semantics><mi>x</mi>
<annotation-xml encoding=foo><p id="p6foo">x</p></annotation-xml>
</semantics></math></div>
</div>
<script>
test(function() {
assert_equals(document.getElementById("m1"),document.getElementsByTagName("math")[0]);
},"MATH element name should be lowercased");
test(function() {
assert_equals(document.getElementById("d1").firstChild.firstChild.nodeName,"mi");
assert_equals(document.getElementById("d1").firstChild.firstChild.namespaceURI, "http://www.w3.org/1998/Math/MathML");
assert_true(document.getElementById("d1").firstChild.firstChild.hasAttribute("mathvariant"));
assert_equals(document.getElementById("d1").firstChild.firstChild.getAttribute("mathvariant"),"BOLD")
},"MI element name and mathvariant attribute name should be lowercased, attribute value unchanged");
test(function() {
assert_true(document.getElementById("d2").firstChild.firstChild.hasAttribute("definitionURL"));
assert_equals(document.getElementById("d2").firstChild.firstChild.getAttribute("definitionURL"),"www.example.org/FOO")
},"DEFINITIONurl attribute markup should produce a definitionURL attribute, attribute value unchanged");
test(function() {
assert_equals(document.getElementById("m3span-mtext").firstChild.firstChild.nodeName,"SPAN");
assert_equals(document.getElementById("m3span-mtext").firstChild.firstChild.namespaceURI,"http://www.w3.org/1999/xhtml")
},"html Span in mtext produces SPAN nodename in XHTML namespace");
test(function() {
assert_equals(document.getElementById("m3span-mi").firstChild.firstChild.nodeName,"SPAN");
assert_equals(document.getElementById("m3span-mi").firstChild.firstChild.namespaceURI,"http://www.w3.org/1999/xhtml")
},"html Span in mi produces SPAN nodename in XHTML namespace");
test(function() {
assert_equals(document.getElementById("m3span-mrow").firstChild.firstChild.nodeName,"SPAN");
assert_equals(document.getElementById("m3span-mrow").firstChild.firstChild.namespaceURI,"http://www.w3.org/1999/xhtml")
},"html Span in mrow produces SPAN nodename in XHTML namespace");
test(function() {
assert_equals(document.getElementById("m3p-mtext").firstChild.firstChild.nodeName,"P");
assert_equals(document.getElementById("m3p-mtext").firstChild.firstChild.namespaceURI,"http://www.w3.org/1999/xhtml")
},"html P in mtext produces P nodename in XHTML namespace");
test(function() {
assert_equals(document.getElementById("m3p-mi").firstChild.firstChild.nodeName,"P");
assert_equals(document.getElementById("m3p-mi").firstChild.firstChild.namespaceURI,"http://www.w3.org/1999/xhtml")
},"html P in mi produces P nodename in XHTML namespace");
test(function() {
assert_equals(document.getElementById("d3p-mrow").childNodes.length ,3)
},"html P in mrow terminates the math: mrow,P,MI children of div");
test(function() {
assert_equals(document.getElementById("d3p-mrow").firstChild.childNodes.length ,1)
},"html P in mrow terminates the math: mrow child of math");
test(function() {
assert_equals(document.getElementById("d3p-mrow").firstChild.firstChild.childNodes.length ,0)
},"html P in mrow terminates the math: mrow empty");
test(function() {
assert_equals(document.getElementById("d3p-mrow").childNodes[0].nodeName,"math");
assert_equals(document.getElementById("d3p-mrow").childNodes[1].nodeName,"P");
assert_equals(document.getElementById("d3p-mrow").childNodes[2].nodeName,"MI");
},"html P in mrow terminates the math: math,P,MI children of div");
test(function() {
assert_equals(document.getElementById("m4").firstChild.firstChild.nodeName,"UNDEFINEDELEMENT");
assert_equals(document.getElementById("m4").firstChild.firstChild.namespaceURI,"http://www.w3.org/1999/xhtml")
},"Undefinedelement in mtext produces UNDEFINEDELEMENT nodename in XHTML namespace");
test(function() {
assert_equals(document.getElementById("m5").firstChild.firstChild.nodeName,"MI");
assert_equals(document.getElementById("m5").firstChild.firstChild.namespaceURI,"http://www.w3.org/1999/xhtml")
},"mi in mtext produces MI nodename in XHTML namespace");
test(function() {
assert_equals(document.getElementById("p6default").parentNode.nodeName,"DIV")
},"p in annotation-xml moves to be child of DIV");
test(function() {
assert_equals(document.getElementById("p6texthtml").parentNode.nodeName,"annotation-xml")
},"p in annotation-xml encoding=text/html stays as child of annotation-xml");
test(function() {
assert_equals(document.getElementById("p6uctexthtml").parentNode.nodeName,"annotation-xml")
},"p in annotation-xml encoding=TEXT/HTML stays as child of annotation-xml");
test(function() {
assert_equals(document.getElementById("p6applicationxhtmlxml").parentNode.nodeName,"annotation-xml")
},"p in annotation-xml encoding=application/xhtml+xml stays as child of annotation-xml");
test(function() {
assert_equals(document.getElementById("p6foo").parentNode.nodeName,"DIV")
},"p in annotation-xml encoding=foo moves to be child of DIV");
</script>
</body>
</html>
|