From 84d408f9adcd30d265b01c1ec2840af8d49fd73c Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Tue, 7 Jun 2016 17:53:43 -0400 Subject: [PATCH] make tests more robust (fs was getting out of sync) --- src/Bundle.js | 20 ++-- .../not-transform-twice/expected.js | 5 - test/incremental/not-transform-twice/foo.js | 3 - test/incremental/not-transform-twice/main.js | 3 - .../incremental/transform-changed/expected.js | 5 - .../transform-changed/foo-changed.js | 3 - test/incremental/transform-changed/foo.js | 3 - test/incremental/transform-changed/main.js | 3 - test/test.js | 111 +++++++++--------- 9 files changed, 66 insertions(+), 90 deletions(-) delete mode 100644 test/incremental/not-transform-twice/expected.js delete mode 100644 test/incremental/not-transform-twice/foo.js delete mode 100644 test/incremental/not-transform-twice/main.js delete mode 100644 test/incremental/transform-changed/expected.js delete mode 100644 test/incremental/transform-changed/foo-changed.js delete mode 100644 test/incremental/transform-changed/foo.js delete mode 100644 test/incremental/transform-changed/main.js diff --git a/src/Bundle.js b/src/Bundle.js index 1d9f8d3..f16d105 100644 --- a/src/Bundle.js +++ b/src/Bundle.js @@ -19,11 +19,11 @@ import { dirname, isRelative, isAbsolute, relative, resolve } from './utils/path export default class Bundle { constructor ( options ) { - if ( typeof options.cache === 'object' ) { - this.cachedModules = options.cache.modules.reduce((modules, module) => { - modules[module.id] = module; - return modules; - }, {}); + this.cachedModules = new Map(); + if ( options.cache ) { + options.cache.modules.forEach( module => { + this.cachedModules.set( module.id, module ); + }); } this.plugins = ensureArray( options.plugins ); @@ -195,13 +195,11 @@ export default class Bundle { ast: null }; } - if (this.cachedModules && this.cachedModules[id] && this.cachedModules[id].originalCode === source.code) { - const { code, originalCode } = this.cachedModules[id]; - return { - code, - originalCode - }; + + if ( this.cachedModules.has( id ) && this.cachedModules.get( id ).originalCode === source.code ) { + return this.cachedModules.get( id ); } + return transform( source, id, this.transformers ); }) .then( source => { diff --git a/test/incremental/not-transform-twice/expected.js b/test/incremental/not-transform-twice/expected.js deleted file mode 100644 index 7063df5..0000000 --- a/test/incremental/not-transform-twice/expected.js +++ /dev/null @@ -1,5 +0,0 @@ -function foo () { - console.log('foo'); -}; - -foo(); \ No newline at end of file diff --git a/test/incremental/not-transform-twice/foo.js b/test/incremental/not-transform-twice/foo.js deleted file mode 100644 index 3bdfb02..0000000 --- a/test/incremental/not-transform-twice/foo.js +++ /dev/null @@ -1,3 +0,0 @@ -export default function () { - console.log('foo'); -}; diff --git a/test/incremental/not-transform-twice/main.js b/test/incremental/not-transform-twice/main.js deleted file mode 100644 index e1fb5c4..0000000 --- a/test/incremental/not-transform-twice/main.js +++ /dev/null @@ -1,3 +0,0 @@ -import foo from './foo.js'; - -foo(); diff --git a/test/incremental/transform-changed/expected.js b/test/incremental/transform-changed/expected.js deleted file mode 100644 index e1c10a1..0000000 --- a/test/incremental/transform-changed/expected.js +++ /dev/null @@ -1,5 +0,0 @@ -function foo () { - console.log('foo-changed'); -}; - -foo(); \ No newline at end of file diff --git a/test/incremental/transform-changed/foo-changed.js b/test/incremental/transform-changed/foo-changed.js deleted file mode 100644 index b96789c..0000000 --- a/test/incremental/transform-changed/foo-changed.js +++ /dev/null @@ -1,3 +0,0 @@ -export default function () { - console.log('foo-changed'); -}; diff --git a/test/incremental/transform-changed/foo.js b/test/incremental/transform-changed/foo.js deleted file mode 100644 index 435568b..0000000 --- a/test/incremental/transform-changed/foo.js +++ /dev/null @@ -1,3 +0,0 @@ -export default function () { - console.log('foo'); -}; \ No newline at end of file diff --git a/test/incremental/transform-changed/main.js b/test/incremental/transform-changed/main.js deleted file mode 100644 index e1fb5c4..0000000 --- a/test/incremental/transform-changed/main.js +++ /dev/null @@ -1,3 +0,0 @@ -import foo from './foo.js'; - -foo(); diff --git a/test/test.js b/test/test.js index 1191267..d4cebb4 100644 --- a/test/test.js +++ b/test/test.js @@ -448,76 +448,79 @@ describe( 'rollup', function () { }); describe.only('incremental', function () { - it('does not transforms in the second time', function () { - var calls = 0; - var counter = { - transform: function ( code ) { - calls += 1; - return code; - } + function executeBundle ( bundle ) { + const cjs = bundle.generate({ format: 'cjs' }); + const m = new Function( 'module', 'exports', cjs.code ); + + let module = { exports: {} }; + m( module, module.exports ); + + return module.exports; + } + + var calls; + var modules; + + var plugin = { + resolveId: id => id, + + load: id => { + return modules[ id ]; + }, + + transform: function ( code ) { + calls += 1; + return code; + } + }; + + beforeEach( () => { + calls = 0; + + modules = { + entry: `import foo from 'foo'; export default foo;`, + foo: `export default 42` }; + }); + + it('does not transforms in the second time', function () { return rollup.rollup({ - entry: path.join( INCREMENTAL, 'not-transform-twice', 'main.js' ), - plugins: [counter] - }).then( function ( bundle ) { + entry: 'entry', + plugins: [ plugin ] + }).then( bundle => { assert.equal( calls, 2 ); return rollup.rollup({ - entry: path.join( INCREMENTAL, 'not-transform-twice', 'main.js' ), - plugins: [counter], + entry: 'entry', + plugins: [ plugin ], cache: bundle }); - }).then( function ( bundle ) { + }).then( bundle => { assert.equal( calls, 2 ); - var result = bundle.generate({ - format: 'es6' - }); - return sander.readFile( path.join( INCREMENTAL, 'not-transform-twice', 'expected.js' ) ).then( function (expected) { - assert.equal( normaliseOutput( expected ), result.code ); - }); + assert.equal( executeBundle( bundle ), 42 ); }); }); it('transforms modified sources', function () { - var calls = 0; - var counter = { - transform: function ( code ) { - calls += 1; - return code; - } - }; - var bundle; - var foo; - var changed; - var expected; - return Promise.all([ - rollup.rollup({ - entry: path.join( INCREMENTAL, 'transform-changed', 'main.js' ), - plugins: [counter] - }), - sander.readFile( path.join( INCREMENTAL, 'transform-changed', 'foo.js' ) ), - sander.readFile( path.join( INCREMENTAL, 'transform-changed', 'foo-changed.js' ) ), - sander.readFile( path.join( INCREMENTAL, 'transform-changed', 'expected.js' ) ) - ]).then( function ( [_bundle, _foo, _changed, _expected] ) { - bundle = _bundle; - foo = normaliseOutput( _foo ); - changed = normaliseOutput( _changed ); - expected = normaliseOutput( _expected ); + let cache; + + return rollup.rollup({ + entry: 'entry', + plugins: [ plugin ] + }).then( bundle => { assert.equal( calls, 2 ); + assert.equal( executeBundle( bundle ), 42 ); - return sander.writeFile( INCREMENTAL, 'transform-changed', 'foo.js', changed ); - }).then(function () { + modules.foo = `export default 43`; + cache = bundle; + }).then( () => { return rollup.rollup({ - entry: path.join( INCREMENTAL, 'transform-changed', 'main.js' ), - plugins: [counter], - cache: bundle + entry: 'entry', + plugins: [ plugin ], + cache }); - }).then( function ( bundle ) { + }).then( bundle => { assert.equal( calls, 3 ); - var result = bundle.generate({ - format: 'es6' - }); - assert.equal(expected, result.code); - return sander.writeFile( INCREMENTAL, 'transform-changed', 'foo.js', foo ); + assert.equal( executeBundle( bundle ), 43 ); }); }); });