blob: ac678ea59d8f3ed138f352faaaf8483b00a4e43c [file] [log] [blame]
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script>window.enablePixelTesting = true;</script>
<script src="../../resources/js-test-pre.js"></script>
</head>
<body>
<svg id="svg" xmlns="http://www.w3.org/2000/svg" width="200" height="200">
<text id="text1" x="500 1000 1500" y="50"> ABC </text>
<text id="reference" x="50 100 150" y="100"> ABC </text>
</svg>
<p id="description"></p>
<div id="console"></div>
<script type="text/javascript">
<![CDATA[
description("This is a test of the SVGLengthList::insertItemBefore() API.");
var svg = document.getElementById("svg");
var text1 = document.getElementById("text1");
debug("");
debug("Create three SVGLength objects, with values=50,100,150");
var newLength1 = svg.createSVGLength();
newLength1.value = 50;
shouldBe("newLength1.value", "50");
var newLength2 = svg.createSVGLength();
newLength2.value = 100;
shouldBe("newLength2.value", "100");
var newLength3 = svg.createSVGLength();
newLength3.value = 150;
shouldBe("newLength3.value", "150");
shouldBeTrue("newLength1 != newLength2");
shouldBeTrue("newLength2 != newLength3");
shouldBeTrue("newLength3 != newLength1");
shouldBeTrue("newLength1.value == newLength2.value - 50");
shouldBeTrue("newLength2.value + 50 == newLength3.value");
debug("");
debug("Check initial list state");
shouldBe("text1.x.baseVal.numberOfItems", "3");
shouldBe("text1.x.baseVal.getItem(0).value", "500");
shouldBe("text1.x.baseVal.getItem(1).value", "1000");
shouldBe("text1.x.baseVal.getItem(2).value", "1500");
shouldThrow("text1.x.baseVal.getItem(3)");
// Spec: If the index is greater than or equal to numberOfItems, then the new item is appended to the end of the list.
debug("");
debug("Insert item 'newLength1' at the end of the list, by using a large index");
shouldBe("text1.x.baseVal.insertItemBefore(newLength1, 1000)", "newLength1");
shouldBe("text1.x.baseVal.numberOfItems", "4");
shouldBe("text1.x.baseVal.getItem(0).value", "500");
shouldBe("text1.x.baseVal.getItem(1).value", "1000");
shouldBe("text1.x.baseVal.getItem(2).value", "1500");
shouldBe("text1.x.baseVal.getItem(3).value", "50");
shouldThrow("text1.x.baseVal.getItem(4)");
debug("");
debug("Storing getItem(0/1/2) in local variables");
var item0 = text1.x.baseVal.getItem(0);
var item1 = text1.x.baseVal.getItem(1);
var item2 = text1.x.baseVal.getItem(2);
var item3 = text1.x.baseVal.getItem(3);
// Spec: If the index is equal to 0, then the new item is inserted at the front of the list.
debug("");
debug("Insert item 'newLength2' at the front of the list, by using index=0");
shouldBe("text1.x.baseVal.insertItemBefore(newLength2, 0)", "newLength2");
shouldBe("text1.x.baseVal.numberOfItems", "5");
shouldBe("text1.x.baseVal.getItem(0).value", "100");
shouldBe("text1.x.baseVal.getItem(1).value", "500");
shouldBe("text1.x.baseVal.getItem(2).value", "1000");
shouldBe("text1.x.baseVal.getItem(3).value", "1500");
shouldBe("text1.x.baseVal.getItem(4).value", "50");
shouldThrow("text1.x.baseVal.getItem(5)");
debug("");
debug("Assure that previously saved wrappers still show the old values");
shouldBe("item0.value", "500");
shouldBe("item1.value", "1000");
shouldBe("item2.value", "1500");
shouldBe("item3.value", "50");
// Spec: The index of the item before which the new item is to be inserted.
debug("");
debug("Insert item 'newLength3' at position=2, between '500' and '1000'");
shouldBe("text1.x.baseVal.insertItemBefore(newLength3, 2)", "newLength3");
shouldBe("text1.x.baseVal.numberOfItems", "6");
shouldBe("text1.x.baseVal.getItem(0).value", "100");
shouldBe("text1.x.baseVal.getItem(1).value", "500");
shouldBe("text1.x.baseVal.getItem(2).value", "150");
shouldBe("text1.x.baseVal.getItem(3).value", "1000");
shouldBe("text1.x.baseVal.getItem(4).value", "1500");
shouldBe("text1.x.baseVal.getItem(5).value", "50");
shouldThrow("text1.x.baseVal.getItem(6)");
// Spec: If newItem is already in a list, a clone of newItem inserted into this list.
debug("");
debug("Insert item 'newLength3' at position=1, between '100' and '500', remove it from the old position=2 afterwards.");
shouldBe("text1.x.baseVal.insertItemBefore(newLength3, 1)", "text1.x.baseVal.getItem(1)");
shouldBeEqualToString("text1.x.baseVal.removeItem(3).toString()", "[object SVGLength]");
shouldBe("text1.x.baseVal.numberOfItems", "6");
shouldBe("text1.x.baseVal.getItem(0).value", "100");
shouldBe("text1.x.baseVal.getItem(1).value", "150");
shouldBe("text1.x.baseVal.getItem(2).value", "500");
shouldBe("text1.x.baseVal.getItem(3).value", "1000");
shouldBe("text1.x.baseVal.getItem(4).value", "1500");
shouldBe("text1.x.baseVal.getItem(5).value", "50");
shouldThrow("text1.x.baseVal.getItem(6)");
debug("");
debug("Insert item 'newLength3' at position=0, before '100', remove it from the old position=5 afterwards.");
shouldBe("text1.x.baseVal.insertItemBefore(newLength1, 0)", "text1.x.baseVal.getItem(0)");
shouldBeEqualToString("text1.x.baseVal.removeItem(6).toString()", "[object SVGLength]");
shouldBe("text1.x.baseVal.numberOfItems", "6");
shouldBe("text1.x.baseVal.getItem(0).value", "50");
shouldBe("text1.x.baseVal.getItem(1).value", "100");
shouldBe("text1.x.baseVal.getItem(2).value", "150");
shouldBe("text1.x.baseVal.getItem(3).value", "500");
shouldBe("text1.x.baseVal.getItem(4).value", "1000");
shouldBe("text1.x.baseVal.getItem(5).value", "1500");
shouldThrow("text1.x.baseVal.getItem(6)");
debug("");
debug("The test passes if you only see 'PASS' messages, and both text elements on top look the same");
debug("");
]]>
</script>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>