<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script>window.enablePixelTesting = true;</script>
<script src="../../fast/js/resources/js-test-pre.js"></script>
</head>
<body>
<svg id="svg" xmlns="http://www.w3.org/2000/svg" width="200" height="200">
    <circle id="circle1" cx="40" cy="40" r="40" fill="green" transform="scale(2, 2) translate(10 10)"/>
</svg>

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

    function dumpMatrix(matrix) {
        return "[" + matrix.a.toFixed(1)
             + " " + matrix.b.toFixed(1)
             + " " + matrix.c.toFixed(1)
             + " " + matrix.d.toFixed(1)
             + " " + matrix.e.toFixed(1)
             + " " + matrix.f.toFixed(1)
             + "]";
    }

    function dumpTransform(transform) {
        var transformTypes = {
            "0": "SVG_TRANSFORM_UNKNOWN",
            "1": "SVG_TRANSFORM_MATRIX",
            "2": "SVG_TRANSFORM_TRANSLATE",
            "3": "SVG_TRANSFORM_SCALE",
            "4": "SVG_TRANSFORM_ROTATE",
            "5": "SVG_TRANSFORM_SKEWX",
            "6": "SVG_TRANSFORM_SKEWY"
        };

        return "type=" + transformTypes[transform.type] + " matrix=" + dumpMatrix(transform.matrix);
    }

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

    shouldBe("circle1.transform.baseVal.numberOfItems", "2");
    shouldBe("circle1.transform.animVal.numberOfItems", "2");
    shouldBeEqualToString("dumpTransform(circle1.transform.baseVal.getItem(0))", "type=SVG_TRANSFORM_SCALE matrix=[2.0 0.0 0.0 2.0 0.0 0.0]");
    shouldBeEqualToString("dumpTransform(circle1.transform.baseVal.getItem(1))", "type=SVG_TRANSFORM_TRANSLATE matrix=[1.0 0.0 0.0 1.0 10.0 10.0]");

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

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

    debug("");
    debug("Test uncommon arguments for insertItemBefore()");
    shouldThrow("circle1.transform.baseVal.insertItemBefore(30)");
    shouldThrow("circle1.transform.baseVal.insertItemBefore('aString')");
    shouldThrow("circle1.transform.baseVal.insertItemBefore(circle1)");
    shouldThrow("circle1.transform.baseVal.insertItemBefore(null)");
 
    shouldBe("circle1.transform.baseVal.insertItemBefore(circle1.transform.baseVal.getItem(1), 'aString')", "circle1.transform.baseVal.getItem(0)");
    shouldBe("circle1.transform.baseVal.numberOfItems", "2");
    shouldBeEqualToString("dumpTransform(circle1.transform.baseVal.getItem(0))", "type=SVG_TRANSFORM_TRANSLATE matrix=[1.0 0.0 0.0 1.0 10.0 10.0]");
    shouldBeEqualToString("dumpTransform(circle1.transform.baseVal.getItem(1))", "type=SVG_TRANSFORM_SCALE matrix=[2.0 0.0 0.0 2.0 0.0 0.0]");
    shouldBeEqualToString("circle1.getAttribute('transform')", "translate(10 10) scale(2 2)");

    shouldBe("circle1.transform.baseVal.insertItemBefore(circle1.transform.baseVal.getItem(1), circle1)", "circle1.transform.baseVal.getItem(0)");
    shouldBe("circle1.transform.baseVal.numberOfItems", "2");
    shouldBeEqualToString("dumpTransform(circle1.transform.baseVal.getItem(0))", "type=SVG_TRANSFORM_SCALE matrix=[2.0 0.0 0.0 2.0 0.0 0.0]");
    shouldBeEqualToString("dumpTransform(circle1.transform.baseVal.getItem(1))", "type=SVG_TRANSFORM_TRANSLATE matrix=[1.0 0.0 0.0 1.0 10.0 10.0]");
    shouldBeEqualToString("circle1.getAttribute('transform')", "scale(2 2) translate(10 10)");

    shouldBe("circle1.transform.baseVal.insertItemBefore(circle1.transform.baseVal.getItem(1), null)", "circle1.transform.baseVal.getItem(0)");
    shouldBe("circle1.transform.baseVal.numberOfItems", "2");
    shouldBeEqualToString("dumpTransform(circle1.transform.baseVal.getItem(0))", "type=SVG_TRANSFORM_TRANSLATE matrix=[1.0 0.0 0.0 1.0 10.0 10.0]");
    shouldBeEqualToString("dumpTransform(circle1.transform.baseVal.getItem(1))", "type=SVG_TRANSFORM_SCALE matrix=[2.0 0.0 0.0 2.0 0.0 0.0]");
    shouldBeEqualToString("circle1.getAttribute('transform')", "translate(10 10) scale(2 2)");

    shouldBe("circle1.transform.baseVal.insertItemBefore(circle1.transform.baseVal.getItem(1), 0)", "circle1.transform.baseVal.getItem(0)");
    shouldBe("circle1.transform.baseVal.numberOfItems", "2");
    shouldBeEqualToString("dumpTransform(circle1.transform.baseVal.getItem(0))", "type=SVG_TRANSFORM_SCALE matrix=[2.0 0.0 0.0 2.0 0.0 0.0]");
    shouldBeEqualToString("dumpTransform(circle1.transform.baseVal.getItem(1))", "type=SVG_TRANSFORM_TRANSLATE matrix=[1.0 0.0 0.0 1.0 10.0 10.0]");
    shouldBeEqualToString("circle1.getAttribute('transform')", "scale(2 2) translate(10 10)");

    shouldThrow("circle1.transform.baseVal.insertItemBefore(30, 0)");
    shouldThrow("circle1.transform.baseVal.insertItemBefore('aString', 0)");
    shouldThrow("circle1.transform.baseVal.insertItemBefore(circle1, 0)");
    shouldThrow("circle1.transform.baseVal.insertItemBefore(null, 0)");

    debug("");
    debug("Set transform='rotate(90) scale(2 2) translate(10 10) skewX(45)' for circle1");
    shouldBeUndefined("circle1.setAttribute('transform', 'rotate(90) scale(2 2) translate(10 10) skewX(45)')");
    shouldBe("circle1.transform.baseVal.numberOfItems", "4");
    shouldBeEqualToString("dumpTransform(circle1.transform.baseVal.getItem(0))", "type=SVG_TRANSFORM_ROTATE matrix=[0.0 1.0 -1.0 0.0 0.0 0.0]");
    shouldBeEqualToString("dumpTransform(circle1.transform.baseVal.getItem(1))", "type=SVG_TRANSFORM_SCALE matrix=[2.0 0.0 0.0 2.0 0.0 0.0]");
    shouldBeEqualToString("dumpTransform(circle1.transform.baseVal.getItem(2))", "type=SVG_TRANSFORM_TRANSLATE matrix=[1.0 0.0 0.0 1.0 10.0 10.0]");
    shouldBeEqualToString("dumpTransform(circle1.transform.baseVal.getItem(3))", "type=SVG_TRANSFORM_SKEWX matrix=[1.0 0.0 1.0 1.0 0.0 0.0]");
    shouldBeEqualToString("circle1.getAttribute('transform')", "rotate(90) scale(2 2) translate(10 10) skewX(45)");

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

    shouldBe("circle1.transform.baseVal.replaceItem(circle1.transform.baseVal.getItem(0), 0)", "circle1.transform.baseVal.getItem(0)");
    shouldBe("circle1.transform.baseVal.numberOfItems", "3");
    shouldBeEqualToString("dumpTransform(circle1.transform.baseVal.getItem(0))", "type=SVG_TRANSFORM_ROTATE matrix=[0.0 1.0 -1.0 0.0 0.0 0.0]");
    shouldBeEqualToString("dumpTransform(circle1.transform.baseVal.getItem(1))", "type=SVG_TRANSFORM_TRANSLATE matrix=[1.0 0.0 0.0 1.0 10.0 10.0]");
    shouldBeEqualToString("dumpTransform(circle1.transform.baseVal.getItem(2))", "type=SVG_TRANSFORM_SKEWX matrix=[1.0 0.0 1.0 1.0 0.0 0.0]");
    shouldBeEqualToString("circle1.getAttribute('transform')", "rotate(90) translate(10 10) skewX(45)");

    shouldBe("circle1.transform.baseVal.replaceItem(circle1.transform.baseVal.getItem(0), 'aString')", "circle1.transform.baseVal.getItem(0)");
    shouldBe("circle1.transform.baseVal.numberOfItems", "2");
    shouldBeEqualToString("dumpTransform(circle1.transform.baseVal.getItem(0))", "type=SVG_TRANSFORM_ROTATE matrix=[0.0 1.0 -1.0 0.0 0.0 0.0]");
    shouldBeEqualToString("dumpTransform(circle1.transform.baseVal.getItem(1))", "type=SVG_TRANSFORM_SKEWX matrix=[1.0 0.0 1.0 1.0 0.0 0.0]");
    shouldBeEqualToString("circle1.getAttribute('transform')", "rotate(90) skewX(45)");

    shouldBe("circle1.transform.baseVal.replaceItem(circle1.transform.baseVal.getItem(0), circle1)", "circle1.transform.baseVal.getItem(0)");
    shouldBe("circle1.transform.baseVal.numberOfItems", "1");
    shouldBeEqualToString("dumpTransform(circle1.transform.baseVal.getItem(0))", "type=SVG_TRANSFORM_ROTATE matrix=[0.0 1.0 -1.0 0.0 0.0 0.0]");
    shouldBeEqualToString("circle1.getAttribute('transform')", "rotate(90)");

    shouldThrow("circle1.transform.baseVal.replaceItem(circle1.transform.baseVal.getItem(0), null)");
    shouldBe("circle1.transform.baseVal.numberOfItems", "0");
    shouldBeEqualToString("circle1.getAttribute('transform')", "");

    debug("");
    debug("Set transform='rotate(90) scale(2 2) translate(10 10) skewX(45)' for circle1");
    shouldBeUndefined("circle1.setAttribute('transform', 'rotate(90) scale(2 2) translate(10 10) skewX(45)')");

    debug("");
    debug("Test uncommon arguments for removeItem()");
    shouldThrow("circle1.transform.baseVal.removeItem(30)");

    shouldBeEqualToString("dumpTransform(circle1.transform.baseVal.removeItem(0))", "type=SVG_TRANSFORM_ROTATE matrix=[0.0 1.0 -1.0 0.0 0.0 0.0]");
    shouldBe("circle1.transform.baseVal.numberOfItems", "3");
    shouldBeEqualToString("dumpTransform(circle1.transform.baseVal.getItem(0))", "type=SVG_TRANSFORM_SCALE matrix=[2.0 0.0 0.0 2.0 0.0 0.0]");
    shouldBeEqualToString("dumpTransform(circle1.transform.baseVal.getItem(1))", "type=SVG_TRANSFORM_TRANSLATE matrix=[1.0 0.0 0.0 1.0 10.0 10.0]");
    shouldBeEqualToString("dumpTransform(circle1.transform.baseVal.getItem(2))", "type=SVG_TRANSFORM_SKEWX matrix=[1.0 0.0 1.0 1.0 0.0 0.0]");
    shouldBeEqualToString("circle1.getAttribute('transform')", "scale(2 2) translate(10 10) skewX(45)");

    shouldBeEqualToString("dumpTransform(circle1.transform.baseVal.removeItem('aString'))", "type=SVG_TRANSFORM_SCALE matrix=[2.0 0.0 0.0 2.0 0.0 0.0]");
    shouldBe("circle1.transform.baseVal.numberOfItems", "2");
    shouldBeEqualToString("dumpTransform(circle1.transform.baseVal.getItem(0))", "type=SVG_TRANSFORM_TRANSLATE matrix=[1.0 0.0 0.0 1.0 10.0 10.0]");
    shouldBeEqualToString("dumpTransform(circle1.transform.baseVal.getItem(1))", "type=SVG_TRANSFORM_SKEWX matrix=[1.0 0.0 1.0 1.0 0.0 0.0]");
    shouldBeEqualToString("circle1.getAttribute('transform')", "translate(10 10) skewX(45)");

    shouldBeEqualToString("dumpTransform(circle1.transform.baseVal.removeItem(circle1))", "type=SVG_TRANSFORM_TRANSLATE matrix=[1.0 0.0 0.0 1.0 10.0 10.0]");
    shouldBe("circle1.transform.baseVal.numberOfItems", "1");
    shouldBeEqualToString("dumpTransform(circle1.transform.baseVal.getItem(0))", "type=SVG_TRANSFORM_SKEWX matrix=[1.0 0.0 1.0 1.0 0.0 0.0]");
    shouldBeEqualToString("circle1.getAttribute('transform')", "skewX(45)");

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

    debug("");
    debug("Testing animVal clear throws");
    shouldThrow("circle1.transform.animVal.clear()");
    shouldBeUndefined("circle1.transform.baseVal.clear()");

    debug("");
    debug("Creating new SVGTransform, with 45 deg rotation about x=50, y=100 and append it to the transform list");
    var transform;
    shouldBeEqualToString("dumpTransform(transform = svg.createSVGTransform())", "type=SVG_TRANSFORM_MATRIX matrix=[1.0 0.0 0.0 1.0 0.0 0.0]");
    shouldBeUndefined("transform.setRotate(45, 50, 100)");

    shouldBeEqualToString("dumpTransform(circle1.transform.baseVal.appendItem(transform))", "type=SVG_TRANSFORM_ROTATE matrix=[0.7 0.7 -0.7 0.7 85.4 -6.1]");
    shouldBe("circle1.transform.baseVal.numberOfItems", "1");
    shouldBeEqualToString("dumpTransform(circle1.transform.baseVal.getItem(0))", "type=SVG_TRANSFORM_ROTATE matrix=[0.7 0.7 -0.7 0.7 85.4 -6.1]");
    shouldBeEqualToString("circle1.getAttribute('transform')", "rotate(45 50 100)");

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