<html xmlns="http://www.w3.org/1999/xhtml"> <!-- https://bugzilla.mozilla.org/show_bug.cgi?id=631437 --> <head> <title>Tests the array indexing and .length on SVGXXXList objects</title> <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.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=631437">Mozilla Bug 631437</a> <svg xmlns="http://www.w3.org/2000/svg" id="svg"> <text id="text" x="10 20 30" rotate="40 50 60">abcde</text> <path id="path" d="M0,0 L100,100"/> <polygon id="poly" points="50,50 70,70 90,50"/> <g id="g" transform="translate(20 30) rotate(50 60 70) scale(2)" requiredFeatures="foo bar baz"/> </svg> <script type="text/javascript;version=1.8"><![CDATA[ var text = document.getElementById("text"), path = document.getElementById("path"), poly = document.getElementById("poly"); g = document.getElementById("g"); function CheckList(aListObject, aExpectedListLength, aListDescription) { is(aListObject.numberOfItems, aExpectedListLength, aListDescription + ".numberOfItems"); is(aListObject.length, aExpectedListLength, aListDescription + ".length"); for (let i = 0; i < aListObject.length; i++) { let item = aListObject.getItem(i); ok(aListObject[i] === item, aListDescription + "[" + i + "]"); } is(typeof(aListObject[aListObject.length]), "undefined", aListDescription + "[outOfBounds]"); } var tests = [ { element: text, attribute: "x", listProperty: "x.baseVal", type: "SVGLengthList", subtests: [ { values: null, length: 3 }, { values: "40", length: 1 }, { values: "1em 2em 3em 4em 5em", length: 5 } ] }, { element: text, attribute: "rotate", listProperty: "rotate.baseVal", type: "SVGNumberList", subtests: [ { values: null, length: 3 }, { values: "10", length: 1 }, { values: "1 2 3 4 5", length: 5 } ] }, { element: path, attribute: "d", listProperty: "pathSegList", type: "SVGPathSegList", subtests: [ { values: null, length: 2 }, { values: "M50,50", length: 1 }, { values: "M0,0 h10 v20 h30 v40", length: 5 } ] }, { element: poly, attribute: "points", listProperty: "animatedPoints", type: "SVGPointList", subtests: [ { values: null, length: 3 }, { values: "100,100", length: 1 }, { values: "0,0 10,10 20,0 30,10 40,0", length: 5 } ] }, { element: g, attribute: "transform", listProperty: "transform.baseVal", type: "SVGTransformList", subtests: [ { values: null, length: 3 }, { values: "skewX(45)", length: 1 }, { values: "translate(1 2) rotate(3) scale(4) skewY(5) skewX(6)", length: 5 } ] }, { element: g, attribute: "requiredFeatures", listProperty: "requiredFeatures", type: "SVGStringList", subtests: [ { values: null, length: 3 }, { values: "foo", length: 1 }, { values: "foo bar baz qux", length: 4 } ] } ]; for (let test of tests) { let list = test.element; for (let property of test.listProperty.split(".")) { list = list[property]; } for (let subtest of test.subtests) { if (subtest.values) { test.element.setAttribute(test.attribute, subtest.values); } CheckList(list, subtest.length, test.type + ": " + test.element.localName + "." + test.listProperty); } } ]]></script> </body> </html>