UNPKG

bem

Version:
245 lines (210 loc) 8.16 kB
var assert = require('chai').assert, UTIL = require('util'), BEM = require('..'), PATH = BEM.require('./path'), U = require('./util'), createLevel = BEM.createLevel; /** * Mocha BDD interface. * * @name describe @function * @name it @function * @name before @function * @name after @function * @name beforeEach @function * @name afterEach @function */ describe('level', function() { describe("Level('data/level1') /* generic level */", function() { var level = createLevel(absolute('data/level1')); describe(".getDefaultTechs()", function() { it("returns empty array", function() { var defs = level.getDefaultTechs(); assert.isArray(defs); assert.lengthOf(defs, 0); }); }); /* TODO: think if these tests still actual? it(".resolveTechPath('../../techs/test.js') resolves", function() { assert.equal(level.resolveTechPath('../../techs/test.js'), absolute('./data/techs/test.js')); }); it(".resolveTechPath('/path/to/techs/test.js') resolves", function() { var path = absolute('./data/techs/test.js'); assert.equal(level.resolveTechPath(path), path); }); it(".resolveTechPath('data/techs/test.js') resolves", function() { var path = 'data/techs/test.js'; assert.equal(level.resolveTechPath(absolute(path)), path); }); */ describe(".getByObj()", function() { it("block, elem, mod, val", function() { var item = { block: 'block', elem: 'elem', mod: 'mod', val: 'val' }; assert.equal(level.getByObj(item), PATH.resolve(level.dir, 'block/__elem/_mod/block__elem_mod_val')); }); }); describe(".getRelByObj()", function() { it("block, elem, mod, val", function() { var item = { block: 'block', elem: 'elem', mod: 'mod', val: 'val' }; assert.equal(level.getRelByObj(item), 'block/__elem/_mod/block__elem_mod_val'); }); }); describe(".getPath()", function() { it("block/block, css", function() { assert.equal(level.getPath('block/block', 'css'), 'block/block.css'); }); }); describe(".getPathByObj()", function() { it("block: block", function() { assert.equal(level.getPathByObj({ block: 'block' }, 'css'), PATH.resolve(level.dir, 'block/block.css')); }); }); describe(".getRelPathByObj()", function() { it("block: block", function() { assert.equal(level.getRelPathByObj({ block: 'block' }, 'css'), 'block/block.css'); }); }); describe(".matchAny()", function() { var abs = PATH.resolve(level.dir, 'block/block.css'); it(abs, function() { assert.deepEqual(level.matchAny(abs), { block: 'block', suffix: '.css', tech: 'css' }); }); it('block/block.css', function() { assert.deepEqual(level.matchAny('block/block.css'), { block: 'block', suffix: '.css', tech: 'css' }); }); it('block/_mod/block_mod.css', function() { assert.deepEqual(level.matchAny('block/_mod/block_mod.css'), { block: 'block', mod: 'mod', suffix: '.css', tech: 'css' }); }); it('block/_mod/block_mod_val.css', function() { assert.deepEqual(level.matchAny('block/_mod/block_mod_val.css'), { block: 'block', mod: 'mod', val: 'val', suffix: '.css', tech: 'css' }); }); it('block/__elem/block__elem.css', function() { assert.deepEqual(level.matchAny('block/__elem/block__elem.css'), { block: 'block', elem: 'elem', suffix: '.css', tech: 'css' }); }); it('block/__elem/_mod/block__elem_mod.css', function() { assert.deepEqual(level.matchAny('block/__elem/_mod/block__elem_mod.css'), { block: 'block', elem: 'elem', mod: 'mod', suffix: '.css', tech: 'css' }); }); it('block/__elem/_mod/block__elem_mod_val.css', function() { assert.deepEqual(level.matchAny('block/__elem/_mod/block__elem_mod_val.css'), { block: 'block', elem: 'elem', mod: 'mod', val: 'val', suffix: '.css', tech: 'css' }); }); it('block/__elem/_mod/block__elem_mod_val.custom', function() { assert.deepEqual(level.matchAny('block/__elem/_mod/block__elem_mod_val.custom'), { block: 'block', elem: 'elem', mod: 'mod', val: 'val', suffix: '.custom', tech: undefined }); }); }); describe(".getDeclByIntrospection()", function() { it("returns correct introspection", function() { assert.deepEqual(level.getDeclByIntrospection(), [ { name: 'first-block', elems: [ { name: 'elem1', mods: [ { name: 'mod2', techs: [ { name: 'css' } ], vals: [ { name: '3', techs: [ { name: 'js' } ] } ] } ] } ] } ]); }); }); describe(".createIntrospector() default introspector call", function() { it("returns correct introspection", function() { assert.deepEqual(level.createIntrospector()(), [ { block: 'first-block', elem: 'elem1', mod: 'mod2', suffix: '.css', tech: 'css' }, { block: 'first-block', elem: 'elem1', mod: 'mod2', val: '3', suffix: '.js', tech: 'js' } ]); }); }); describe(".match-*()", function() { level.matchOrder().forEach(function(matcher) { var args = matcher.split('-'), match; if(args[0] != 'block') args.unshift('block'); match = level.match(matcher, level.getRel(matcher, args)); it(UTIL.format("matcher '%s' complies to getter", matcher), function() { Object.keys(match).forEach(function(key) { assert.isString(match[key]); if(key == 'suffix') { assert.equal(match[key], ''); return; } assert.equal(match[key], key); }); }); }); }); }); }); function absolute(path) { return PATH.resolve(__dirname, path); }