<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",
        " ",
        "\t",
        "(",
        ")",
        "%",
        "+",
        "-",
        ".",
        "e",
        ","
    ];
    
    var stopElement = document.createElementNS("http://www.w3.org/2000/svg", "stop");
    stopElement.style.stopColor = "blue";
    function parseRGBColor(string)
    {
        try {
            stopElement.style.getPropertyCSSValue("stop-color").setRGBColor(string);
            var rgbColor = stopElement.style.getPropertyCSSValue("stop-color").rgbColor;

            var red = rgbColor.red.getFloatValue(CSSPrimitiveValue.CSS_NUMBER);
            var green = rgbColor.green.getFloatValue(CSSPrimitiveValue.CSS_NUMBER);
            var blue = rgbColor.blue.getFloatValue(CSSPrimitiveValue.CSS_NUMBER);
            var rgbColorString = "rgb(" + red + "," + green + "," + blue + ")";
            debug("Parsed as " + rgbColorString + ": " + string);
        } catch(e) {
            debug("Threw exception " + e + ": " + string);
        }
    }

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

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