1 |
|
2 | 'use strict';
|
3 |
|
4 | var assert = require('chai').assert,
|
5 | UTIL = require('util'),
|
6 | BEM = require('..'),
|
7 | PATH = BEM.require('./path'),
|
8 | createLevel = BEM.createLevel;
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
17 |
|
18 |
|
19 |
|
20 |
|
21 | describe('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 |
|
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 |
|
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 |
|
200 | function absolute(path) {
|
201 | return PATH.resolve(__dirname, path);
|
202 | }
|