<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>
</svg>

<p id="description"></p>
<div id="console"></div>
<script type="text/javascript">
<![CDATA[
    description("This is a test of the simple SVGLengthList API parts.");

    if (window.testRunner)
        testRunner.dumpAsText();

    var text1 = document.getElementById("text1");
 
    // Spec: The object referenced by animVal will always be distinct from the one referenced by baseVal, even when the attribute is not animated.
    shouldBeTrue("text1.x.baseVal != text1.x.animVal");

    shouldBe("text1.x.baseVal.numberOfItems", "3");
    shouldBe("text1.x.animVal.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");

    debug("");
    debug("Test uncommon arguments for initialize()");
    shouldThrow("text1.x.baseVal.initialize(30)");
    shouldThrow("text1.x.baseVal.initialize('aString')");
    shouldThrow("text1.x.baseVal.initialize(text1)");
    shouldThrow("text1.x.baseVal.initialize(null)");

    debug("");
    debug("Test uncommon arguments for getItem()");
    shouldThrow("text1.x.baseVal.getItem(30)");
    shouldBe("text1.x.baseVal.getItem('aString')", "text1.x.baseVal.getItem(0)");
    shouldBe("text1.x.baseVal.getItem(text1)", "text1.x.baseVal.getItem(0)");
    shouldBe("text1.x.baseVal.getItem(null)", "text1.x.baseVal.getItem(0)");

    debug("");
    debug("Test uncommon arguments for insertItemBefore()");
    shouldThrow("text1.x.baseVal.insertItemBefore(30)");
    shouldThrow("text1.x.baseVal.insertItemBefore('aString')");
    shouldThrow("text1.x.baseVal.insertItemBefore(text1)");
    shouldThrow("text1.x.baseVal.insertItemBefore(null)");

    shouldBe("text1.x.baseVal.insertItemBefore(text1.x.baseVal.getItem(1), 'aString')", "text1.x.baseVal.getItem(0)");
    shouldBeEqualToString("text1.x.baseVal.removeItem(2).toString()", "[object SVGLength]");
    shouldBe("text1.x.baseVal.numberOfItems", "3");
    shouldBe("text1.x.baseVal.getItem(0).value", "1000");
    shouldBe("text1.x.baseVal.getItem(1).value", "500");
    shouldBe("text1.x.baseVal.getItem(2).value", "1500");
    shouldBeEqualToString("text1.getAttribute('x')", "1000 500 1500");

    shouldBe("text1.x.baseVal.insertItemBefore(text1.x.baseVal.getItem(1), text1)", "text1.x.baseVal.getItem(0)");
    shouldBeEqualToString("text1.x.baseVal.removeItem(2).toString()", "[object SVGLength]");
    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");
    shouldBeEqualToString("text1.getAttribute('x')", "500 1000 1500");

    shouldBe("text1.x.baseVal.insertItemBefore(text1.x.baseVal.getItem(1), null)", "text1.x.baseVal.getItem(0)");
    shouldBeEqualToString("text1.x.baseVal.removeItem(2).toString()", "[object SVGLength]");
    shouldBe("text1.x.baseVal.numberOfItems", "3");
    shouldBe("text1.x.baseVal.getItem(0).value", "1000");
    shouldBe("text1.x.baseVal.getItem(1).value", "500");
    shouldBe("text1.x.baseVal.getItem(2).value", "1500");
    shouldBeEqualToString("text1.getAttribute('x')", "1000 500 1500");

    shouldBe("text1.x.baseVal.insertItemBefore(text1.x.baseVal.getItem(1), 0)", "text1.x.baseVal.getItem(0)");
    shouldBeEqualToString("text1.x.baseVal.removeItem(2).toString()", "[object SVGLength]");
    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");
    shouldBeEqualToString("text1.getAttribute('x')", "500 1000 1500");

    shouldThrow("text1.x.baseVal.insertItemBefore(30, 0)");
    shouldThrow("text1.x.baseVal.insertItemBefore('aString', 0)");
    shouldThrow("text1.x.baseVal.insertItemBefore(text1, 0)");
    shouldThrow("text1.x.baseVal.insertItemBefore(null, 0)");

    debug("");
    debug("Set x='1 2 3 4' for text1");
    shouldBeUndefined("text1.setAttribute('x', '1 2 3 4')");

    debug("");
    debug("Test edge cases for insertItemBefore()");
    shouldBe("text1.x.baseVal.insertItemBefore(text1.x.baseVal.getItem(3), 3)", "text1.x.baseVal.getItem(3)");
    shouldBeEqualToString("text1.x.baseVal.removeItem(4).toString()", "[object SVGLength]");
    shouldBeEqualToString("text1.getAttribute('x')", "1 2 3 4");
    shouldBe("text1.x.baseVal.insertItemBefore(text1.x.baseVal.getItem(1), 5)", "text1.x.baseVal.getItem(4)");
    shouldBeEqualToString("text1.x.baseVal.removeItem(1).toString()", "[object SVGLength]");
    shouldBeEqualToString("text1.getAttribute('x')", "1 3 4 2");
    shouldBe("text1.x.baseVal.insertItemBefore(text1.x.baseVal.getItem(1), 0)", "text1.x.baseVal.getItem(0)");
    shouldBeEqualToString("text1.x.baseVal.removeItem(2).toString()", "[object SVGLength]");
    shouldBeEqualToString("text1.getAttribute('x')", "3 1 4 2");

    debug("");
    debug("Set x='1 2 3 4' for text1");
    shouldBeUndefined("text1.setAttribute('x', '1 2 3 4')");
    shouldBe("text1.x.baseVal.numberOfItems", "4");
    shouldBe("text1.x.baseVal.getItem(0).value", "1");
    shouldBe("text1.x.baseVal.getItem(1).value", "2");
    shouldBe("text1.x.baseVal.getItem(2).value", "3");
    shouldBe("text1.x.baseVal.getItem(3).value", "4");
    shouldBeEqualToString("text1.getAttribute('x')", "1 2 3 4");

    debug("");
    debug("Test uncommon arguments for replaceItem()");
    shouldThrow("text1.x.baseVal.replaceItem(30)");
    shouldThrow("text1.x.baseVal.replaceItem('aString')");
    shouldThrow("text1.x.baseVal.replaceItem(text1)");
    shouldThrow("text1.x.baseVal.replaceItem(null)");
    shouldThrow("text1.x.baseVal.replaceItem(30, 0)");
    shouldThrow("text1.x.baseVal.replaceItem('aString', 0)");
    shouldThrow("text1.x.baseVal.replaceItem(text1, 0)");
    shouldThrow("text1.x.baseVal.replaceItem(null, 0)");

    shouldBe("text1.x.baseVal.replaceItem(text1.x.baseVal.getItem(0), 0)", "text1.x.baseVal.getItem(0)");
    shouldBe("text1.x.baseVal.numberOfItems", "4");
    shouldBe("text1.x.baseVal.getItem(0).value", "1");
    shouldBe("text1.x.baseVal.getItem(1).value", "2");
    shouldBe("text1.x.baseVal.getItem(2).value", "3");
    shouldBe("text1.x.baseVal.getItem(3).value", "4");
    shouldBeEqualToString("text1.getAttribute('x')", "1 2 3 4");

    shouldBe("text1.x.baseVal.replaceItem(text1.x.baseVal.getItem(0), 'aString')", "text1.x.baseVal.getItem(0)");
    shouldBe("text1.x.baseVal.numberOfItems", "4");
    shouldBe("text1.x.baseVal.getItem(0).value", "1");
    shouldBe("text1.x.baseVal.getItem(1).value", "2");
    shouldBe("text1.x.baseVal.getItem(2).value", "3");
    shouldBe("text1.x.baseVal.getItem(3).value", "4");
    shouldBeEqualToString("text1.getAttribute('x')", "1 2 3 4");

    shouldBe("text1.x.baseVal.replaceItem(text1.x.baseVal.getItem(0), text1)", "text1.x.baseVal.getItem(0)");
    shouldBe("text1.x.baseVal.numberOfItems", "4");
    shouldBeEqualToString("text1.getAttribute('x')", "1 2 3 4");

    debug("");
    debug("Set x='1 2 3 4' for text1");
    shouldBeUndefined("text1.setAttribute('x', '1 2 3 4')");

    debug("");
    debug("Test edge cases for replaceItem()");
    shouldBe("text1.x.baseVal.replaceItem(text1.x.baseVal.getItem(3), 3)", "text1.x.baseVal.getItem(3)");
    shouldBe("text1.x.baseVal.numberOfItems", "4");
    shouldBeEqualToString("text1.getAttribute('x')", "1 2 3 4");
    shouldBe("text1.x.baseVal.replaceItem(text1.x.baseVal.getItem(1), 3)", "text1.x.baseVal.getItem(3)");
    shouldBeEqualToString("text1.x.baseVal.removeItem(1).toString()", "[object SVGLength]");
    shouldBe("text1.x.baseVal.numberOfItems", "3");
    shouldBeEqualToString("text1.getAttribute('x')", "1 3 2");
    shouldThrow("text1.x.baseVal.replaceItem(text1.x.baseVal.getItem(3), 4)");

    debug("");
    debug("Set x='1 2 3 4' for text1");
    shouldBeUndefined("text1.setAttribute('x', '1 2 3 4')");

    debug("");
    debug("Test overlapping edge cases for replaceItem()");
    var item = text1.x.baseVal.getItem(3);
    shouldBe("text1.x.baseVal.replaceItem(text1.x.baseVal.getItem(0), 3)", "text1.x.baseVal.getItem(3)");
    shouldBeEqualToString("text1.x.baseVal.removeItem(0).toString()", "[object SVGLength]");
    shouldBe("text1.x.baseVal.numberOfItems", "3");    
    item = text1.x.baseVal.getItem(2);
    item.newValueSpecifiedUnits(item.unitType, item.value * 2);
    shouldBe("text1.x.baseVal.getItem(2).value", "2");
    shouldBe("text1.x.baseVal.replaceItem(text1.x.baseVal.getItem(0), 2)", "text1.x.baseVal.getItem(2)");
    shouldBeEqualToString("text1.x.baseVal.removeItem(0).toString()", "[object SVGLength]");
    shouldBe("text1.x.baseVal.numberOfItems", "2");
    item = text1.x.baseVal.getItem(1);
    item.newValueSpecifiedUnits(item.unitType, item.value * 2);
    shouldBe("text1.x.baseVal.getItem(1).value", "4");
    shouldBe("text1.x.baseVal.replaceItem(text1.x.baseVal.getItem(0), 1)", "text1.x.baseVal.getItem(1)");
    shouldBeEqualToString("text1.x.baseVal.removeItem(1).toString()", "[object SVGLength]");
    shouldBe("text1.x.baseVal.numberOfItems", "1");
    item = text1.x.baseVal.getItem(0);
    item.newValueSpecifiedUnits(item.unitType, item.value * 2);
    shouldBe("text1.x.baseVal.getItem(0).value", "6");
    shouldBe("text1.x.baseVal.replaceItem(text1.x.baseVal.getItem(0), 0)", "text1.x.baseVal.getItem(0)");
    shouldBe("text1.x.baseVal.numberOfItems", "1");

    debug("");
    debug("Set x='1 2 3 4' for text1");
    shouldBeUndefined("text1.setAttribute('x', '1 2 3 4')");

    debug("");
    debug("Test uncommon arguments for removeItem()");
    shouldThrow("text1.x.baseVal.removeItem(30)");

    shouldBe("text1.x.baseVal.removeItem(0).value", "1");
    shouldBe("text1.x.baseVal.numberOfItems", "3");
    shouldBe("text1.x.baseVal.getItem(0).value", "2");
    shouldBe("text1.x.baseVal.getItem(1).value", "3");
    shouldBe("text1.x.baseVal.getItem(2).value", "4");
    shouldBeEqualToString("text1.getAttribute('x')", "2 3 4");

    shouldBe("text1.x.baseVal.removeItem(text1).value", "2");
    shouldBe("text1.x.baseVal.numberOfItems", "2");
    shouldBe("text1.x.baseVal.getItem(0).value", "3");
    shouldBe("text1.x.baseVal.getItem(1).value", "4");
    shouldBeEqualToString("text1.getAttribute('x')", "3 4");

    debug("");
    debug("Test uncommon arguments for appendItem()");
    shouldThrow("text1.x.baseVal.appendItem(30)");
    shouldThrow("text1.x.baseVal.appendItem('aString')");
    shouldThrow("text1.x.baseVal.appendItem(text1)");
    shouldThrow("text1.x.baseVal.appendItem(null)");

    debug("");
    debug("Testing animVal clear throws");
    shouldThrow("text1.x.animVal.clear()");
    shouldBeUndefined("text1.x.baseVal.clear()");
 
]]>
</script>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>
