blob: 864ad8046598a56b2bc86b29ade5f4412e8a66ac [file] [log] [blame]
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>WebGL Shader Conformance Tests</title>
<link rel="stylesheet" href="../../../../resources/js-test-style.css"/>
<script src="../../../../js/js-test-pre.js"></script>
<script src="../../../../js/webgl-test.js"></script>
<script src="../../../../js/webgl-test-utils.js"></script>
<script src="shader-utils.js"></script>
<script src="shader-library.js"></script>
<script src="shader-library-case.js"></script>
</head>
<body>
<div id="description"></div>
<div id="console"></div>
<script>
description("Testing the .test parser components.");
var wtu = WebGLTestUtils;
var successfullyParsed = false;
var parser = new shaderLibrary.Parser();
// this array of functions is processed sequentially.
// returning false will abort
var tests = [
function() {
var result = shaderLibrary.isWhitespace(" ");
test_result(
"Checking isWhitespace. Passing \" \". Expecting true",
result === true, result
);
return true;
},
function() {
var result = shaderLibrary.isWhitespace("q");
test_result(
"Checking isWhitespace. Passing \"q\". Expecting false",
result === false, result
);
return true;
},
function() {
var result = shaderLibrary.isWhitespace(" \r\n\t");
test_result(
"Checking isWhitespace. Passing \" \\r\\n\\t\". Expecting true",
result === true, result
);
return true;
},
function() {
var result = shaderLibrary.isWhitespace(" \r\n\tq");
test_result(
"Checking isWhitespace. Passing \" \\r\\n\\tq\". Expecting false",
result === false, result
);
return true;
},
function() {
try {
var result = shaderLibrary.removeExtraIndentation(
"\t\t\taaaa\n\t \t\tbbbb\n\t\t\tcccc\r\n\t\t\tdddd"
);
} catch (err) {
result = "aborted";
}
test_result(
"Checking removeExtraIndentation. \
Passing \"\t\t\taaaa\n\t \t\tbbbb\n\t\t\tcccc\r\n\t\t\tdddd\". \
Expecting \"aaaa\n\tbbbb\ncccc\ndddd\"",
result === "aaaa\n\tbbbb\ncccc\ndddd",
result
);
return true;
},
function() {
// looking for private access to the parser object
var result = (typeof parser.priv != 'undefined');
test_result("looking for private member access", result, result);
return result;
},
function() {
try {
var result = parser.priv.parseIntLiteral("42");
} catch (err) {
result = "aborted";
}
test_result(
"Checking int parser. Passing \"42\". Expecting 42",
result === 42, result
);
return true;
},
function() {
try {
var result = parser.priv.parseIntLiteral("-5");
} catch (err) {
result = "aborted";
}
test_result(
"Checking int parser. Passing \"-5\". Expecting -5",
result === -5, result
);
return true;
},
function() {
try {
var result = parser.priv.parseIntLiteral("42.9");
} catch (err) {
result = "aborted";
}
test_result(
"Checking int parser. Passing \"42.9\". Expecting 42",
result === 42, result
);
return true;
},
function() {
try {
var result = parser.priv.parseFloatLiteral("42.9");
} catch (err) {
result = "aborted";
}
test_result(
"Checking float parser. Passing \"42.9\". Expecting 42.9",
result === 42.9, result
);
return true;
},
function() {
try {
var result = parser.priv.parseStringLiteral("\"hello world\"");
} catch (err) {
result = "aborted";
}
test_result(
"Checking string parser. Passing \"\"hello world\"\". Expecting \"hello world\"",
result == "hello world", result
);
return true;
},
function() {
try {
var result = parser.priv.parseStringLiteral("\"hello world\"extra");
} catch (err) {
result = "aborted";
}
test_result(
"Checking string parser. Passing \"\"hello world\"extra\". Expecting \"hello world\"",
result == "hello world", result
);
return true;
},
function() {
try {
var result = parser.priv.parseStringLiteral("\"\\\"\\\"\\\"\"\\\"\"");
} catch (err) {
result = "aborted";
}
test_result(
"Checking string parser. Passing \"\"\\\"\\\"\\\"\"\\\"\"\". Expecting \"\"\"\"\"",
result == "\"\"\"", result
);
return true;
},
function() {
try {
var result = parser.priv.parseStringLiteral("\"newline test\\nnewline test\"");
} catch (err) {
result = "aborted";
}
test_result(
"Checking string parser. Passing \"\"newline test\\nnewline test\"\". Expecting \"newline test\nnewline test\"",
result == "newline test\nnewline test", result
);
return true;
},
function() {
try {
var result = parser.priv.parseStringLiteral("\"tab test\\ttab test\"");
} catch (err) {
result = "aborted";
}
test_result(
"Checking string parser. Passing \"\"tab test\\ttab test\"\". Expecting \"tab test\ttab test\"",
result == "tab test\ttab test", result
);
return true;
},
function() {
try {
var result = parser.priv.parseShaderSource(
"\"\"\t\t\taaaa\n\t \t\tbbbb\n\t\t\tcccc\r\n\t\t\tdddd\"\""
);
} catch (err) {
result = "aborted";
}
test_result(
"Checking parseShaderSource. \
Passing \"\"\"\t\t\taaaa\n\t \t\tbbbb\n\t\t\tcccc\r\n\t\t\tdddd\"\"\". \
Expecting \"aaaa\n\tbbbb\ncccc\ndddd\"",
result === "aaaa\n\tbbbb\ncccc\ndddd",
result
);
return true;
},
function() {
try {
var result = parser.priv.advanceTokenTester("bool value = true;", 0);
} catch (err) {
result = "aborted";
}
test_result(
"Checking advanceToken. Passing \"bool value = true;\", 0",
result.idType == parser.priv.Token.TOKEN_BOOL && result.value == "bool",
result.name + ": " + result.value
);
},
function() {
try {
var result = parser.priv.advanceTokenTester("bool value = true;", 4);
} catch (err) {
result = "aborted";
}
test_result(
"Checking advanceToken. Passing \"bool value = true;\", 4",
result.idType == parser.priv.Token.TOKEN_IDENTIFIER && result.value == "value",
result.name + ": " + result.value
);
},
//*
function() {
try {
var result = parser.priv.advanceTokenTester("bool value = true;", 11);
} catch (err) {
result = "aborted";
}
test_result(
"Checking advanceToken. Passing \"bool value = true;\", 11",
result.idType == parser.priv.Token.TOKEN_ASSIGN,
result.name + ": " + result.value
);
},
//*/
function() {
try {
var result = parser.priv.advanceTokenTester("bool value = true;", 12);
} catch (err) {
result = "aborted";
}
test_result(
"Checking advanceToken. Passing \"bool value = true;\", 12",
result.idType == parser.priv.Token.TOKEN_TRUE && result.value == "true",
result.name + ": " + result.value
);
},
function() {
try {
var result = parser.priv.advanceTokenTester("bool value = true;", 17);
} catch (err) {
result = "aborted";
}
test_result(
"Checking advanceToken. Passing \"bool value = true;\", 17",
result.idType == parser.priv.Token.TOKEN_SEMI_COLON && result.value == ";",
result.name + ": " + result.value
);
},
function() {
try {
var result = parser.priv.advanceTokenTester("-7", 0);
} catch (err) {
result = "aborted";
}
test_result(
"Checking advanceToken. Passing \"-7\", 0",
result.idType == parser.priv.Token.TOKEN_MINUS && result.value == "-",
result.name + ": " + result.value
);
},
function() {
try {
var result = parser.priv.advanceTokenTester("-7", 1);
} catch (err) {
result = "aborted";
}
test_result(
"Checking advanceToken. Passing \"-7\", 1",
result.idType == parser.priv.Token.TOKEN_INT_LITERAL && result.value == "7",
result.name + ": " + result.value
);
},
function() {
try {
var result = parser.priv.advanceTokenTester("3.145", 0);
} catch (err) {
result = "aborted";
}
test_result(
"Checking advanceToken. Passing \"3.145\", 0",
result.idType == parser.priv.Token.TOKEN_FLOAT_LITERAL && result.value == "3.145",
result.name + ": " + result.value
);
},
function() {
try {
var result = parser.priv.advanceTokenTester("1.0e+10", 0);
} catch (err) {
result = "aborted";
}
test_result(
"Checking advanceToken. Passing \"1.0e+10\", 0",
result.idType == parser.priv.Token.TOKEN_FLOAT_LITERAL && result.value == "1.0e+10",
result.name + ": " + result.value
);
},
function() {
try {
var result = parser.priv.advanceTokenTester("1.0e", 0);
} catch (err) {
result = "aborted";
}
test_result(
"Checking advanceToken. Passing \"1.0e\", 0",
result === "aborted",
result
);
},
function() {
try {
var result = parser.priv.advanceTokenTester("\"\"shader source\"\";", 0);
} catch (err) {
result = "aborted";
}
test_result(
"Checking advanceToken. Passing \"\"\"shader source\"\";\", 0",
result.idType == parser.priv.Token.TOKEN_SHADER_SOURCE && result.value == "\"\"shader source\"\"",
result.name + ": " + result.value
);
},
function() {
try {
var result = parser.priv.advanceTokenTester("\"string\";", 0);
} catch (err) {
result = "aborted";
}
test_result(
"Checking advanceToken. Passing \"\"string\";\", 0",
result.idType == parser.priv.Token.TOKEN_STRING && result.value == "\"string\"",
result.name + ": " + result.value
);
},
function() {
try {
var result = parser.priv.advanceTokenTester("\'string\';", 0);
} catch (err) {
result = "aborted";
}
test_result(
"Checking advanceToken. Passing \"\'string\';\", 0",
result.idType == parser.priv.Token.TOKEN_STRING && result.value == "\'string\'",
result.name + ": " + result.value
);
},
function() {
try {
var result = parser.priv.advanceTokenTester("\'string\";", 0);
} catch (err) {
result = "aborted";
}
test_result(
"Checking advanceToken. Passing \"\'string\";\", 0",
result === "aborted",
result
);
},
function() {
try {
var result = parser.priv.advanceTokenTester("\'string\\", 0);
} catch (err) {
result = "aborted";
}
test_result(
"Checking advanceToken. Passing \"\'string\\\", 0",
result === "aborted",
result
);
},
function() {
try {
var result = parser.priv.mapDataTypeToken(parser.priv.Token.TOKEN_INT);
} catch (err) {
var result = "aborted";
}
test_result(
"Checking advanceToken. Passing parser.priv.Token.TOKEN_INT",
result === shaderUtils.DataType.TYPE_INT,
result
);
},
function() {
successfullyParsed = true;i
return true;
},
];
var current = 0;
function test_result(description, result, additional) {
switch (typeof(additional)) {
case "undefined":
break;
case "string":
description += ": \"" + additional + "\"";
break;
default:
description += ": " + additional;
break;
}
if (result) {
testPassed(description);
} else {
testFailed(description);
}
}
function do_next() {
if (tests[current]() !== false && tests.length > ++current) {
setTimeout(do_next, 0);
} else {
on_complete();
}
}
function on_complete() {
var testPost = document.createElement('script');
testPost.src = "../../../../js/js-test-post.js";
document.body.appendChild(testPost);
}
do_next();
//
</script>
</body>
</html>