<html>
<head>
<script src="../../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 transform parser with semi-random attribute values and dumps the results of any values that parse successfully.");

    var transforms = { // maps a transform name to its minimum argument count
        matrix: 6,
        rotate: 1,
        scale: 1,
        skewX: 1,
        skewY: 1,
        translate: 1
    };
    
    var characters = [
        "0",
        "1",
        "2",
        "3",
        "4",
        "5",
        "6",
        "7",
        "8",
        "9",
        ".",
        "e",
        "+",
        "-",
        "e",
        "(",
        ")",
        " ",
        "\t",
        ","
    ];
    
    var gElement = document.createElementNS("http://www.w3.org/2000/svg", "g");
    function parseTransform(string)
    {
        gElement.setAttributeNS(null, "transform", string);

        var transformList = gElement.transform.baseVal;
        if (!transformList.numberOfItems)
            return;
            
        debug("Parsed as " + transformList.numberOfItems + " transform(s): " + string);
    }

    function fuzz()
    {
        for (var transform in transforms) {

            // Too few / too many arguments
            for (var i = 0; i < 50; i++) { //>
                var transformString = transform + "(";
                for (var j = 0; j < i; j++) { //>
                    transformString += "0";
                    if (j < i - 1) //>
                        transformString += ",";
                }
                transformString += ")";
                parseTransform(transformString);
            }

            // Random assortments of valid characters
            for (var i = 0; i < 100; i++) { //>
                var transformString = transform + "(";
                var count = Math.scriptedRandomInt(20);
                for (var j = 0; j < count; j++) { //>
                    transformString += characters[Math.scriptedRandomInt(characters.length)];
                }
                parseTransform(transformString);
            }
            
            // Transform names that are "off by one"
            var extraChar = transform.charAt(transform.length - 1);
            parseTransform(transform + extraChar + "(0, 0)");
            parseTransform(transform.substring(0, transform.length - 1) + "(0, 0)");
            
            // Empty-ish transforms
            parseTransform(transform);
            parseTransform(transform + String.fromCharCode(0));
            parseTransform(transform + "(" + String.fromCharCode(0) + ")");
        }
    }
    
    fuzz();

</script>
<script src="../../resources/js-test-post.js"></script>
</html>
