Skip to content

Commit

Permalink
Add to deps mod with true val if any val (except false) given
Browse files Browse the repository at this point in the history
  • Loading branch information
skad0 committed Aug 16, 2016
1 parent 7af137b commit 25623ce
Show file tree
Hide file tree
Showing 9 changed files with 53 additions and 16 deletions.
8 changes: 8 additions & 0 deletions lib/normalize2.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
'use strict';

const clone = require('clone');

module.exports = function (decl) {
const res = [];
const hash = {};
Expand Down Expand Up @@ -109,6 +111,7 @@ module.exports = function (decl) {
}
}

// TODO: think about this case for adding true val
if (isNotActual(mod) && val) {
const item = {};
item.block = block;
Expand Down Expand Up @@ -195,6 +198,11 @@ module.exports = function (decl) {
item.modVal = modVal;

add(item, tech);

// if given any value
if (typeof modVal !== 'boolean') {
add(Object.assign(clone(item), { modVal: true }), tech);
}
}
}
}
Expand Down
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,8 @@
"lib/**"
],
"dependencies": {
"bem-naming": "1.0.1"
"bem-naming": "1.0.1",
"clone": "^1.0.2"
},
"devDependencies": {
"ava": "^0.16.0",
Expand Down
6 changes: 4 additions & 2 deletions test/normalize2/block-mod.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ test('should support mod', t => {
}

t.deepEqual(normalize(decl), [
{ entity: { block: 'block', modName: 'm1', modVal: 'v1' }, tech: undefined }
{ entity: { block: 'block', modName: 'm1', modVal: 'v1' }, tech: undefined },
{ entity: { block: 'block', modName: 'm1', modVal: true }, tech: undefined }
]);
});

Expand All @@ -24,6 +25,7 @@ test('should support mod with tech', t => {
}

t.deepEqual(normalize(decl), [
{ entity: { block: 'block', modName: 'm1', modVal: 'v1' }, tech: 'js' }
{ entity: { block: 'block', modName: 'm1', modVal: 'v1' }, tech: 'js' },
{ entity: { block: 'block', modName: 'm1', modVal: true }, tech: 'js' }
]);
});
9 changes: 7 additions & 2 deletions test/normalize2/block-mods.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ test('sould support mods', t => {
t.deepEqual(normalize(decl), [
{ entity: { block: 'block' }, tech: undefined },
{ entity: { block: 'block', modName: 'm1', modVal: 'v1' }, tech: undefined },
{ entity: { block: 'block', modName: 'm1', modVal: true }, tech: undefined }
]);
});

Expand All @@ -28,7 +29,8 @@ test('should pass mods to elem', t => {

t.deepEqual(normalize(decl), [
{ entity: { block: 'block', elem: 'elem' }, tech: undefined },
{ entity: { block: 'block', modName: 'm1', modVal: 'v1' }, tech: undefined }
{ entity: { block: 'block', modName: 'm1', modVal: 'v1' }, tech: undefined },
{ entity: { block: 'block', modName: 'm1', modVal: true }, tech: undefined }
]);
});

Expand All @@ -44,7 +46,9 @@ test('should support several mods', t => {
t.deepEqual(normalize(decl), [
{ entity: { block: 'block' }, tech: undefined },
{ entity: { block: 'block', modName: 'm1', modVal: 'v1' }, tech: undefined },
{ entity: { block: 'block', modName: 'm2', modVal: 'v2' }, tech: undefined }
{ entity: { block: 'block', modName: 'm1', modVal: true }, tech: undefined },
{ entity: { block: 'block', modName: 'm2', modVal: 'v2' }, tech: undefined },
{ entity: { block: 'block', modName: 'm2', modVal: true }, tech: undefined }
]);
});

Expand All @@ -59,6 +63,7 @@ test('should support array of mod values', t => {
t.deepEqual(normalize(decl), [
{ entity: { block: 'block' }, tech: undefined },
{ entity: { block: 'block', modName: 'm1', modVal: 'v1' }, tech: undefined },
{ entity: { block: 'block', modName: 'm1', modVal: true }, tech: undefined },
{ entity: { block: 'block', modName: 'm1', modVal: 'v2' }, tech: undefined }
]);
});
8 changes: 6 additions & 2 deletions test/normalize2/elem-mod.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,10 @@ test('should support elem array mod', t => {
t.deepEqual(normalize(decl), [
{ entity: { block: 'block', elem: 'elem1' }, tech: undefined },
{ entity: { block: 'block', elem: 'elem1', modName: 'm1', modVal: 'v1' }, tech: undefined },
{ entity: { block: 'block', elem: 'elem1', modName: 'm1', modVal: true }, tech: undefined },
{ entity: { block: 'block', elem: 'elem2' }, tech: undefined },
{ entity: { block: 'block', elem: 'elem2', modName: 'm1', modVal: 'v1' }, tech: undefined }
{ entity: { block: 'block', elem: 'elem2', modName: 'm1', modVal: 'v1' }, tech: undefined },
{ entity: { block: 'block', elem: 'elem2', modName: 'm1', modVal: true }, tech: undefined }
]);
});

Expand All @@ -50,7 +52,9 @@ test('should support elem of elem as array with mod', t => {
t.deepEqual(normalize(decl), [
{ entity: { block: 'block', elem: 'elem1' }, tech: undefined },
{ entity: { block: 'block', elem: 'elem1', modName: 'm1', modVal: 'v1' }, tech: undefined },
{ entity: { block: 'block', elem: 'elem1', modName: 'm1', modVal: true }, tech: undefined },
{ entity: { block: 'block', elem: 'elem2' }, tech: undefined },
{ entity: { block: 'block', elem: 'elem2', modName: 'm1', modVal: 'v1' }, tech: undefined }
{ entity: { block: 'block', elem: 'elem2', modName: 'm1', modVal: 'v1' }, tech: undefined },
{ entity: { block: 'block', elem: 'elem2', modName: 'm1', modVal: true }, tech: undefined }
]);
});
7 changes: 5 additions & 2 deletions test/normalize2/elem-mods.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@ test('should support elem as object and mod', t => {

t.deepEqual(normalize(decl), [
{ entity: { block: 'block', elem: 'elem' }, tech: undefined },
{ entity: { block: 'block', elem: 'elem', modName: 'mod1', modVal: 'v1' }, tech: undefined }
{ entity: { block: 'block', elem: 'elem', modName: 'mod1', modVal: 'v1' }, tech: undefined },
{ entity: { block: 'block', elem: 'elem', modName: 'mod1', modVal: true }, tech: undefined }
]);
});
test('should support elem of elem as array mods', t => {
Expand All @@ -35,7 +36,9 @@ test('should support elem of elem as array mods', t => {
t.deepEqual(normalize(decl), [
{ entity: { block: 'block', elem: 'elem1' }, tech: undefined },
{ entity: { block: 'block', elem: 'elem1', modName: 'm1', modVal: 'v1' }, tech: undefined },
{ entity: { block: 'block', elem: 'elem1', modName: 'm1', modVal: true }, tech: undefined },
{ entity: { block: 'block', elem: 'elem2' }, tech: undefined },
{ entity: { block: 'block', elem: 'elem2', modName: 'm1', modVal: 'v1' }, tech: undefined }
{ entity: { block: 'block', elem: 'elem2', modName: 'm1', modVal: 'v1' }, tech: undefined },
{ entity: { block: 'block', elem: 'elem2', modName: 'm1', modVal: true }, tech: undefined }
]);
});
12 changes: 9 additions & 3 deletions test/normalize2/elems-mods.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@ test('should support elem as object and mod', t => {
t.deepEqual(normalize(decl), [
{ entity: { block: 'block' }, tech: undefined },
{ entity: { block: 'block', elem: 'elem' }, tech: undefined },
{ entity: { block: 'block', elem: 'elem', modName: 'mod1', modVal: 'v1' }, tech: undefined }
{ entity: { block: 'block', elem: 'elem', modName: 'mod1', modVal: 'v1' }, tech: undefined },
{ entity: { block: 'block', elem: 'elem', modName: 'mod1', modVal: true }, tech: undefined }
]);
});

Expand All @@ -38,8 +39,10 @@ test('should support elem of elem as array mods', t => {
{ entity: { block: 'block' }, tech: undefined },
{ entity: { block: 'block', elem: 'elem1' }, tech: undefined },
{ entity: { block: 'block', elem: 'elem1', modName: 'm1', modVal: 'v1' }, tech: undefined },
{ entity: { block: 'block', elem: 'elem1', modName: 'm1', modVal: true }, tech: undefined },
{ entity: { block: 'block', elem: 'elem2' }, tech: undefined },
{ entity: { block: 'block', elem: 'elem2', modName: 'm1', modVal: 'v1' }, tech: undefined }
{ entity: { block: 'block', elem: 'elem2', modName: 'm1', modVal: 'v1' }, tech: undefined },
{ entity: { block: 'block', elem: 'elem2', modName: 'm1', modVal: true }, tech: undefined }
]);
});

Expand All @@ -62,8 +65,10 @@ test('should support mods in elems and block', t => {
t.deepEqual(normalize(decl), [
{ entity: { block: 'block' }, tech: undefined },
{ entity: { block: 'block', modName: 'm1', modVal: 'v1' }, tech: undefined },
{ entity: { block: 'block', modName: 'm1', modVal: true }, tech: undefined },
{ entity: { block: 'block', elem: 'elem' }, tech: undefined },
{ entity: { block: 'block', elem: 'elem', modName: 'm2', modVal: 'v2' }, tech: undefined }
{ entity: { block: 'block', elem: 'elem', modName: 'm2', modVal: 'v2' }, tech: undefined },
{ entity: { block: 'block', elem: 'elem', modName: 'm2', modVal: true }, tech: undefined }
]);
});

Expand All @@ -78,6 +83,7 @@ test('should support block mods with `elems` field without block', t => {
t.deepEqual(normalize(decl), [
{ entity: { block: null }, tech: undefined },
{ entity: { block: null, modName: 'theme', modVal: 'protect' }, tech: undefined },
{ entity: { block: null, modName: 'theme', modVal: true }, tech: undefined },
{ entity: { block: null, elem: 'close' }, tech: undefined }
]);
})
10 changes: 7 additions & 3 deletions test/normalize2/mod-mods-vals.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,16 +11,19 @@ test('should support mod and mods without block, elem', t => {

t.deepEqual(normalize(decl), [
{ entity: { block: null, modName: 'mod', modVal: 'val' }, tech: undefined },
{ entity: { block: null, modName: 'mod', modVal: true }, tech: undefined },
{ entity: { block: null }, tech: undefined },
{ entity: { block: null, modName: 'mod1', modVal: 'val1' }, tech: undefined }
{ entity: { block: null, modName: 'mod1', modVal: 'val1' }, tech: undefined },
{ entity: { block: null, modName: 'mod1', modVal: true }, tech: undefined }
]);
});

test('should support mod without block & elem', t => {
const decl = { mod: 'mod', val: 'val' };

t.deepEqual(normalize(decl), [
{ entity: { block: null, modName: 'mod', modVal: 'val' }, tech: undefined }
{ entity: { block: null, modName: 'mod', modVal: 'val' }, tech: undefined },
{ entity: { block: null, modName: 'mod', modVal: true }, tech: undefined }
]);
});

Expand All @@ -29,7 +32,8 @@ test('should support mods without block & elem', t => {

t.deepEqual(normalize(decl), [
{ entity: { block: null }, tech: undefined },
{ entity: { block: null, modName: 'mod', modVal: 'val' }, tech: undefined }
{ entity: { block: null, modName: 'mod', modVal: 'val' }, tech: undefined },
{ entity: { block: null, modName: 'mod', modVal: true }, tech: undefined }
]);
});

Expand Down
6 changes: 5 additions & 1 deletion test/normalize2/unusual.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@ test('should support both mod and mods', t => {
t.deepEqual(normalize(decl), [
{ entity: { block: 'block' }, tech: undefined },
{ entity: { block: 'block', modName: 'mod', modVal: true }, tech: undefined },
{ entity: { block: 'block', modName: 'm1', modVal: 'v1' }, tech: undefined }
{ entity: { block: 'block', modName: 'm1', modVal: 'v1' }, tech: undefined },
{ entity: { block: 'block', modName: 'm1', modVal: true }, tech: undefined }
]);
});

Expand Down Expand Up @@ -51,8 +52,11 @@ test('should support both mod, mods, elem and elems :\'(', t => {
{ entity: { block: 'block' }, tech: undefined },
{ entity: { block: 'block', elem: 'elem1' }, tech: undefined },
{ entity: { block: 'block', elem: 'elem1', modName: 'mod1', modVal: 'v1' }, tech: undefined },
{ entity: { block: 'block', elem: 'elem1', modName: 'mod1', modVal: true }, tech: undefined },
{ entity: { block: 'block', modName: 'mod1', modVal: 'v1' }, tech: undefined },
{ entity: { block: 'block', modName: 'mod1', modVal: true }, tech: undefined },
{ entity: { block: 'block', modName: 'mod2', modVal: 'v2' }, tech: undefined },
{ entity: { block: 'block', modName: 'mod2', modVal: true }, tech: undefined },
{ entity: { block: 'block', elem: 'elem2' }, tech: undefined }
]);
});

0 comments on commit 25623ce

Please sign in to comment.