react / react-0.13.3 / examples / basic-commonjs / node_modules / browserify / node_modules / browser-pack / test / source-maps.js
80724 viewsvar test = require('tape');1var pack = require('../');2var path = require('path');34function decode(base64) {5return new Buffer(base64, 'base64').toString();6}78function unmountPrelude(sources) {9return sources.map(function (x) {10var basename = path.basename(x);11return basename === '_prelude.js' ? basename : x;12});13}1415function grabSourceMap(lastLine) {16var base64 = lastLine.split(',').pop();17var sm = JSON.parse(decode(base64));18sm.sources = unmountPrelude(sm.sources);19return sm;20}2122function grabLastLine(src) {23return src.split('\n').slice(-2)[0];24}2526test('pack one file with source file field and one without', function (t) {27t.plan(7);2829var p = pack();30var src = '';31p.on('data', function (buf) { src += buf });32p.on('end', function () {33var r = Function(['T'], 'return ' + src)(t);34t.equal(r('xyz')(5), 555);35t.equal(r('xyz')(5), 555);3637var lastLine = grabLastLine(src);38var sm = grabSourceMap(lastLine);3940t.ok(/^\/\/# sourceMappingURL/.test(lastLine), 'contains source mapping url as last line');41t.deepEqual(sm.sources, [ '_prelude.js', 'foo.js' ], 'includes mappings for sourceFile and prelude only');42t.equal(sm.mappings, 'AAAA;;;ACAA;AACA;AACA;AACA', 'adds offset mapping for each line' );43});4445p.end(JSON.stringify([46{47id: 'abc',48source: 'T.equal(require("./xyz")(3), 333)',49entry: true,50deps: { './xyz': 'xyz' }51},52{53id: 'xyz',54source: 'T.ok(true);\nmodule.exports=function(n){\n return n*111 \n}',55sourceFile: 'foo.js'56}57]));58});5960test('pack two files with source file field', function (t) {61t.plan(7);6263var p = pack();64var src = '';65p.on('data', function (buf) { src += buf });66p.on('end', function () {67var r = Function(['T'], 'return ' + src)(t);68t.equal(r('xyz')(5), 555);69t.equal(r('xyz')(5), 555);7071var lastLine = grabLastLine(src);72var sm = grabSourceMap(lastLine);7374t.ok(/^\/\/# sourceMappingURL/.test(lastLine), 'contains source mapping url as last line');75t.deepEqual(sm.sources, [ '_prelude.js', 'wunder/bar.js', 'foo.js' ], 'includes mappings for both files and prelude');76t.equal(sm.mappings, 'AAAA;ACAA;;ACAA;AACA;AACA;AACA', 'adds offset mapping for each line' );77});7879p.end(JSON.stringify([80{81id: 'abc',82source: 'T.equal(require("./xyz")(3), 333)',83entry: true,84deps: { './xyz': 'xyz' },85sourceFile: 'wunder/bar.js'86},87{88id: 'xyz',89source: 'T.ok(true);\nmodule.exports=function(n){\n return n*111 \n}',90sourceFile: 'foo.js'91}92]));93});9495test('pack two files without source file field', function (t) {96t.plan(5);9798var p = pack();99var src = '';100p.on('data', function (buf) { src += buf });101p.on('end', function () {102var r = Function(['T'], 'return ' + src)(t);103t.equal(r('xyz')(5), 555);104t.equal(r('xyz')(5), 555);105106var lastLine = grabLastLine(src);107t.notOk(/^\/\/# sourceMappingURL/.test(lastLine), 'contains no source mapping url');108});109110p.end(JSON.stringify([111{112id: 'abc',113source: 'T.equal(require("./xyz")(3), 333)',114entry: true,115deps: { './xyz': 'xyz' }116},117{118id: 'xyz',119source: 'T.ok(true);\nmodule.exports=function(n){\n return n*111 \n}'120}121]));122});123124test('pack two files with source file field, one with nomap flag', function (t) {125t.plan(7);126127var p = pack();128var src = '';129p.on('data', function (buf) { src += buf });130p.on('end', function () {131var r = Function(['T'], 'return ' + src)(t);132t.equal(r('xyz')(5), 555);133t.equal(r('xyz')(5), 555);134135var lastLine = grabLastLine(src);136var sm = grabSourceMap(lastLine);137138t.ok(/^\/\/# sourceMappingURL/.test(lastLine), 'contains source mapping url as last line');139t.deepEqual(sm.sources, [ '_prelude.js', 'wunder/bar.js' ], 'includes mappings for only the file without the "nomap" flag and prelude');140t.equal(sm.mappings, 'AAAA;ACAA', 'adds offset mapping for each line of mapped file' );141t.end()142});143144p.end(JSON.stringify([145{146id: 'abc',147source: 'T.equal(require("./xyz")(3), 333)',148entry: true,149deps: { './xyz': 'xyz' },150sourceFile: 'wunder/bar.js'151},152{153id: 'xyz',154source: 'T.ok(true);\nmodule.exports=function(n){\n return n*111 \n}',155sourceFile: 'foo.js',156nomap: true157}158]));159});160161test('custom sourceMapPrefix for //@', function (t) {162t.plan(7);163164var p = pack({ sourceMapPrefix: '//@' });165var src = '';166p.on('data', function (buf) { src += buf });167p.on('end', function () {168var r = Function(['T'], 'return ' + src)(t);169t.equal(r('xyz')(5), 555);170t.equal(r('xyz')(5), 555);171172var lastLine = grabLastLine(src);173var sm = grabSourceMap(lastLine);174175t.ok(/^\/\/@ sourceMappingURL/.test(lastLine), 'contains source mapping url as last line');176t.deepEqual(sm.sources, [ '_prelude.js', 'foo.js' ], 'includes mappings for sourceFile and prelude only');177t.equal(sm.mappings, 'AAAA;;;ACAA;AACA;AACA;AACA', 'adds offset mapping for each line' );178});179180p.end(JSON.stringify([181{182id: 'abc',183source: 'T.equal(require("./xyz")(3), 333)',184entry: true,185deps: { './xyz': 'xyz' }186},187{188id: 'xyz',189source: 'T.ok(true);\nmodule.exports=function(n){\n return n*111 \n}',190sourceFile: 'foo.js'191}192]));193});194195196197