<html>
<head>
<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css">
<script src="../../fast/js/resources/js-test-pre.js"></script>
<script src="resources/scripted-random.js"></script>
</head>
<body>
<p id="description"></p>
<div id="console"></div>
<script>
    description("This test fuzzes the length list parser with semi-random attribute values and dumps the results of any values that parse successfully.");
    
    var characters = [
        "0",
        "1",
        "2",
        "3",
        "4",
        "5",
        "6",
        "7",
        "8",
        "9",
        ".",
        "e",
        "+",
        "-",
        ",",
        " ",
        "\t"
    ];
    
    var textElement = document.createElementNS("http://www.w3.org/2000/svg", "text");
    function parseLengthList(string)
    {
        textElement.setAttributeNS(null, "x", string);

        var lengthList = textElement.x.baseVal;
        if (!lengthList.numberOfItems)
            return;

        var debugStr = "Parsed as " + lengthList.numberOfItems + " length(s)";
        debugStr += " [ ";
        for (var i = 0; i < lengthList.numberOfItems; i++) { //>
            debugStr += lengthList.getItem(i).valueAsString;
            if (i < lengthList.numberOfItems - 1) //>
                debugStr += ", ";
        }
        debugStr += " ]";
        debugStr += ": " + string;
        debug(debugStr);
    }

    function fuzz()
    {
        // Random assortments of valid characters
        for (var i = 0; i < 250; i++) { //>
            var lengthList = "";
            var count = Math.scriptedRandomInt(40);
            for (var j = 0; j < count; j++) { //>
                lengthList += characters[Math.scriptedRandomInt(characters.length)];
            }
            parseLengthList(lengthList);
        }
        
        // Empty-ish length lists
        parseLengthList("");
        parseLengthList(String.fromCharCode(0));
    }
    
    fuzz();

    successfullyParsed = true;
</script>
<script src="../../fast/js/resources/js-test-post.js"></script>
</html>
