<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<script src="../../resources/js-test-pre.js"></script>
</head>
<body>
<p id="description"></p>
<div id="console"></div>
<script>

var svgElement = document.createElementNS("http://www.w3.org/2000/svg", "svg");
var matrix = svgElement.createSVGMatrix();

function matrixToString(matrix)
{
	return "{ a: " + matrix.a + ", b: " + matrix.b + ", c: " + matrix.c + ", d: " + matrix.d + ", e: " + matrix.e + ", f: " + matrix.f + "}";
}

function checkAttributeSetting(matrix, name) {
	var value = matrix[name];

	shouldBe("matrix." + name + " = matrix", "matrix");
	shouldBe("matrix." + name, "NaN");
	shouldBe("matrix." + name + " = 0", "0");
	shouldBe("matrix." + name + " = svgElement", "svgElement");
	shouldBe("matrix." + name, "NaN");
	shouldBe("matrix." + name + " = 0", "0");
	shouldBe("matrix." + name + " = 'aString'", "'aString'");
	shouldBe("matrix." + name, "NaN");
	//Check assigning null works as expected
	shouldBeNull("matrix." + name + " = null");
	shouldBe("matrix." + name, "0");
	// Reset to previous value.
	shouldBe("matrix." + name + " = " + value.toString(), value.toString());
}

function checkMethodCallingOneMatrixArgument(matrix, name) {
	debug("");
	debug("Check calling '" + name + "' with invalid arguments");
	shouldThrow("matrix." + name + "()");
	shouldThrow("matrix." + name + "(true)");
	shouldThrow("matrix." + name + "(2)");
	shouldThrow("matrix." + name + "('aString')");
	shouldThrow("matrix." + name + "(svgElement)");
}

function checkMethodCallingOneNumericArgument(matrix, name) {
	debug("");
	debug("Check calling '" + name + "' with invalid arguments");
	shouldThrow("matrix." + name + "()");
	shouldBeNonNull("matrix." + name + "('aString')");
	shouldBeNonNull("matrix." + name + "(svgElement)");
}

function checkMethodCallingTwoNumericArguments(matrix, name) {
	debug("");
	debug("Check calling '" + name + "' with invalid arguments");
	shouldThrow("matrix." + name + "()");
	shouldThrow("matrix." + name + "(true)");
	shouldThrow("matrix." + name + "(2)");
	shouldThrow("matrix." + name + "('aString')");
	shouldThrow("matrix." + name + "(svgElement)");
	shouldBeNonNull("matrix." + name + "('aString', 'aString')");
	shouldBeNonNull("matrix." + name + "(svgElement, svgElement)");
	shouldBeNonNull("matrix." + name + "(2, 'aString')");
	shouldBeNonNull("matrix." + name + "(2, svgElement)");
	shouldBeNonNull("matrix." + name + "('aString', 2)");
	shouldBeNonNull("matrix." + name + "(svgElement, 2)");
}

description("This test checks the SVGMatrix API");

debug("");
debug("Check initial matrix values");
shouldBeEqualToString("matrixToString(matrix)", "{ a: 1, b: 0, c: 0, d: 1, e: 0, f: 0}");

debug("");
debug("Check assigning matrices");
shouldBe("matrix.a = 2", "2");
shouldBe("matrix.f = 200", "200");

debug("");
debug("Check assigning invalid matrices");
checkAttributeSetting(matrix, "a");
checkAttributeSetting(matrix, "b");
checkAttributeSetting(matrix, "c");
checkAttributeSetting(matrix, "d");
checkAttributeSetting(matrix, "e");
checkAttributeSetting(matrix, "f");

debug("");
debug("Check that the matrix is still containing the correct values");
shouldBeEqualToString("matrixToString(matrix)", "{ a: 2, b: 0, c: 0, d: 1, e: 0, f: 200}");

checkMethodCallingOneMatrixArgument(matrix, "multiply")
checkMethodCallingTwoNumericArguments(matrix, "translate");
checkMethodCallingOneNumericArgument(matrix, "scale");
checkMethodCallingTwoNumericArguments(matrix, "scaleNonUniform");
checkMethodCallingOneNumericArgument(matrix, "rotate");
checkMethodCallingTwoNumericArguments(matrix, "rotateFromVector");
checkMethodCallingOneNumericArgument(matrix, "skewX");
checkMethodCallingOneNumericArgument(matrix, "skewY");

debug("");
debug("Check calling SVGMatrix methods with valid arguments");
shouldBeEqualToString("matrixToString(matrix.translate(10, 20))", "{ a: 2, b: 0, c: 0, d: 1, e: 20, f: 220}");
shouldBeEqualToString("matrixToString(matrix.scale(5))", "{ a: 10, b: 0, c: 0, d: 5, e: 0, f: 200}");
shouldBeEqualToString("matrixToString(matrix.scaleNonUniform(2, 3))", "{ a: 4, b: 0, c: 0, d: 3, e: 0, f: 200}");
shouldBeEqualToString("matrixToString(matrix.skewX(90))", "{ a: 2, b: 0, c: 32662478706390740, d: 1, e: 0, f: 200}");
shouldBeEqualToString("matrixToString(matrix.skewY(90))", "{ a: 2, b: 16331239353195370, c: 0, d: 1, e: 0, f: 200}");

debug("");
debug("Check that the matrix is still containing the correct values");
shouldBeEqualToString("matrixToString(matrix)", "{ a: 2, b: 0, c: 0, d: 1, e: 0, f: 200}");

debug("");
debug("Calling methods that throw exceptions");
shouldThrow("matrix.rotateFromVector(0, 4)");
shouldThrow("matrix.rotateFromVector(4, 0)");
shouldBe("matrix.a = 0", "0");
shouldThrow("matrix.inverse()");

debug("");
successfullyParsed = true;

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