| Index: node_modules/vulcanize/node_modules/uglify-js/test/run-tests.js
|
| diff --git a/node_modules/vulcanize/node_modules/uglify-js/test/run-tests.js b/node_modules/vulcanize/node_modules/uglify-js/test/run-tests.js
|
| new file mode 100755
|
| index 0000000000000000000000000000000000000000..94bf6ad9683cac50c3bf47cfc83a0b6327773bdd
|
| --- /dev/null
|
| +++ b/node_modules/vulcanize/node_modules/uglify-js/test/run-tests.js
|
| @@ -0,0 +1,185 @@
|
| +#! /usr/bin/env node
|
| +
|
| +var U = require("../tools/node");
|
| +var path = require("path");
|
| +var fs = require("fs");
|
| +var assert = require("assert");
|
| +var sys = require("util");
|
| +
|
| +var tests_dir = path.dirname(module.filename);
|
| +var failures = 0;
|
| +var failed_files = {};
|
| +
|
| +run_compress_tests();
|
| +if (failures) {
|
| + sys.error("\n!!! Failed " + failures + " test cases.");
|
| + sys.error("!!! " + Object.keys(failed_files).join(", "));
|
| + process.exit(1);
|
| +}
|
| +
|
| +var run_ast_conversion_tests = require("./mozilla-ast");
|
| +
|
| +run_ast_conversion_tests({
|
| + iterations: 1000
|
| +});
|
| +
|
| +/* -----[ utils ]----- */
|
| +
|
| +function tmpl() {
|
| + return U.string_template.apply(this, arguments);
|
| +}
|
| +
|
| +function log() {
|
| + var txt = tmpl.apply(this, arguments);
|
| + sys.puts(txt);
|
| +}
|
| +
|
| +function log_directory(dir) {
|
| + log("*** Entering [{dir}]", { dir: dir });
|
| +}
|
| +
|
| +function log_start_file(file) {
|
| + log("--- {file}", { file: file });
|
| +}
|
| +
|
| +function log_test(name) {
|
| + log(" Running test [{name}]", { name: name });
|
| +}
|
| +
|
| +function find_test_files(dir) {
|
| + var files = fs.readdirSync(dir).filter(function(name){
|
| + return /\.js$/i.test(name);
|
| + });
|
| + if (process.argv.length > 2) {
|
| + var x = process.argv.slice(2);
|
| + files = files.filter(function(f){
|
| + return x.indexOf(f) >= 0;
|
| + });
|
| + }
|
| + return files;
|
| +}
|
| +
|
| +function test_directory(dir) {
|
| + return path.resolve(tests_dir, dir);
|
| +}
|
| +
|
| +function as_toplevel(input) {
|
| + if (input instanceof U.AST_BlockStatement) input = input.body;
|
| + else if (input instanceof U.AST_Statement) input = [ input ];
|
| + else throw new Error("Unsupported input syntax");
|
| + var toplevel = new U.AST_Toplevel({ body: input });
|
| + toplevel.figure_out_scope();
|
| + return toplevel;
|
| +}
|
| +
|
| +function run_compress_tests() {
|
| + var dir = test_directory("compress");
|
| + log_directory("compress");
|
| + var files = find_test_files(dir);
|
| + function test_file(file) {
|
| + log_start_file(file);
|
| + function test_case(test) {
|
| + log_test(test.name);
|
| + var options = U.defaults(test.options, {
|
| + warnings: false
|
| + });
|
| + var cmp = new U.Compressor(options, true);
|
| + var expect = make_code(as_toplevel(test.expect), false);
|
| + var input = as_toplevel(test.input);
|
| + var input_code = make_code(test.input);
|
| + var output = input.transform(cmp);
|
| + output.figure_out_scope();
|
| + output = make_code(output, false);
|
| + if (expect != output) {
|
| + log("!!! failed\n---INPUT---\n{input}\n---OUTPUT---\n{output}\n---EXPECTED---\n{expected}\n\n", {
|
| + input: input_code,
|
| + output: output,
|
| + expected: expect
|
| + });
|
| + failures++;
|
| + failed_files[file] = 1;
|
| + }
|
| + }
|
| + var tests = parse_test(path.resolve(dir, file));
|
| + for (var i in tests) if (tests.hasOwnProperty(i)) {
|
| + test_case(tests[i]);
|
| + }
|
| + }
|
| + files.forEach(function(file){
|
| + test_file(file);
|
| + });
|
| +}
|
| +
|
| +function parse_test(file) {
|
| + var script = fs.readFileSync(file, "utf8");
|
| + var ast = U.parse(script, {
|
| + filename: file
|
| + });
|
| + var tests = {};
|
| + var tw = new U.TreeWalker(function(node, descend){
|
| + if (node instanceof U.AST_LabeledStatement
|
| + && tw.parent() instanceof U.AST_Toplevel) {
|
| + var name = node.label.name;
|
| + tests[name] = get_one_test(name, node.body);
|
| + return true;
|
| + }
|
| + if (!(node instanceof U.AST_Toplevel)) croak(node);
|
| + });
|
| + ast.walk(tw);
|
| + return tests;
|
| +
|
| + function croak(node) {
|
| + throw new Error(tmpl("Can't understand test file {file} [{line},{col}]\n{code}", {
|
| + file: file,
|
| + line: node.start.line,
|
| + col: node.start.col,
|
| + code: make_code(node, false)
|
| + }));
|
| + }
|
| +
|
| + function get_one_test(name, block) {
|
| + var test = { name: name, options: {} };
|
| + var tw = new U.TreeWalker(function(node, descend){
|
| + if (node instanceof U.AST_Assign) {
|
| + if (!(node.left instanceof U.AST_SymbolRef)) {
|
| + croak(node);
|
| + }
|
| + var name = node.left.name;
|
| + test[name] = evaluate(node.right);
|
| + return true;
|
| + }
|
| + if (node instanceof U.AST_LabeledStatement) {
|
| + assert.ok(
|
| + node.label.name == "input" || node.label.name == "expect",
|
| + tmpl("Unsupported label {name} [{line},{col}]", {
|
| + name: node.label.name,
|
| + line: node.label.start.line,
|
| + col: node.label.start.col
|
| + })
|
| + );
|
| + var stat = node.body;
|
| + if (stat instanceof U.AST_BlockStatement) {
|
| + 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;
|
| + return true;
|
| + }
|
| + });
|
| + block.walk(tw);
|
| + return test;
|
| + };
|
| +}
|
| +
|
| +function make_code(ast, beautify) {
|
| + if (arguments.length == 1) beautify = true;
|
| + var stream = U.OutputStream({ beautify: beautify });
|
| + ast.print(stream);
|
| + return stream.get();
|
| +}
|
| +
|
| +function evaluate(code) {
|
| + if (code instanceof U.AST_Node)
|
| + code = make_code(code);
|
| + return new Function("return(" + code + ")")();
|
| +}
|
|
|