chromium/third_party/blink/web_tests/svg/dom/length-list-parser.html

<html>
<head>
<script src="../../resources/js-test.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",
        // Long numeric string to force crossing page boundaries.
        "-0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001",
        "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(100);
            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();

</script>
</html>