diff --git a/test/cli/external-modules/_config.js b/test/cli/external-modules/_config.js new file mode 100644 index 0000000..8117a61 --- /dev/null +++ b/test/cli/external-modules/_config.js @@ -0,0 +1,5 @@ +module.exports = { + description: 'allows external modules to be specified with --external=foo,bar,baz', + command: 'rollup main.js --format cjs --external path,util', + execute: true +}; diff --git a/test/cli/external-modules/main.js b/test/cli/external-modules/main.js new file mode 100644 index 0000000..03f1b74 --- /dev/null +++ b/test/cli/external-modules/main.js @@ -0,0 +1,5 @@ +import { relative } from 'path'; +import { format } from 'util'; + +assert.equal( format( 'it %s', 'works' ), 'it works' ); +assert.equal( relative( 'a/b/c', 'a/c/b' ), '../../c/b' ); diff --git a/test/test.js b/test/test.js index d6d9f8c..7d53869 100644 --- a/test/test.js +++ b/test/test.js @@ -4,6 +4,7 @@ require( 'console-group' ).install(); var path = require( 'path' ); var sander = require( 'sander' ); var assert = require( 'assert' ); +var exec = require( 'child_process' ).exec; var babel = require( 'babel-core' ); var sequence = require( './utils/promiseSequence' ); var rollup = require( '../dist/rollup' ); @@ -11,6 +12,7 @@ var rollup = require( '../dist/rollup' ); var FUNCTION = path.resolve( __dirname, 'function' ); var FORM = path.resolve( __dirname, 'form' ); var SOURCEMAPS = path.resolve( __dirname, 'sourcemaps' ); +var CLI = path.resolve( __dirname, 'cli' ); var PROFILES = [ { format: 'amd' }, @@ -221,4 +223,64 @@ describe( 'rollup', function () { }); }); }); + + describe( 'cli', function () { + sander.readdirSync( CLI ).sort().forEach( function ( dir ) { + if ( dir[0] === '.' ) return; // .DS_Store... + + describe( dir, function () { + var config = require( CLI + '/' + dir + '/_config' ); + + ( config.skip ? it.skip : config.solo ? it.only : it )( dir, function ( done ) { + process.chdir( path.resolve( CLI, dir ) ); + + exec( config.command, function ( err, code, stderr ) { + if ( err ) return done( err ); + + if ( stderr ) console.error( stderr ); + + var unintendedError; + + if ( config.execute ) { + try { + if ( config.babel ) { + code = babel.transform( code, { + whitelist: config.babel + }).code; + } + + var fn = new Function( 'require', 'module', 'exports', 'assert', code ); + var module = { + exports: {} + }; + fn( require, module, module.exports, assert ); + + if ( config.error ) { + unintendedError = new Error( 'Expected an error while executing output' ); + } + + if ( config.exports ) { + config.exports( module.exports ); + } + } catch ( err ) { + if ( config.error ) { + config.error( err ); + } else { + unintendedError = err; + } + } + + if ( config.show || unintendedError ) { + console.log( code + '\n\n\n' ); + } + + if ( config.solo ) console.groupEnd(); + + unintendedError ? done( unintendedError ) : done(); + } + }); + }); + }); + }); + }); });