it('must add should dep of block at deps format', function () { mockFs({ blocks: { block: { 'block.deps.js': stringifyDepsJs({ shouldDeps: [{ block: 'other-block' }] }) } }, bundle: {} }); var bundle = new TestNode('bundle'); bundle.provideTechData('?.deps.js', { deps: [{ block: 'block' }] }); return bundle.runTech(levelsTech, { levels: ['blocks'] }) .then(function (levels) { bundle.provideTechData('?.levels', levels); return bundle.runTechAndRequire(depsTech, { bemdeclFile: '?.deps.js' }); }) .spread(function (target) { target.deps.must.eql([ { block: 'block' }, { block: 'other-block' } ]); }); });
it('must provide result from cache', function () { var bemdecl = [{ name: 'block' }], deps = [{ block: 'block' }, { block: 'other-block' }]; mockFs({ blocks: {}, bundle: { 'bundle.bemdecl.js': 'exports.blocks = ' + JSON.stringify(bemdecl) + ';', 'bundle.deps.js': 'exports.deps = ' + JSON.stringify(deps) + ';' } }); var bundle = new TestNode('bundle'), cache = bundle.getNodeCache('bundle.deps.js'); cache.cacheFileInfo('decl-file', path.resolve('bundle/bundle.bemdecl.js')); cache.cacheFileInfo('deps-file', path.resolve('bundle/bundle.deps.js')); cache.cacheFileList('deps-file-list', []); return bundle.runTech(levelsTech, { levels: ['blocks'] }) .then(function (levels) { bundle.provideTechData('?.levels', levels); return bundle.runTechAndRequire(depsTech); }) .spread(function (target) { target.deps.must.eql([ { block: 'block' }, { block: 'other-block' } ]); }); });
function getLevels(fsScheme) { var levels = Object.keys(fsScheme), bundle; fsScheme['bundle'] = {}; mockFs(fsScheme); bundle = new TestNode('bundle'); return bundle.runTech(Tech, { levels: levels }); }
it('must handle full paths', function () { mockFs({ blocks: { block: { 'block.ext': '' } }, bundle: {} }); var bundle = new TestNode('bundle'), levelDirname = path.resolve('blocks'); return bundle.runTech(Tech, { levels: [levelDirname] }) .then(function (levels) { var files = getEntityFiles(levels, 'block', 'files'); files[0].name.must.be('block.ext'); files.must.have.length(1); }); });
it('must provide result from cache', function () { mockFs({ 'bundle-1': { 'bundle-1.deps.js': 'exports.deps = ' + JSON.stringify([{ block: 'block' }]) + ';' }, 'bundle-2': { 'bundle-2.deps.js': 'exports.deps = ' + JSON.stringify([{ block: 'other-block' }]) + ';' } }); var bundle = new TestNode('bundle-2'), cache = bundle.getNodeCache('bundle-2.deps.js'); cache.cacheFileInfo('deps-source-file', path.resolve('bundle-1/bundle-1.deps.js')); cache.cacheFileInfo('deps-file', path.resolve('bundle-2/bundle-2.deps.js')); return bundle.runTech(Tech, { node: 'bundle-1' }) .then(function (target) { target.deps.must.eql([{ block: 'other-block' }]); }); });
function getResults(fsScheme, bemdecl, techOpts) { var levels = Object.keys(fsScheme), fsBundle, dataBundle; fsScheme['fs-bundle'] = { 'fs-bundle.bemdecl.js': 'exports.blocks = ' + JSON.stringify(bemdecl) + ';' }; fsScheme['data-bundle'] = {}; mockFs(fsScheme); fsBundle = new TestNode('fs-bundle'); dataBundle = new TestNode('data-bundle'); dataBundle.provideTechData('?.bemdecl.js', { blocks: bemdecl }); return fsBundle.runTech(levelsTech, { levels: levels }) .then(function (levels) { fsBundle.provideTechData('?.levels', levels); dataBundle.provideTechData('?.levels', levels); return vow.all([ fsBundle.runTechAndRequire(depsTech, techOpts), fsBundle.runTechAndGetResults(depsTech, techOpts), dataBundle.runTechAndRequire(depsTech, techOpts), dataBundle.runTechAndGetResults(depsTech, techOpts) ]); }) .spread(function (res1, res2, res3, res4) { return { deps: [ res1[0].deps, res2['fs-bundle.deps.js'].deps, res3[0].deps, res4['data-bundle.deps.js'].deps ], messages: dataBundle.getLogger()._messages }; }); }