// [Name] SVGRadialGradientElement-svgdom-gradientTransform-prop.js
// [Expected rendering result] green ellipse, no red visible - and a series of PASS mesages

description("Tests dynamic updates of the 'gradientTransform' property of the SVGRadialGradientElement object")
createSVGTestCase();

var ellipseElement = createSVGElement("ellipse");
ellipseElement.setAttribute("cx", "150");
ellipseElement.setAttribute("cy", "150");
ellipseElement.setAttribute("rx", "100");
ellipseElement.setAttribute("ry", "150");
ellipseElement.setAttribute("fill", "url(#gradient)");

var transform = rootSVGElement.createSVGTransform();

shouldBe("transform.type", "SVGTransform.SVG_TRANSFORM_UNKNOWN");
shouldBe("transform.matrix.a", "1.0");
shouldBe("transform.matrix.b", "0.0");
shouldBe("transform.matrix.c", "0.0");
shouldBe("transform.matrix.d", "1.0");
shouldBe("transform.matrix.e", "0.0");
shouldBe("transform.matrix.f", "0.0");
shouldBe("transform.angle", "0.0");

var defsElement = createSVGElement("defs");
rootSVGElement.appendChild(defsElement);

var radialGradientElement = createSVGElement("radialGradient");
radialGradientElement.setAttribute("id", "gradient");
radialGradientElement.setAttribute("gradientTransform", "matrix(" + transform.matrix.a + " "
                                                                  + transform.matrix.b + " "
                                                                  + transform.matrix.c + " "
                                                                  + transform.matrix.d + " "
                                                                  + transform.matrix.e + " "
                                                                  + transform.matrix.f + ")");

var firstStopElement = createSVGElement("stop");
firstStopElement.setAttribute("offset", "0");
firstStopElement.setAttribute("stop-color", "red");
radialGradientElement.appendChild(firstStopElement);

var lastStopElement = createSVGElement("stop");
lastStopElement.setAttribute("offset", "1");
lastStopElement.setAttribute("stop-color", "green");
radialGradientElement.appendChild(lastStopElement);

defsElement.appendChild(radialGradientElement);
rootSVGElement.appendChild(ellipseElement);

shouldBe("radialGradientElement.gradientTransform.baseVal.getItem(0).matrix.a", "1.0");
shouldBe("radialGradientElement.gradientTransform.baseVal.getItem(0).matrix.b", "0.0");
shouldBe("radialGradientElement.gradientTransform.baseVal.getItem(0).matrix.c", "0.0");
shouldBe("radialGradientElement.gradientTransform.baseVal.getItem(0).matrix.d", "1.0");
shouldBe("radialGradientElement.gradientTransform.baseVal.getItem(0).matrix.e", "0.0");
shouldBe("radialGradientElement.gradientTransform.baseVal.getItem(0).matrix.f", "0.0");

function executeTest() {
    radialGradientElement.gradientTransform.baseVal.getItem(0).matrix.e = 50;

    shouldBe("radialGradientElement.gradientTransform.baseVal.getItem(0).matrix.a", "1.0");
    shouldBe("radialGradientElement.gradientTransform.baseVal.getItem(0).matrix.b", "0.0");
    shouldBe("radialGradientElement.gradientTransform.baseVal.getItem(0).matrix.c", "0.0");
    shouldBe("radialGradientElement.gradientTransform.baseVal.getItem(0).matrix.d", "1.0");
    shouldBe("radialGradientElement.gradientTransform.baseVal.getItem(0).matrix.e", "50.0");
    shouldBe("radialGradientElement.gradientTransform.baseVal.getItem(0).matrix.f", "0.0");

    completeTest();
}

startTest(ellipseElement, 150, 150);
