示例#1
0
            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' }
                        ]);
                    });
            });
示例#2
0
        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' }
                    ]);
                });
        });
示例#3
0
function getLevels(fsScheme) {
    var levels = Object.keys(fsScheme),
        bundle;

    fsScheme['bundle'] = {};
    mockFs(fsScheme);

    bundle = new TestNode('bundle');

    return bundle.runTech(Tech, { levels: levels });
}
示例#4
0
        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);
                });
        });
示例#5
0
        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' }]);
                });
        });
示例#6
0
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
            };
        });
}