-
Notifications
You must be signed in to change notification settings - Fork 41
/
Copy pathmap-keys.js
118 lines (109 loc) · 4.86 KB
/
map-keys.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
const { expect } = require('chai');
const path = require('path');
const { render, renderSync } = require('../src');
const { normalizePath } = require('../src/util');
const mapKeysFile = {
"Node Sass": path.join(__dirname, 'sass', 'map-keys_node-sass.scss'),
"Dart Sass": path.join(__dirname, 'sass', 'map-keys_dart-sass.scss'),
}
function verifyMapKeys(rendered, impl) {
expect(rendered.vars).to.exist;
expect(rendered.vars).to.have.property('global');
expect(rendered.vars.global).to.have.property('$map');
expect(rendered.vars.global.$map.type).to.equal('SassMap');
expect(rendered.vars.global.$map.value).to.have.property('string');
expect(rendered.vars.global.$map.value).to.have.property('1px');
expect(rendered.vars.global.$map.value).to.have.property('white');
expect(rendered.vars.global.$map.value).to.have.property('#123456');
expect(rendered.vars.global.$map.value).to.have.property('rgba(0,1,2,0.5)');
expect(rendered.vars.global.$map.value).to.have.property('black');
expect(rendered.vars.global.$map.value).to.have.property('true');
expect(rendered.vars.global.$map.value).to.have.property('null');
expect(rendered.vars.global.$map.value).to.have.property('1,2,3');
expect(rendered.vars.global.$map.value).to.have.property('1 2 3 4');
expect(rendered.vars.global.$map.value).to.have.property('(a: map)');
expect(rendered.vars.global.$map.value).to.have.property('(b: nested),(c: maps)');
expect(rendered.vars.global.$map.value).to.have.property('(d: map)');
expect(rendered.vars.global.$map.value).to.have.property('#fcfcfc');
expect(rendered.vars.global.$map.value).to.have.property('somekey');
expect(rendered.vars.global.$map.value.string).to.deep.include({
type: 'SassNumber', value: 1, unit: 'em'
});
expect(rendered.vars.global.$map.value['1px']).to.deep.include({
type: 'SassString', value: 'number'
});
expect(rendered.vars.global.$map.value.white).to.deep.include({
type: 'SassString', value: 'color-string'
});
expect(rendered.vars.global.$map.value['#123456']).to.deep.include({
type: 'SassString', value: 'color-hex'
});
expect(rendered.vars.global.$map.value['rgba(0,1,2,0.5)']).to.deep.include({
type: 'SassString', value: 'color-rgba'
});
expect(rendered.vars.global.$map.value.black).to.deep.include({
type: 'SassString', value: 'color-black-rgba'
});
expect(rendered.vars.global.$map.value.true).to.deep.include({
type: 'SassString', value: 'boolean'
});
expect(rendered.vars.global.$map.value.null).to.deep.include({
type: 'SassString', value: 'null'
});
expect(rendered.vars.global.$map.value['1,2,3']).to.deep.include({
type: 'SassString', value: 'list'
});
expect(rendered.vars.global.$map.value['1 2 3 4']).to.deep.include({
type: 'SassString', value: 'list-spaces'
});
expect(rendered.vars.global.$map.value['(a: map)']).to.deep.include({
type: 'SassString', value: 'map'
});
expect(rendered.vars.global.$map.value['(b: nested),(c: maps)']).to.deep.include({
type: 'SassString', value: 'list-maps'
});
expect(rendered.vars.global.$map.value['(d: map)']).to.deep.include({
type: 'SassMap',
});
expect(rendered.vars.global.$map.value['(d: map)'].value).to.have.property('nested');
expect(rendered.vars.global.$map.value['(d: map)'].value.nested).to.deep.include({
type: 'SassMap',
});
if(impl === "Node Sass") {
expect(rendered.vars.global.$map.value['(d: map)'].value.nested.value).to.have.property('1 2 3');
expect(rendered.vars.global.$map.value['(d: map)'].value.nested.value['1 2 3']).to.deep.include({
type: 'SassString', value: 'list'
});
} else if(impl === "Dart Sass") {
expect(rendered.vars.global.$map.value['(d: map)'].value.nested.value).to.have.property('1,2,3');
expect(rendered.vars.global.$map.value['(d: map)'].value.nested.value['1,2,3']).to.deep.include({
type: 'SassString', value: 'list'
});
}
expect(rendered.vars.global.$map.value['(d: map)'].value.nested.value).to.have.property('1 2 3 4');
expect(rendered.vars.global.$map.value['(d: map)'].value.nested.value['1 2 3 4']).to.deep.include({
type: 'SassString', value: 'list-spaces'
});
expect(rendered.vars.global.$map.value['#fcfcfc']).to.deep.include({
type: 'SassString', value: 'darkened-white'
});
expect(rendered.vars.global.$map.value.somekey).to.deep.include({
type: 'SassString', value: 'key-variable'
});
}
describe_implementation('map-keys', (sass, impl) => {
describe('sync', () => {
it('should extract all variables', () => {
const rendered = renderSync({ file: mapKeysFile[impl] }, { implementation: sass });
verifyMapKeys(rendered, impl);
});
});
describe('async', () => {
it('should extract all variables', () => {
return render({ file: mapKeysFile[impl] }, { implementation: sass })
.then(rendered => {
verifyMapKeys(rendered, impl);
});
});
});
});