Added expect_exact for testing the OutputStream
authorFábio Santos <fabiosantosart@gmail.com>
Sun, 12 Apr 2015 13:51:26 +0000 (14:51 +0100)
committerRichard van Velzen <rvanvelzen1@gmail.com>
Tue, 14 Apr 2015 18:26:47 +0000 (20:26 +0200)
This works almost exactly like `expect`, except that you pass a literal string
of which the result is compared with the generated output.

test/run-tests.js

index 94bf6ad..215f6af 100755 (executable)
@@ -84,7 +84,12 @@ function run_compress_tests() {
                 warnings: false
             });
             var cmp = new U.Compressor(options, true);
-            var expect = make_code(as_toplevel(test.expect), false);
+            var expect;
+            if (test.expect) {
+                expect = make_code(as_toplevel(test.expect), false);
+            } else {
+                expect = test.expect_exact;
+            }
             var input = as_toplevel(test.input);
             var input_code = make_code(test.input);
             var output = input.transform(cmp);
@@ -150,7 +155,7 @@ function parse_test(file) {
             }
             if (node instanceof U.AST_LabeledStatement) {
                 assert.ok(
-                    node.label.name == "input" || node.label.name == "expect",
+                    node.label.name == "input" || node.label.name == "expect" || node.label.name == "expect_exact",
                     tmpl("Unsupported label {name} [{line},{col}]", {
                         name: node.label.name,
                         line: node.label.start.line,
@@ -162,7 +167,16 @@ function parse_test(file) {
                     if (stat.body.length == 1) stat = stat.body[0];
                     else if (stat.body.length == 0) stat = new U.AST_EmptyStatement();
                 }
-                test[node.label.name] = stat;
+                if (node.label.name === "expect_exact") {
+                    if (!(stat.TYPE === "SimpleStatement" && stat.body.TYPE === "String")) {
+                        throw new Error(
+                            "The value of the expect_exact clause should be a string, " +
+                            "like `expect_exact: \"some.exact.javascript;\"`");
+                    }
+                    test[node.label.name] = stat.body.start.value
+                } else {
+                    test[node.label.name] = stat;
+                }
                 return true;
             }
         });