diff options
Diffstat (limited to 'dom/svg/test/test_SVGPathSegList.xhtml')
-rw-r--r-- | dom/svg/test/test_SVGPathSegList.xhtml | 128 |
1 files changed, 128 insertions, 0 deletions
diff --git a/dom/svg/test/test_SVGPathSegList.xhtml b/dom/svg/test/test_SVGPathSegList.xhtml new file mode 100644 index 000000000..5b442676a --- /dev/null +++ b/dom/svg/test/test_SVGPathSegList.xhtml @@ -0,0 +1,128 @@ +<html xmlns="http://www.w3.org/1999/xhtml"> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=611138 +--> +<head> + <title>Generic tests for SVG animated length lists</title> + <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="text/javascript" src="MutationEventChecker.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> +</head> +<body> +<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=611138">Mozilla Bug 611138</a> +<p id="display"></p> +<div id="content" style="display:none;"> +<svg id="svg" xmlns="http://www.w3.org/2000/svg" width="100" height="100"> + <path id="path"/> +</svg> +</div> +<pre id="test"> +<script class="testbody" type="text/javascript"> +<![CDATA[ + +SimpleTest.waitForExplicitFinish(); + +/* +This file runs a series of SVGPathSegList specific tests. Generic SVGXxxList +tests can be found in test_SVGxxxList.xhtml. Anything that can be generalized +to other list types belongs there. +*/ + +function run_tests() +{ + document.getElementById('svg').pauseAnimations(); + + var d; + var seg; + var path = document.getElementById("path"); + var list = path.pathSegList; + + // See https://bugzilla.mozilla.org/show_bug.cgi?id=611138 + // Here we are doing a replace with a segment (arc) that has more arguments + // than the total number of arguments in the entire path + 2 (the +2 + // refering to the encoding of the segment types for the two segments). + path.setAttribute('d', 'M0,0 L100,100'); + var arc = path.createSVGPathSegArcAbs(400, 0, 200, 200, 0, 1, 1); + list.replaceItem(arc, 1); + + is(list.numberOfItems, 2, 'The length of the list should be the same after a valid replaceItem() call'); + is(list.getItem(1), arc, 'The inserted object should now be the object at the index being replaced'); + + // Test whether and when we normalize the 'd' attribute: + + d = " \n M 10 , 10 \n L 20 10 \n "; + path.setAttribute('d', d); + is(path.getAttribute('d'), d, "Values passed to setAttribute for the 'd' attribute should not be normalised"); + list.getItem(1).y = 20; + isnot(path.getAttribute('d'), d, "The 'd' attribute should change when its underlying DOM list changes"); + + // Test that path manipulations still work even when the path is invalid due + // to it not starting with a moveto segment: + + path.setAttribute('d', 'M0,0 L1,1'); + is(list.numberOfItems, 2, 'setAttribute should result in two items') + + seg = list.getItem(1); + list.removeItem(0); + ok(list.numberOfItems == 1 && list.getItem(0) == seg, + 'If removeItem removes the initial moveto leaving an invalid path, the other items should still be left in the list') + + seg = path.createSVGPathSegLinetoAbs(1, 2); + list.appendItem(seg); + ok(list.numberOfItems == 2 && list.getItem(1) == seg, + 'appendItem should be able to append to an invalid path'); + + seg = path.createSVGPathSegLinetoAbs(1, 2); + list.replaceItem(seg, 1); + ok(list.numberOfItems == 2 && list.getItem(1) == seg, + 'replaceItem should be able to replace items in an invalid path'); + + seg = path.createSVGPathSegLinetoAbs(1, 2); + list.insertItemBefore(seg, 1); + ok(list.numberOfItems == 3 && list.getItem(1) == seg, + 'insertItemBefore should be able insert items into an invalid path'); + + seg = path.createSVGPathSegLinetoAbs(1, 2); + list.initialize(seg); + ok(list.numberOfItems == 1 && list.getItem(0) == seg, + 'initialize should be able initialize an invalid path with a non-moveto item'); + + // Test mutation events + + eventChecker = new MutationEventChecker; + d = 'M0,0 L12,34' + path.setAttribute('d', d); + eventChecker.watchAttr(path, "d"); + + // -- Actual changes + eventChecker.expect("modify modify modify"); + list[0].x = 10; + list[0].y = 5; + path.setAttribute("d", "M20,5 L12,34"); + + // -- Redundant changes + eventChecker.expect(""); + list[0].x = 20; + list[1].y = 34; + path.setAttribute("d", "M20,5 L12,34"); + + // -- Attribute removal + eventChecker.expect("remove"); + path.removeAttribute("d"); + + // -- Non-existent attribute removal + eventChecker.expect(""); + path.removeAttribute("d"); + path.removeAttributeNS(null, "d"); + eventChecker.finish(); + + SimpleTest.finish(); +} + +window.addEventListener("load", run_tests, false); + +]]> +</script> +</pre> +</body> +</html> |