| var parser = require('../'); |
| var test = require('tap').test; |
| var fs = require('fs'); |
| var path = require('path'); |
| var xtend = require('xtend'); |
| |
| var files = { |
| abc: path.join(__dirname, '/expose/lib/abc.js'), |
| xyz: path.join(__dirname, '/expose/lib/xyz.js'), |
| foo: path.join(__dirname, '/expose/foo.js'), |
| bar: path.join(__dirname, '/expose/bar.js'), |
| main: path.join(__dirname, '/expose/main.js') |
| }; |
| |
| var sources = Object.keys(files).reduce(function (acc, file) { |
| acc[file] = fs.readFileSync(files[file], 'utf8'); |
| return acc; |
| }, {}); |
| |
| var cache = {}; |
| cache[files.abc] = { |
| source: sources.abc, |
| deps: {} |
| }; |
| cache[files.xyz] = { |
| source: sources.xyz, |
| deps: {'../foo': files.foo} |
| }; |
| cache[files.foo] = { |
| source: sources.foo, |
| deps: {'./lib/abc': files.abc} |
| }; |
| cache[files.bar] = { |
| source: sources.bar, |
| deps: {xyz: files.xyz} |
| }; |
| cache[files.main] = { |
| source: sources.main, |
| deps: { |
| abc: files.abc, |
| xyz: files.xyz, |
| './bar': files.bar |
| } |
| }; |
| |
| test('preserves expose and entry with partial cache', function(t) { |
| t.plan(1); |
| |
| var partialCache = xtend(cache); |
| delete partialCache[files.bar]; |
| |
| var p = parser({ cache: partialCache }); |
| p.write({ id: 'abc', file: files.abc, expose: 'abc' }); |
| p.write({ id: 'xyz', file: files.xyz, expose: 'xyz' }); |
| p.end({ id: 'main', file: files.main, entry: true }); |
| |
| var rows = []; |
| p.on('data', function (row) { rows.push(row); }); |
| p.on('end', function () { |
| t.same(rows.sort(cmp), [ |
| { |
| id: files.bar, |
| file: files.bar, |
| source: sources.bar, |
| deps: {xyz: files.xyz} |
| }, |
| { |
| file: files.foo, |
| id: files.foo, |
| source: sources.foo, |
| deps: {'./lib/abc': files.abc} |
| }, |
| { |
| id: 'abc', |
| file: files.abc, |
| source: sources.abc, |
| deps: {}, |
| entry: true, |
| expose: 'abc' |
| }, |
| { |
| id: 'main', |
| file: files.main, |
| source: sources.main, |
| deps: { |
| './bar': files.bar, |
| abc: files.abc, |
| xyz: files.xyz |
| }, |
| entry: true |
| }, |
| { |
| id: 'xyz', |
| file: files.xyz, |
| source: sources.xyz, |
| deps: {'../foo': files.foo}, |
| entry: true, |
| expose: 'xyz' |
| } |
| ].sort(cmp)); |
| }); |
| }); |
| |
| function cmp (a, b) { return a.id < b.id ? -1 : 1 } |