From c9d3c20e2c03cf28a182cf04e2151c21dd7358e1 Mon Sep 17 00:00:00 2001 From: Yury Delendik Date: Wed, 3 May 2017 12:16:37 -0500 Subject: [PATCH 1/2] Fix esprima tests. --- .../fixtures_esprima/comments-expected.js | 17 ++------ external/builder/test-fixtures.js | 39 ++++++++++-------- external/builder/test-fixtures_esprima.js | 40 ++++++++++--------- gulpfile.js | 9 +++++ package.json | 2 +- 5 files changed, 57 insertions(+), 50 deletions(-) diff --git a/external/builder/fixtures_esprima/comments-expected.js b/external/builder/fixtures_esprima/comments-expected.js index f36ff416d..f216553cb 100644 --- a/external/builder/fixtures_esprima/comments-expected.js +++ b/external/builder/fixtures_esprima/comments-expected.js @@ -1,28 +1,17 @@ function f1() { - /* head */ "1"; - /* mid */ "2"; } -/* tail */ function f2() { - // head "1"; - // mid "2"; } -// tail function f2() { if ("1") { - // begin block "1"; } "2"; - // trailing - if (/* s */ - "3") - /*e*/ - { - "4"; - } + if ("3") { + "4"; + } } diff --git a/external/builder/test-fixtures.js b/external/builder/test-fixtures.js index 12fc8af89..17d52a784 100644 --- a/external/builder/test-fixtures.js +++ b/external/builder/test-fixtures.js @@ -1,17 +1,20 @@ 'use strict'; -require('shelljs/make'); - var builder = require('./builder'); var fs = require('fs'); +var path = require('path'); var errors = 0; -cd(__dirname); -cd('fixtures'); -ls('*-expected.*').forEach(function(expectationFilename) { +var baseDir = path.join(__dirname, 'fixtures'); +var files = fs.readdirSync(baseDir).filter(function (name) { + return /-expected\./.test(name); +}).map(function (name) { + return path.join(baseDir, name); +}); +files.forEach(function(expectationFilename) { var inFilename = expectationFilename.replace('-expected', ''); - var expectation = cat(expectationFilename).trim() + var expectation = fs.readFileSync(expectationFilename).toString().trim() .replace(/__filename/g, fs.realpathSync(inFilename)); var outLines = []; @@ -32,20 +35,22 @@ ls('*-expected.*').forEach(function(expectationFilename) { if (out !== expectation) { errors++; - echo('Assertion failed for ' + inFilename); - echo('--------------------------------------------------'); - echo('EXPECTED:'); - echo(expectation); - echo('--------------------------------------------------'); - echo('ACTUAL'); - echo(out); - echo('--------------------------------------------------'); - echo(); + console.log('Assertion failed for ' + inFilename); + console.log('--------------------------------------------------'); + console.log('EXPECTED:'); + console.log(expectation); + console.log('--------------------------------------------------'); + console.log('ACTUAL'); + console.log(out); + console.log('--------------------------------------------------'); + console.log(); } }); if (errors) { - echo('Found ' + errors + ' expectation failures.'); + console.error('Found ' + errors + ' expectation failures.'); + process.exit(1); } else { - echo('All tests completed without errors.'); + console.log('All tests completed without errors.'); + process.exit(0); } diff --git a/external/builder/test-fixtures_esprima.js b/external/builder/test-fixtures_esprima.js index 108d9a35a..944e91a04 100644 --- a/external/builder/test-fixtures_esprima.js +++ b/external/builder/test-fixtures_esprima.js @@ -1,17 +1,20 @@ 'use strict'; -require('shelljs/make'); - var p2 = require('./preprocessor2.js'); var fs = require('fs'); +var path = require('path'); var errors = 0; -cd(__dirname); -cd('fixtures_esprima'); -ls('*-expected.*').forEach(function(expectationFilename) { +var baseDir = path.join(__dirname, 'fixtures_esprima'); +var files = fs.readdirSync(baseDir).filter(function (name) { + return /-expected\./.test(name); +}).map(function (name) { + return path.join(baseDir, name); +}); +files.forEach(function(expectationFilename) { var inFilename = expectationFilename.replace('-expected', ''); - var expectation = cat(expectationFilename).trim() + var expectation = fs.readFileSync(expectationFilename).toString().trim() .replace(/__filename/g, fs.realpathSync(inFilename)); var input = fs.readFileSync(inFilename).toString(); @@ -24,7 +27,6 @@ ls('*-expected.*').forEach(function(expectationFilename) { var ctx = { defines: defines, rootPath: __dirname + '/../..', - saveComments: true }; var out; try { @@ -35,20 +37,22 @@ ls('*-expected.*').forEach(function(expectationFilename) { if (out !== expectation) { errors++; - echo('Assertion failed for ' + inFilename); - echo('--------------------------------------------------'); - echo('EXPECTED:'); - echo(expectation); - echo('--------------------------------------------------'); - echo('ACTUAL'); - echo(out); - echo('--------------------------------------------------'); - echo(); + console.log('Assertion failed for ' + inFilename); + console.log('--------------------------------------------------'); + console.log('EXPECTED:'); + console.log(expectation); + console.log('--------------------------------------------------'); + console.log('ACTUAL'); + console.log(out); + console.log('--------------------------------------------------'); + console.log(); } }); if (errors) { - echo('Found ' + errors + ' expectation failures.'); + console.error('Found ' + errors + ' expectation failures.'); + process.exit(1); } else { - echo('All tests completed without errors.'); + console.log('All tests completed without errors.'); + process.exit(0); } diff --git a/gulpfile.js b/gulpfile.js index 703981b9c..9371002e0 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -1424,3 +1424,12 @@ gulp.task('mozcentraldiff', ['mozcentral', 'mozcentralbaseline'], }); }); }); + +gulp.task('externaltest', function () { + gutil.log('Running test-fixtures.js'); + safeSpawnSync('node', ['external/builder/test-fixtures.js'], + {stdio: 'inherit'}); + gutil.log('Running test-fixtures_esprima.js'); + safeSpawnSync('node', ['external/builder/test-fixtures_esprima.js'], + {stdio: 'inherit'}); +}); diff --git a/package.json b/package.json index 982a7e148..e3ee2c866 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,7 @@ "yargs": "^3.14.0" }, "scripts": { - "test": "gulp lint unittestcli" + "test": "gulp lint unittestcli externaltest" }, "repository": { "type": "git", From 996805f953d4a0b1fffe8f4a1c3677a70877ec86 Mon Sep 17 00:00:00 2001 From: Yury Delendik Date: Wed, 3 May 2017 12:17:18 -0500 Subject: [PATCH 2/2] Produces source maps for built files. --- external/builder/preprocessor2.js | 15 +++++---------- external/webpack/pdfjsdev-loader.js | 19 ++++++++++++++++--- gulpfile.js | 6 ++++++ 3 files changed, 27 insertions(+), 13 deletions(-) diff --git a/external/builder/preprocessor2.js b/external/builder/preprocessor2.js index 9e9b5e3ab..2fc242b22 100644 --- a/external/builder/preprocessor2.js +++ b/external/builder/preprocessor2.js @@ -347,28 +347,23 @@ function traverseTree(ctx, node) { } function preprocessPDFJSCode(ctx, code) { - var saveComments = !!ctx.saveComments; var format = ctx.format || { indent: { style: ' ', - adjustMultilineComment: saveComments, } }; - var comments; - var parseComment = { + var parseOptions = { locations: true, - onComments: saveComments || (comments = []), + sourceFile: ctx.sourceFile, sourceType: 'module', }; var codegenOptions = { format: format, - comment: saveComments, parse: acorn.parse, + sourceMap: ctx.sourceMap, + sourceMapWithCode: ctx.sourceMap, }; - var syntax = acorn.parse(code, parseComment); - if (saveComments) { - escodegen.attachComments(syntax, comments); - } + var syntax = acorn.parse(code, parseOptions); traverseTree(ctx, syntax); return escodegen.generate(syntax, codegenOptions); } diff --git a/external/webpack/pdfjsdev-loader.js b/external/webpack/pdfjsdev-loader.js index beba2a887..ca6cafee2 100644 --- a/external/webpack/pdfjsdev-loader.js +++ b/external/webpack/pdfjsdev-loader.js @@ -17,6 +17,7 @@ 'use strict'; var preprocessor2 = require('../builder/preprocessor2.js'); +var path = require('path'); module.exports = function (source) { // Options must be specified, ignoring request if not. @@ -24,7 +25,19 @@ module.exports = function (source) { return source; } this.cacheable(); - var ctx = this.query; - source = preprocessor2.preprocessPDFJSCode(ctx, source); - return source; + + var filePath = this.resourcePath; + var context = this.options.context; + var sourcePath = path.relative(context, filePath).split(path.sep).join('/'); + + var ctx = Object.create(this.query); + ctx.sourceMap = true; + ctx.sourceFile = sourcePath; + + var callback = this.callback; + var sourceAndMap = preprocessor2.preprocessPDFJSCode(ctx, source); + var map = sourceAndMap.map.toJSON(); + // escodegen does not embed source -- setting map's sourcesContent. + map.sourcesContent = [source]; + callback(null, sourceAndMap.code, map); }; diff --git a/gulpfile.js b/gulpfile.js index 9371002e0..b47fb03bc 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -129,6 +129,8 @@ function createWebpackConfig(defines, output) { BUNDLE_BUILD: versionInfo.commit }); var licenseHeader = fs.readFileSync('./src/license_header.js').toString(); + var enableSourceMaps = !bundleDefines.FIREFOX && !bundleDefines.MOZCENTRAL && + !bundleDefines.CHROME; return { output: output, @@ -142,6 +144,7 @@ function createWebpackConfig(defines, output) { 'pdfjs-web': path.join(__dirname, 'web'), } }, + devtool: enableSourceMaps ? 'source-map' : undefined, module: { loaders: [ { @@ -1329,8 +1332,11 @@ gulp.task('dist-repo-prepare', ['dist-pre'], function () { .pipe(gulp.dest(DIST_DIR)), gulp.src([ GENERIC_DIR + 'build/pdf.js', + GENERIC_DIR + 'build/pdf.js.map', GENERIC_DIR + 'build/pdf.worker.js', + GENERIC_DIR + 'build/pdf.worker.js.map', SINGLE_FILE_DIR + 'build/pdf.combined.js', + SINGLE_FILE_DIR + 'build/pdf.combined.js.map', SRC_DIR + 'pdf.worker.entry.js', ]).pipe(gulp.dest(DIST_DIR + 'build/')), gulp.src(MINIFIED_DIR + 'build/pdf.js')