201 lines
8.2 KiB
HTML
201 lines
8.2 KiB
HTML
<!doctype html>
|
|
<html>
|
|
<head>
|
|
<title>MathML roots: adding children</title>
|
|
|
|
<!-- This test verifies insertion of children into an <mroot>/<msqrt> element using DOM operations. It should not crash and should render the same as the equivalent static page. -->
|
|
|
|
<style type="text/css">
|
|
div { border: 1px solid; margin: .5em; }
|
|
</style>
|
|
<script type="text/javascript">
|
|
var mathmlNS = "http://www.w3.org/1998/Math/MathML";
|
|
|
|
function newMn(n)
|
|
{
|
|
var t = document.createTextNode(n.toString());
|
|
var mn = document.createElementNS(mathmlNS, "mn");
|
|
mn.appendChild(t);
|
|
return mn;
|
|
}
|
|
|
|
function test1()
|
|
{
|
|
var test1content = document.getElementById("test1content");
|
|
var mroot = document.getElementById("test1").getElementsByTagNameNS(mathmlNS, "mroot");
|
|
var msqrt = document.getElementById("test1").getElementsByTagNameNS(mathmlNS, "msqrt");
|
|
var i;
|
|
|
|
// We insert children in normal order.
|
|
for (i = 1; i <= 7; i++) {
|
|
mroot[0].appendChild(newMn(i));
|
|
msqrt[0].appendChild(newMn(i));
|
|
}
|
|
|
|
// We insert children in reverse order.
|
|
for (i = 7; i >= 1; i--) {
|
|
mroot[1].insertBefore(newMn(i), mroot[1].firstChild);
|
|
msqrt[1].insertBefore(newMn(i), msqrt[1].firstChild);
|
|
}
|
|
}
|
|
|
|
function test2()
|
|
{
|
|
var msqrt = document.getElementById("test2").getElementsByTagNameNS(mathmlNS, "msqrt");
|
|
var mroot = document.getElementById("test2").getElementsByTagNameNS(mathmlNS, "mroot");
|
|
var i;
|
|
for (i = 0; i < msqrt.length; i++)
|
|
msqrt[i].insertBefore(newMn(1), msqrt[i].firstChild);
|
|
for (i = 0; i < mroot.length; i++)
|
|
mroot[i].insertBefore(newMn(1), mroot[i].firstChild);
|
|
}
|
|
|
|
function test3()
|
|
{
|
|
var msqrt = document.getElementById("test3").getElementsByTagNameNS(mathmlNS, "msqrt");
|
|
var mroot = document.getElementById("test3").getElementsByTagNameNS(mathmlNS, "mroot");
|
|
var i;
|
|
for (i = 0; i < msqrt.length; i++)
|
|
msqrt[i].appendChild(newMn(msqrt[i].childElementCount+1));
|
|
for (i = 0; i < mroot.length; i++)
|
|
mroot[i].appendChild(newMn(mroot[i].childElementCount+1));
|
|
}
|
|
|
|
function test4()
|
|
{
|
|
var msqrt = document.getElementById("test4").getElementsByTagNameNS(mathmlNS, "msqrt");
|
|
var mroot = document.getElementById("test4").getElementsByTagNameNS(mathmlNS, "mroot");
|
|
var i;
|
|
for (i = 0; i < msqrt.length; i++)
|
|
msqrt[i].insertBefore(newMn(2), msqrt[i].firstChild.nextSibling);
|
|
for (i = 0; i < mroot.length; i++)
|
|
mroot[i].insertBefore(newMn(2), mroot[i].firstChild.nextSibling);
|
|
}
|
|
|
|
function test5()
|
|
{
|
|
var msqrt = document.getElementById("test5").getElementsByTagNameNS(mathmlNS, "msqrt");
|
|
var mroot = document.getElementById("test5").getElementsByTagNameNS(mathmlNS, "mroot");
|
|
var i;
|
|
for (i = 0; i < msqrt.length; i++)
|
|
msqrt[i].insertBefore(newMn(msqrt[i].childElementCount), msqrt[i].lastChild);
|
|
for (i = 0; i < mroot.length; i++)
|
|
mroot[i].insertBefore(newMn(mroot[i].childElementCount), mroot[i].lastChild);
|
|
}
|
|
|
|
function test6()
|
|
{
|
|
var msqrt = document.getElementById("test6").getElementsByTagNameNS(mathmlNS, "msqrt");
|
|
var mroot = document.getElementById("test6").getElementsByTagNameNS(mathmlNS, "mroot");
|
|
var i;
|
|
for (i = 0; i < msqrt.length; i++)
|
|
msqrt[i].insertBefore(newMn(3), msqrt[i].firstChild.nextSibling.nextSibling);
|
|
for (i = 0; i < mroot.length; i++)
|
|
mroot[i].insertBefore(newMn(3), mroot[i].firstChild.nextSibling.nextSibling);
|
|
}
|
|
|
|
function test7()
|
|
{
|
|
var msqrt = document.getElementById("test7").getElementsByTagNameNS(mathmlNS, "msqrt");
|
|
var mroot = document.getElementById("test7").getElementsByTagNameNS(mathmlNS, "mroot");
|
|
var i;
|
|
for (i = 0; i < msqrt.length; i++)
|
|
msqrt[i].insertBefore(newMn(msqrt[i].childElementCount-1), msqrt[i].lastChild.previousSibling);
|
|
for (i = 0; i < mroot.length; i++)
|
|
mroot[i].insertBefore(newMn(mroot[i].childElementCount-1), mroot[i].lastChild.previousSibling);
|
|
}
|
|
|
|
function run()
|
|
{
|
|
test1();
|
|
test2();
|
|
test3();
|
|
test4();
|
|
test5();
|
|
test6();
|
|
test7();
|
|
}
|
|
</script>
|
|
</head>
|
|
|
|
<body onload="run()">
|
|
|
|
<!-- Test 1: insert in normal and reverse order. -->
|
|
<div id="test1">Test 1:
|
|
<math><mroot></mroot></math>
|
|
<math><msqrt></msqrt></math>
|
|
<math><mroot></mroot></math>
|
|
<math><msqrt></msqrt></math>
|
|
</div>
|
|
|
|
<!-- Test 2: insert an <mn> element at the first position in an <mroot>/<msqrt> element with various number of children. -->
|
|
<div id="test2">Test 2:
|
|
<math><msqrt></msqrt></math>
|
|
<math><msqrt><mn>2</mn></msqrt></math>
|
|
<math><msqrt><mn>2</mn><mn>3</mn></msqrt></math>
|
|
<math><msqrt><mn>2</mn><mn>3</mn><mn>4</mn></msqrt></math>
|
|
<math><mroot></mroot></math>
|
|
<math><mroot><mn>2</mn></mroot></math>
|
|
<math><mroot><mn>2</mn><mn>3</mn></mroot></math>
|
|
<math><mroot><mn>2</mn><mn>3</mn><mn>4</mn></mroot></math>
|
|
</div>
|
|
|
|
<!-- Test 3: insert an <mn> element at the last position in an <mroot>/<msqrt> element with various number of children. -->
|
|
<div id="test3">Test 3:
|
|
<math><msqrt></msqrt></math>
|
|
<math><msqrt><mn>1</mn></msqrt></math>
|
|
<math><msqrt><mn>1</mn><mn>2</mn></msqrt></math>
|
|
<math><msqrt><mn>1</mn><mn>2</mn><mn>3</mn></msqrt></math>
|
|
<math><mroot></mroot></math>
|
|
<math><mroot><mn>1</mn></mroot></math>
|
|
<math><mroot><mn>1</mn><mn>2</mn></mroot></math>
|
|
<math><mroot><mn>1</mn><mn>2</mn><mn>3</mn></mroot></math>
|
|
</div>
|
|
|
|
<!-- Test 4: insert an <mn> element at the second position in an <mroot>/<msqrt> element with various number of children. -->
|
|
<div id="test4">Test 4:
|
|
<math><msqrt><mn>1</mn></msqrt></math>
|
|
<math><msqrt><mn>1</mn><mn>3</mn></msqrt></math>
|
|
<math><msqrt><mn>1</mn><mn>3</mn><mn>4</mn></msqrt></math>
|
|
<math><msqrt><mn>1</mn><mn>3</mn><mn>4</mn><mn>5</mn></msqrt></math>
|
|
<math><mroot><mn>1</mn></mroot></math>
|
|
<math><mroot><mn>1</mn><mn>3</mn></mroot></math>
|
|
<math><mroot><mn>1</mn><mn>3</mn><mn>4</mn></mroot></math>
|
|
<math><mroot><mn>1</mn><mn>3</mn><mn>4</mn><mn>5</mn></mroot></math>
|
|
</div>
|
|
|
|
<!-- Test 5: insert an <mn> element at the penultimate position in an <mroot>/<msqrt> element with various number of children. -->
|
|
<div id="test5">Test 5:
|
|
<math><msqrt><mn>2</mn></msqrt></math>
|
|
<math><msqrt><mn>1</mn><mn>3</mn></msqrt></math>
|
|
<math><msqrt><mn>1</mn><mn>2</mn><mn>4</mn></msqrt></math>
|
|
<math><msqrt><mn>1</mn><mn>2</mn><mn>3</mn><mn>5</mn></msqrt></math>
|
|
<math><mroot><mn>2</mn></mroot></math>
|
|
<math><mroot><mn>1</mn><mn>3</mn></mroot></math>
|
|
<math><mroot><mn>1</mn><mn>2</mn><mn>4</mn></mroot></math>
|
|
<math><mroot><mn>1</mn><mn>2</mn><mn>3</mn><mn>5</mn></mroot></math>
|
|
</div>
|
|
|
|
<!-- Test 6: insert an <mn> element at the third position in an <mroot>/<msqrt> element with various number of children. -->
|
|
<div id="test6">Test 6:
|
|
<math><msqrt><mn>1</mn><mn>2</mn></msqrt></math>
|
|
<math><msqrt><mn>1</mn><mn>2</mn><mn>4</mn></msqrt></math>
|
|
<math><msqrt><mn>1</mn><mn>2</mn><mn>4</mn><mn>5</mn></msqrt></math>
|
|
<math><mroot><mn>1</mn><mn>2</mn></mroot></math>
|
|
<math><mroot><mn>1</mn><mn>2</mn><mn>4</mn></mroot></math>
|
|
<math><mroot><mn>1</mn><mn>2</mn><mn>4</mn><mn>5</mn></mroot></math>
|
|
</div>
|
|
|
|
<!-- Test 7: insert an <mn> element at the antipenultimate position in an <mroot>/<msqrt> element with various number of children. -->
|
|
<div id="test7">Test 7:
|
|
<math><msqrt><mn>2</mn><mn>3</mn></msqrt></math>
|
|
<math><msqrt><mn>1</mn><mn>3</mn><mn>4</mn></msqrt></math>
|
|
<math><msqrt><mn>1</mn><mn>2</mn><mn>4</mn><mn>5</mn></msqrt></math>
|
|
<math><mroot><mn>2</mn><mn>3</mn></mroot></math>
|
|
<math><mroot><mn>1</mn><mn>3</mn><mn>4</mn></mroot></math>
|
|
<math><mroot><mn>1</mn><mn>2</mn><mn>4</mn><mn>5</mn></mroot></math>
|
|
</div>
|
|
|
|
</body>
|
|
</html>
|