UNPKG

6.07 kBJavaScriptView Raw
1/* jshint quotmark: false */
2'use strict';
3
4var assert = require('chai').assert,
5 UTIL = require('util'),
6 BEM = require('..'),
7 PATH = BEM.require('./path'),
8 createLevel = BEM.createLevel;
9
10/**
11 * Mocha BDD interface.
12 *
13 * @name describe @function
14 * @name it @function
15 * @name before @function
16 * @name after @function
17 * @name beforeEach @function
18 * @name afterEach @function
19 */
20
21describe('level', function() {
22
23 describe("Level('data/level-simple') /* simple level */", function() {
24
25 var level = createLevel(absolute('data/level-simple'));
26
27 describe(".getByObj()", function() {
28
29 it("block, elem, mod, val", function() {
30 var item = {
31 block: 'block',
32 elem: 'elem',
33 mod: 'mod',
34 val: 'val'
35 };
36 assert.equal(level.getByObj(item), PATH.resolve(level.dir, 'block__elem_mod_val'));
37 });
38
39 });
40
41 describe(".getRelByObj()", function() {
42
43 it("block, elem, mod, val", function() {
44 var item = {
45 block: 'block',
46 elem: 'elem',
47 mod: 'mod',
48 val: 'val'
49 };
50 assert.equal(level.getRelByObj(item), 'block__elem_mod_val');
51 });
52
53 });
54
55 describe(".matchAny()", function() {
56
57 var abs = PATH.resolve(level.dir, 'block.css');
58 it(abs, function() {
59 assert.deepEqual(level.matchAny(abs), {
60 block: 'block',
61 suffix: '.css',
62 tech: 'css'
63 });
64 });
65
66 it('block.css', function() {
67 assert.deepEqual(level.matchAny('block.css'), {
68 block: 'block',
69 suffix: '.css',
70 tech: 'css'
71 });
72 });
73
74 it('block_mod.css', function() {
75 assert.deepEqual(level.matchAny('block_mod.css'), {
76 block: 'block',
77 mod: 'mod',
78 suffix: '.css',
79 tech: 'css'
80 });
81 });
82
83 it('block_mod_val.css', function() {
84 assert.deepEqual(level.matchAny('block_mod_val.css'), {
85 block: 'block',
86 mod: 'mod',
87 val: 'val',
88 suffix: '.css',
89 tech: 'css'
90 });
91 });
92
93 it('block__elem.css', function() {
94 assert.deepEqual(level.matchAny('block__elem.css'), {
95 block: 'block',
96 elem: 'elem',
97 suffix: '.css',
98 tech: 'css'
99 });
100 });
101
102 it('block__elem_mod.css', function() {
103 assert.deepEqual(level.matchAny('block__elem_mod.css'), {
104 block: 'block',
105 elem: 'elem',
106 mod: 'mod',
107 suffix: '.css',
108 tech: 'css'
109 });
110 });
111
112 it('block__elem_mod_val.css', function() {
113 assert.deepEqual(level.matchAny('block__elem_mod_val.css'), {
114 block: 'block',
115 elem: 'elem',
116 mod: 'mod',
117 val: 'val',
118 suffix: '.css',
119 tech: 'css'
120 });
121 });
122
123 it('block__elem_mod_val.custom', function() {
124 assert.deepEqual(level.matchAny('block__elem_mod_val.custom'), {
125 block: 'block',
126 elem: 'elem',
127 mod: 'mod',
128 val: 'val',
129 suffix: '.custom',
130 tech: undefined
131 });
132 });
133
134 });
135
136 describe(".getDeclByIntrospection()", function() {
137 it("returns correct introspection", function() {
138 assert.deepEqual(level.getDeclByIntrospection(), [
139
140 {
141 name: 'first-block',
142 elems: [ {
143 name: 'elem1',
144 mods: [ {
145 name: 'mod2',
146 techs: [ { name: 'css' } ],
147 vals: [ {
148 name: '3',
149 techs: [ { name: 'js' } ]
150 } ]
151 } ]
152 } ]
153 }
154
155 ]);
156 });
157 });
158
159 describe(".match-*()", function() {
160
161 level.matchOrder().forEach(function(matcher) {
162
163 if (matcher === 'elem-all' || matcher === 'block-all') return;
164
165 var args = matcher.split('-'),
166 match;
167
168 // test simple match
169 if(args[0] !== 'block') args.unshift('block');
170 match = level.match(matcher, level.getRel(matcher, args));
171
172 it(UTIL.format("matcher '%s' complies to getter", matcher), testMatch(match));
173
174 // generate test function for matches and vars to check equality to
175 function testMatch(match, vars) {
176
177 vars = vars || {};
178
179 return function() {
180 Object.keys(match).forEach(function(key) {
181 assert.isString(match[key]);
182 if(key === 'suffix') {
183 assert.equal(match[key], '');
184 return;
185 }
186 assert.equal(match[key], vars[key] || key);
187 });
188 };
189
190 }
191
192 });
193
194 });
195
196 });
197
198});
199
200function absolute(path) {
201 return PATH.resolve(__dirname, path);
202}