|
@@ -13,6 +13,11 @@ function normalizeLineEndings(text){
|
|
.replace(/\s+$/,''); // ending spaces
|
|
.replace(/\s+$/,''); // ending spaces
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+function filterOutScopes(text){
|
|
|
|
+ return text.replace(/.*\$scope =.+\n/g, "")
|
|
|
|
+ .replace(/, \$scope\)/g, ")");
|
|
|
|
+}
|
|
|
|
+
|
|
function filterOutRtlCode(text){
|
|
function filterOutRtlCode(text){
|
|
var prefix = "var RTL$ = {";
|
|
var prefix = "var RTL$ = {";
|
|
if (text.substr(0, prefix.length) != prefix)
|
|
if (text.substr(0, prefix.length) != prefix)
|
|
@@ -27,6 +32,7 @@ function filterOutRtlCode(text){
|
|
|
|
|
|
function compareResults(result, name, dirs){
|
|
function compareResults(result, name, dirs){
|
|
result = filterOutRtlCode(result);
|
|
result = filterOutRtlCode(result);
|
|
|
|
+ result = filterOutScopes(result);
|
|
fs.writeFileSync(path.join(dirs.output, name), result);
|
|
fs.writeFileSync(path.join(dirs.output, name), result);
|
|
var expected = fs.readFileSync(path.join(dirs.expected, name), "utf8");
|
|
var expected = fs.readFileSync(path.join(dirs.expected, name), "utf8");
|
|
if (normalizeLineEndings(result) != normalizeLineEndings(expected))
|
|
if (normalizeLineEndings(result) != normalizeLineEndings(expected))
|
|
@@ -88,6 +94,20 @@ function run(src, dirs, language){
|
|
require(resultPath);
|
|
require(resultPath);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+function expectRuntimeError(src, dirs, language){
|
|
|
|
+ var error = "";
|
|
|
|
+ try {
|
|
|
|
+ run(src, dirs, language);
|
|
|
|
+ }
|
|
|
|
+ catch (x){
|
|
|
|
+ error += x;
|
|
|
|
+ }
|
|
|
|
+ if (!error.length)
|
|
|
|
+ throw new Test.TestError("runtime error expected");
|
|
|
|
+ var resultName = path.basename(src).replace(".ob", ".txt");
|
|
|
|
+ compareResults(error, resultName, dirs);
|
|
|
|
+}
|
|
|
|
+
|
|
function makeTest(test, src, dirs, grammar){
|
|
function makeTest(test, src, dirs, grammar){
|
|
return function(){test(src, dirs, grammar);};
|
|
return function(){test(src, dirs, grammar);};
|
|
}
|
|
}
|
|
@@ -96,7 +116,7 @@ function makeTests(test, dirs, grammar){
|
|
var output = dirs.output;
|
|
var output = dirs.output;
|
|
if (fs.existsSync(output))
|
|
if (fs.existsSync(output))
|
|
rmTree(output);
|
|
rmTree(output);
|
|
- fs.mkdirSync(output);
|
|
|
|
|
|
+ mkTree(output);
|
|
|
|
|
|
var sources = fs.readdirSync(dirs.input);
|
|
var sources = fs.readdirSync(dirs.input);
|
|
var tests = {};
|
|
var tests = {};
|
|
@@ -109,6 +129,14 @@ function makeTests(test, dirs, grammar){
|
|
return tests;
|
|
return tests;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+function mkTree(p){
|
|
|
|
+ if (fs.existsSync(p))
|
|
|
|
+ return;
|
|
|
|
+
|
|
|
|
+ mkTree(path.dirname(p));
|
|
|
|
+ fs.mkdirSync(p);
|
|
|
|
+}
|
|
|
|
+
|
|
function rmTree(root){
|
|
function rmTree(root){
|
|
fs.readdirSync(root).forEach(function(file){
|
|
fs.readdirSync(root).forEach(function(file){
|
|
var filePath = path.join(root, file);
|
|
var filePath = path.join(root, file);
|
|
@@ -156,6 +184,7 @@ function outputSubdir(dirs, subdir){
|
|
function main(){
|
|
function main(){
|
|
var okDirs = makeTestDirs();
|
|
var okDirs = makeTestDirs();
|
|
var errDirs = makeTestDirs("errors");
|
|
var errDirs = makeTestDirs("errors");
|
|
|
|
+ var errRuntimeDirs = makeTestDirs("errorsRT");
|
|
var runDirs = makeTestDirs("run");
|
|
var runDirs = makeTestDirs("run");
|
|
var nodejsDirs = makeTestDirs("nodejs");
|
|
var nodejsDirs = makeTestDirs("nodejs");
|
|
var oberonDirs = makeTestDirs("oberon");
|
|
var oberonDirs = makeTestDirs("oberon");
|
|
@@ -167,6 +196,7 @@ function main(){
|
|
return {
|
|
return {
|
|
"expect OK": makeTests(expectOk, outputSubdir(okDirs, subdir), language),
|
|
"expect OK": makeTests(expectOk, outputSubdir(okDirs, subdir), language),
|
|
"expect compile error": makeTests(expectError, outputSubdir(errDirs, subdir), language),
|
|
"expect compile error": makeTests(expectError, outputSubdir(errDirs, subdir), language),
|
|
|
|
+ "expect runtime error": makeTests(expectRuntimeError, outputSubdir(errRuntimeDirs, subdir), language),
|
|
"run": makeTests(run, outputSubdir(runDirs, subdir), language),
|
|
"run": makeTests(run, outputSubdir(runDirs, subdir), language),
|
|
"nodejs": makeTests(compileNodejs, outputSubdir(nodejsDirs, subdir), language)
|
|
"nodejs": makeTests(compileNodejs, outputSubdir(nodejsDirs, subdir), language)
|
|
};
|
|
};
|