aboutsummaryrefslogtreecommitdiff
path: root/test/mocha
diff options
context:
space:
mode:
authorAlex Lam S.L <alexlamsl@gmail.com>2018-03-29 14:47:55 +0900
committerGitHub <noreply@github.com>2018-03-29 14:47:55 +0900
commit82ae95c334fdcc0a079c1dd935cd43cc97b00938 (patch)
tree86732a6f39e569d73c3a05fc6b1d296cb5ce7e0d /test/mocha
parent9a5e2052c4860256021ede7c2c5d529fa0f320ed (diff)
downloadtracifyjs-82ae95c334fdcc0a079c1dd935cd43cc97b00938.tar.gz
tracifyjs-82ae95c334fdcc0a079c1dd935cd43cc97b00938.zip
improve source map granularity (#3030)
fixes #3023
Diffstat (limited to 'test/mocha')
-rw-r--r--test/mocha/minify.js93
-rw-r--r--test/mocha/sourcemaps.js141
2 files changed, 141 insertions, 93 deletions
diff --git a/test/mocha/minify.js b/test/mocha/minify.js
index 995897da..c8c17778 100644
--- a/test/mocha/minify.js
+++ b/test/mocha/minify.js
@@ -186,99 +186,6 @@ describe("minify", function() {
});
});
- describe("inSourceMap", function() {
- it("Should read the given string filename correctly when sourceMapIncludeSources is enabled (#1236)", function() {
- var result = Uglify.minify(read("./test/input/issue-1236/simple.js"), {
- sourceMap: {
- content: read("./test/input/issue-1236/simple.js.map"),
- filename: "simple.min.js",
- includeSources: true
- }
- });
-
- var map = JSON.parse(result.map);
-
- assert.equal(map.file, 'simple.min.js');
- assert.equal(map.sourcesContent.length, 1);
- assert.equal(map.sourcesContent[0],
- 'let foo = x => "foo " + x;\nconsole.log(foo("bar"));');
- });
- it("Should process inline source map", function() {
- var code = Uglify.minify(read("./test/input/issue-520/input.js"), {
- compress: { toplevel: true },
- sourceMap: {
- content: "inline",
- url: "inline"
- }
- }).code + "\n";
- assert.strictEqual(code, readFileSync("test/input/issue-520/output.js", "utf8"));
- });
- it("Should warn for missing inline source map", function() {
- var warn_function = Uglify.AST_Node.warn_function;
- var warnings = [];
- Uglify.AST_Node.warn_function = function(txt) {
- warnings.push(txt);
- };
- try {
- var result = Uglify.minify(read("./test/input/issue-1323/sample.js"), {
- mangle: false,
- sourceMap: {
- content: "inline"
- }
- });
- assert.strictEqual(result.code, "var bar=function(bar){return bar};");
- assert.strictEqual(warnings.length, 1);
- assert.strictEqual(warnings[0], "inline source map not found");
- } finally {
- Uglify.AST_Node.warn_function = warn_function;
- }
- });
- it("Should fail with multiple input and inline source map", function() {
- var result = Uglify.minify([
- read("./test/input/issue-520/input.js"),
- read("./test/input/issue-520/output.js")
- ], {
- sourceMap: {
- content: "inline",
- url: "inline"
- }
- });
- var err = result.error;
- assert.ok(err instanceof Error);
- assert.strictEqual(err.stack.split(/\n/)[0], "Error: inline source map only works with singular input");
- });
- });
-
- describe("sourceMapInline", function() {
- it("should append source map to output js when sourceMapInline is enabled", function() {
- var result = Uglify.minify('var a = function(foo) { return foo; };', {
- sourceMap: {
- url: "inline"
- }
- });
- var code = result.code;
- assert.strictEqual(code, "var a=function(n){return n};\n" +
- "//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIjAiXSwibmFtZXMiOlsiYSIsImZvbyJdLCJtYXBwaW5ncyI6IkFBQUEsSUFBSUEsRUFBSSxTQUFTQyxHQUFPLE9BQU9BIn0=");
- });
- it("should not append source map to output js when sourceMapInline is not enabled", function() {
- var result = Uglify.minify('var a = function(foo) { return foo; };');
- var code = result.code;
- assert.strictEqual(code, "var a=function(n){return n};");
- });
- it("should work with max_line_len", function() {
- var result = Uglify.minify(read("./test/input/issue-505/input.js"), {
- output: {
- max_line_len: 20
- },
- sourceMap: {
- url: "inline"
- }
- });
- assert.strictEqual(result.error, undefined);
- assert.strictEqual(result.code, read("./test/input/issue-505/output.js"));
- });
- });
-
describe("#__PURE__", function() {
it("should drop #__PURE__ hint after use", function() {
var result = Uglify.minify('//@__PURE__ comment1 #__PURE__ comment2\n foo(), bar();', {
diff --git a/test/mocha/sourcemaps.js b/test/mocha/sourcemaps.js
new file mode 100644
index 00000000..7f4acb78
--- /dev/null
+++ b/test/mocha/sourcemaps.js
@@ -0,0 +1,141 @@
+var assert = require("assert");
+var readFileSync = require("fs").readFileSync;
+var Uglify = require("../../");
+
+function read(path) {
+ return readFileSync(path, "utf8");
+}
+
+function source_map(code) {
+ return JSON.parse(Uglify.minify(code, {
+ compress: false,
+ mangle: false,
+ sourceMap: true,
+ }).map);
+}
+
+describe("sourcemaps", function() {
+ it("Should give correct version", function() {
+ var map = source_map("var x = 1 + 1;");
+ assert.strictEqual(map.version, 3);
+ assert.deepEqual(map.names, [ "x" ]);
+ });
+
+ it("Should give correct names", function() {
+ var map = source_map([
+ "({",
+ " get enabled() {",
+ " return 3;",
+ " },",
+ " set enabled(x) {",
+ " ;",
+ " }",
+ "});",
+ ].join("\n"));
+ assert.deepEqual(map.names, [ "enabled", "x" ]);
+ });
+
+ it("Should mark array/object literals", function() {
+ var result = Uglify.minify([
+ "var obj = {};",
+ "obj.wat([]);",
+ ].join("\n"), {
+ sourceMap: true,
+ });
+ if (result.error) throw result.error;
+ assert.strictEqual(result.map, '{"version":3,"sources":["0"],"names":["obj","wat"],"mappings":"AAAA,IAAIA,IAAM,GACVA,IAAIC,IAAI"}');
+ });
+
+ describe("inSourceMap", function() {
+ it("Should read the given string filename correctly when sourceMapIncludeSources is enabled (#1236)", function() {
+ var result = Uglify.minify(read("./test/input/issue-1236/simple.js"), {
+ sourceMap: {
+ content: read("./test/input/issue-1236/simple.js.map"),
+ filename: "simple.min.js",
+ includeSources: true
+ }
+ });
+
+ var map = JSON.parse(result.map);
+
+ assert.equal(map.file, 'simple.min.js');
+ assert.equal(map.sourcesContent.length, 1);
+ assert.equal(map.sourcesContent[0],
+ 'let foo = x => "foo " + x;\nconsole.log(foo("bar"));');
+ });
+ it("Should process inline source map", function() {
+ var code = Uglify.minify(read("./test/input/issue-520/input.js"), {
+ compress: { toplevel: true },
+ sourceMap: {
+ content: "inline",
+ url: "inline"
+ }
+ }).code + "\n";
+ assert.strictEqual(code, readFileSync("test/input/issue-520/output.js", "utf8"));
+ });
+ it("Should warn for missing inline source map", function() {
+ var warn_function = Uglify.AST_Node.warn_function;
+ var warnings = [];
+ Uglify.AST_Node.warn_function = function(txt) {
+ warnings.push(txt);
+ };
+ try {
+ var result = Uglify.minify(read("./test/input/issue-1323/sample.js"), {
+ mangle: false,
+ sourceMap: {
+ content: "inline"
+ }
+ });
+ assert.strictEqual(result.code, "var bar=function(bar){return bar};");
+ assert.strictEqual(warnings.length, 1);
+ assert.strictEqual(warnings[0], "inline source map not found");
+ } finally {
+ Uglify.AST_Node.warn_function = warn_function;
+ }
+ });
+ it("Should fail with multiple input and inline source map", function() {
+ var result = Uglify.minify([
+ read("./test/input/issue-520/input.js"),
+ read("./test/input/issue-520/output.js")
+ ], {
+ sourceMap: {
+ content: "inline",
+ url: "inline"
+ }
+ });
+ var err = result.error;
+ assert.ok(err instanceof Error);
+ assert.strictEqual(err.stack.split(/\n/)[0], "Error: inline source map only works with singular input");
+ });
+ });
+
+ describe("sourceMapInline", function() {
+ it("should append source map to output js when sourceMapInline is enabled", function() {
+ var result = Uglify.minify('var a = function(foo) { return foo; };', {
+ sourceMap: {
+ url: "inline"
+ }
+ });
+ var code = result.code;
+ assert.strictEqual(code, "var a=function(n){return n};\n" +
+ "//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIjAiXSwibmFtZXMiOlsiYSIsImZvbyJdLCJtYXBwaW5ncyI6IkFBQUEsSUFBSUEsRUFBSSxTQUFTQyxHQUFPLE9BQU9BIn0=");
+ });
+ it("should not append source map to output js when sourceMapInline is not enabled", function() {
+ var result = Uglify.minify('var a = function(foo) { return foo; };');
+ var code = result.code;
+ assert.strictEqual(code, "var a=function(n){return n};");
+ });
+ it("should work with max_line_len", function() {
+ var result = Uglify.minify(read("./test/input/issue-505/input.js"), {
+ output: {
+ max_line_len: 20
+ },
+ sourceMap: {
+ url: "inline"
+ }
+ });
+ assert.strictEqual(result.error, undefined);
+ assert.strictEqual(result.code, read("./test/input/issue-505/output.js"));
+ });
+ });
+});