<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="250" height="250">
    <g transform="translate(10, 10)">
        <path id="path1" d="M 0 0 L 100 0 L 100 100 z L 0 100" fill="green"/>
        <path transform="translate(110, 0)" id="path2" d="M 0 0 h 100 z v 100 h -100" fill="green"/>
    </g>
</svg>

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

    var svg = document.getElementById("svg");
    var path1 = document.getElementById("path1");
    var path2 = document.getElementById("path2");

    debug("");
    debug("Check initial 'pathSegList' value of path1");
    shouldBe("path1.pathSegList.numberOfItems", "5");
    shouldBeEqualToString("path1.pathSegList.getItem(0).toString()", "[object SVGPathSegMovetoAbs]");
    shouldBe("path1.pathSegList.getItem(0).x", "0");
    shouldBe("path1.pathSegList.getItem(0).y", "0");
    shouldBeEqualToString("path1.pathSegList.getItem(1).toString()", "[object SVGPathSegLinetoAbs]");
    shouldBe("path1.pathSegList.getItem(1).x", "100");
    shouldBe("path1.pathSegList.getItem(1).y", "0");
    shouldBeEqualToString("path1.pathSegList.getItem(2).toString()", "[object SVGPathSegLinetoAbs]");
    shouldBe("path1.pathSegList.getItem(2).x", "100");
    shouldBe("path1.pathSegList.getItem(2).y", "100");
    shouldBeEqualToString("path1.pathSegList.getItem(3).toString()", "[object SVGPathSegClosePath]");
    shouldBeEqualToString("path1.pathSegList.getItem(4).toString()", "[object SVGPathSegLinetoAbs]");
    shouldBe("path1.pathSegList.getItem(4).x", "0");
    shouldBe("path1.pathSegList.getItem(4).y", "100");

    debug("");
    debug("Check initial 'pathSegList' value of path2");
    shouldBe("path2.pathSegList.numberOfItems", "5");
    shouldBeEqualToString("path2.pathSegList.getItem(0).toString()", "[object SVGPathSegMovetoAbs]");
    shouldBe("path2.pathSegList.getItem(0).x", "0");
    shouldBe("path2.pathSegList.getItem(0).y", "0");
    shouldBeEqualToString("path2.pathSegList.getItem(1).toString()", "[object SVGPathSegLinetoHorizontalRel]");
    shouldBe("path2.pathSegList.getItem(1).x", "100");
    shouldBeEqualToString("path2.pathSegList.getItem(2).toString()", "[object SVGPathSegClosePath]");
    shouldBeEqualToString("path2.pathSegList.getItem(3).toString()", "[object SVGPathSegLinetoVerticalRel]");
    shouldBe("path2.pathSegList.getItem(3).y", "100");
    shouldBeEqualToString("path2.pathSegList.getItem(4).toString()", "[object SVGPathSegLinetoHorizontalRel]");
    shouldBe("path2.pathSegList.getItem(4).x", "-100");

    debug("");
    debug("Remove fourth item of path1");
    shouldBeEqualToString("path1.pathSegList.removeItem(3).toString()", "[object SVGPathSegClosePath]");

    debug("");
    debug("Remove third item of path2");
    shouldBeEqualToString("path2.pathSegList.removeItem(2).toString()", "[object SVGPathSegClosePath]");

]]>
</script>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>
