99 lines
2.8 KiB
HTML
99 lines
2.8 KiB
HTML
<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>
|