diff --git a/bin/cmd.js b/bin/cmd.js index 1a63b19ac..191597ef9 100755 --- a/bin/cmd.js +++ b/bin/cmd.js @@ -45,12 +45,13 @@ if (b.argv.deps) { } if (b.argv.list) { - b.pipeline.get('deps').push(through.obj( - function (row, enc, next) { - console.log(row.file || row.id); - next() - } - )); + var deps = []; + b.pipeline.get('deps').on('end', function () { + deps.sort().forEach(function (d) { console.log(d) }); + }); + b.pipeline.on('file', function (file, id) { + deps.push(file); + }); return b.bundle(); } diff --git a/test/bin_list.js b/test/bin_list.js new file mode 100644 index 000000000..2f09b409a --- /dev/null +++ b/test/bin_list.js @@ -0,0 +1,118 @@ +var test = require('tap').test; +var spawn = require('child_process').spawn; +var path = require('path'); +var vm = require('vm'); + +test('bin --list', function (t) { + t.plan(3); + + var cwd = process.cwd(); + process.chdir(path.resolve(__dirname, 'list')); + + var ps = spawn(process.execPath, [ + path.resolve(__dirname, '../bin/cmd.js'), + '--list', 'main.js' + ]); + var out = ''; + var err = ''; + ps.stdout.on('data', function (buf) { out += buf }); + ps.stderr.on('data', function (buf) { err += buf }); + + var expected = [ + path.resolve(__dirname, 'list/main.js'), + path.resolve(__dirname, 'list/node_modules/qq/b.js'), + path.resolve(__dirname, 'list/node_modules/qq/node_modules/a/index.js'), + path.resolve(__dirname, 'list/node_modules/qq/node_modules/z/index.js') + ].join('\n') + '\n'; + + ps.on('exit', function (code) { + t.equal(code, 0, 'command exited cleanly'); + t.equal(err, '', 'nothing reported to stderr'); + t.equal(out, expected, 'expected file list'); + }); +}); + +test('bin --require --list', function (t) { + t.plan(3); + + var cwd = process.cwd(); + process.chdir(path.resolve(__dirname, 'list')); + + var ps = spawn(process.execPath, [ + path.resolve(__dirname, '../bin/cmd.js'), + '--list', '--require', 'qq' + ]); + var out = ''; + var err = ''; + ps.stdout.on('data', function (buf) { out += buf }); + ps.stderr.on('data', function (buf) { err += buf }); + + var expected = [ + path.resolve(__dirname, 'list/node_modules/qq/b.js'), + path.resolve(__dirname, 'list/node_modules/qq/node_modules/a/index.js'), + path.resolve(__dirname, 'list/node_modules/qq/node_modules/z/index.js') + ].join('\n') + '\n'; + + ps.on('exit', function (code) { + t.equal(code, 0, 'command exited cleanly'); + t.equal(err, '', 'nothing reported to stderr'); + t.equal(out, expected, 'expected file list'); + }); +}); + +test('bin --require --list [expose]', function (t) { + t.plan(3); + + var cwd = process.cwd(); + process.chdir(path.resolve(__dirname, 'list')); + + var ps = spawn(process.execPath, [ + path.resolve(__dirname, '../bin/cmd.js'), + '--list', '--require', 'qq:zz' + ]); + var out = ''; + var err = ''; + ps.stdout.on('data', function (buf) { out += buf }); + ps.stderr.on('data', function (buf) { err += buf }); + + var expected = [ + path.resolve(__dirname, 'list/node_modules/qq/b.js'), + path.resolve(__dirname, 'list/node_modules/qq/node_modules/a/index.js'), + path.resolve(__dirname, 'list/node_modules/qq/node_modules/z/index.js') + ].join('\n') + '\n'; + + ps.on('exit', function (code) { + t.equal(code, 0, 'command exited cleanly'); + t.equal(err, '', 'nothing reported to stderr'); + t.equal(out, expected, 'expected file list'); + }); +}); + +test('bin --require --list [builtin]', function (t) { + t.plan(3); + + var cwd = process.cwd(); + process.chdir(path.resolve(__dirname, 'list')); + + var ps = spawn(process.execPath, [ + path.resolve(__dirname, '../bin/cmd.js'), + '--list', '--require', 'qq', '--require', 'events' + ]); + var out = ''; + var err = ''; + ps.stdout.on('data', function (buf) { out += buf }); + ps.stderr.on('data', function (buf) { err += buf }); + + var expected = [ + path.resolve(__dirname, '../node_modules/events/events.js'), + path.resolve(__dirname, 'list/node_modules/qq/b.js'), + path.resolve(__dirname, 'list/node_modules/qq/node_modules/a/index.js'), + path.resolve(__dirname, 'list/node_modules/qq/node_modules/z/index.js') + ].join('\n') + '\n'; + + ps.on('exit', function (code) { + t.equal(code, 0, 'command exited cleanly'); + t.equal(err, '', 'nothing reported to stderr'); + t.equal(out, expected, 'expected file list'); + }); +}); diff --git a/test/list/main.js b/test/list/main.js new file mode 100644 index 000000000..97ac3ede7 --- /dev/null +++ b/test/list/main.js @@ -0,0 +1 @@ +require('qq'); \ No newline at end of file diff --git a/test/list/node_modules/qq/b.js b/test/list/node_modules/qq/b.js new file mode 100644 index 000000000..015ad7e1f --- /dev/null +++ b/test/list/node_modules/qq/b.js @@ -0,0 +1 @@ +module.exports = require('a'); diff --git a/test/list/node_modules/qq/ignore_me.js b/test/list/node_modules/qq/ignore_me.js new file mode 100644 index 000000000..498930331 --- /dev/null +++ b/test/list/node_modules/qq/ignore_me.js @@ -0,0 +1 @@ +module.exports = 'IGNORE ME'; diff --git a/test/list/node_modules/qq/node_modules/a/index.js b/test/list/node_modules/qq/node_modules/a/index.js new file mode 100644 index 000000000..aecaca26f --- /dev/null +++ b/test/list/node_modules/qq/node_modules/a/index.js @@ -0,0 +1 @@ +module.exports = require('z'); diff --git a/test/list/node_modules/qq/node_modules/a/package.json b/test/list/node_modules/qq/node_modules/a/package.json new file mode 100644 index 000000000..ea2ec7205 --- /dev/null +++ b/test/list/node_modules/qq/node_modules/a/package.json @@ -0,0 +1,5 @@ +{ + "dependencies" : { + "z" : "*" + } +} diff --git a/test/list/node_modules/qq/node_modules/c/index.js b/test/list/node_modules/qq/node_modules/c/index.js new file mode 100644 index 000000000..b192ca258 --- /dev/null +++ b/test/list/node_modules/qq/node_modules/c/index.js @@ -0,0 +1 @@ +module.exports = 'ccc'; diff --git a/test/list/node_modules/qq/node_modules/c/package.json b/test/list/node_modules/qq/node_modules/c/package.json new file mode 100644 index 000000000..0d0cfd59d --- /dev/null +++ b/test/list/node_modules/qq/node_modules/c/package.json @@ -0,0 +1,5 @@ +{ + "dependencies" : { + "f" : "*" + } +} diff --git a/test/list/node_modules/qq/node_modules/f/index.js b/test/list/node_modules/qq/node_modules/f/index.js new file mode 100644 index 000000000..b5cf2e10b --- /dev/null +++ b/test/list/node_modules/qq/node_modules/f/index.js @@ -0,0 +1 @@ +module.exports = 'fff'; diff --git a/test/list/node_modules/qq/node_modules/z/index.js b/test/list/node_modules/qq/node_modules/z/index.js new file mode 100644 index 000000000..c27268eb5 --- /dev/null +++ b/test/list/node_modules/qq/node_modules/z/index.js @@ -0,0 +1 @@ +module.exports = 'zzz'; diff --git a/test/list/node_modules/qq/package.json b/test/list/node_modules/qq/package.json new file mode 100644 index 000000000..d693ab598 --- /dev/null +++ b/test/list/node_modules/qq/package.json @@ -0,0 +1,3 @@ +{ + "main" : "./b.js" +}