Skip to content

Commit ff4e792

Browse files
Parse/stringify completed
1 parent cc55f39 commit ff4e792

File tree

7 files changed

+80
-39
lines changed

7 files changed

+80
-39
lines changed

src/main/helpers/convert/createNode.js

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -30,14 +30,15 @@ function createAtRule(str, level) {
3030
const result = new AtRule()
3131
result.type = 'atrule'
3232
result.name = match[1]
33-
if (match[3]) {
34-
result.params = match[3]
35-
}
3633
result.raws = {
3734
before : '\n'.padEnd(level + 1, '\t'),
38-
after : '',
39-
afterName: ' ',
40-
between : ' '
35+
after : '\n'.padEnd(level + 1, '\t'),
36+
afterName: '',
37+
between : ''
38+
}
39+
if (match[3]) {
40+
result.params = match[3]
41+
result.raws.afterName = ' '
4142
}
4243

4344
return result
@@ -49,7 +50,7 @@ function createRule(name, level) {
4950
result.selector = name
5051
result.raws = {
5152
before : '\n'.padEnd(level + 1, '\t'),
52-
after : '',
53+
after : '\n'.padEnd(level + 1, '\t'),
5354
between : ' ',
5455
semicolon: false
5556
}
@@ -77,7 +78,7 @@ function createDeclaration(name, value, level) {
7778
}
7879
result.raws = {
7980
before : '\n'.padEnd(level + 1, '\t'),
80-
between: ':',
81+
between: ': ',
8182
}
8283

8384
return result
@@ -114,9 +115,8 @@ export function createNode(name, valueOrNodes, level) {
114115
if (!Array.isArray(valueOrNodes)) {
115116
throw new Error('@at-rule content must be an array or an object, but was specified: ' + valueOrNodes)
116117
}
117-
if (valueOrNodes.length) {
118-
atRule.nodes = valueOrNodes
119-
}
118+
atRule.nodes = valueOrNodes
119+
atRule.raws.between = ' '
120120
}
121121
return atRule
122122
}

src/main/helpers/convert/parseNode.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ export function parseNode(node) {
2121
name = null
2222
}
2323

24-
if (node.nodes && node.nodes.length) {
24+
if (node.nodes) {
2525
return {
2626
name,
2727
value: node.nodes

src/test/tests/main/helpers/convert/createNode.js

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -75,10 +75,10 @@ describe('main > helpers > convert > createNode', function () {
7575
type: 'atrule',
7676
name: 'import',
7777
raws: {
78-
after : '',
79-
afterName: ' ',
78+
after : '\n',
79+
afterName: '',
8080
before : '\n',
81-
between : ' '
81+
between : ''
8282
}
8383
}
8484
))
@@ -90,10 +90,10 @@ describe('main > helpers > convert > createNode', function () {
9090
name : 'import',
9191
params: 'module\r\n.js',
9292
raws : {
93-
after : '',
93+
after : '\n',
9494
afterName: ' ',
9595
before : '\n',
96-
between : ' '
96+
between : ''
9797
}
9898
}
9999
))
@@ -105,10 +105,10 @@ describe('main > helpers > convert > createNode', function () {
105105
name : 'import',
106106
params: 'module\r\n.js',
107107
raws : {
108-
after : '',
108+
after : '\n\t\t\t',
109109
afterName: ' ',
110110
before : '\n\t\t\t',
111-
between : ' '
111+
between : ''
112112
}
113113
}
114114
))
@@ -122,10 +122,10 @@ describe('main > helpers > convert > createNode', function () {
122122
name : 'import',
123123
params: 'module\r\n.js',
124124
raws : {
125-
after : '',
125+
after : '\n',
126126
afterName: ' ',
127127
before : '\n',
128-
between : ' '
128+
between : ''
129129
}
130130
}
131131
))
@@ -137,10 +137,10 @@ describe('main > helpers > convert > createNode', function () {
137137
name : 'import',
138138
params: 'module\r\n.js',
139139
raws : {
140-
after : '',
140+
after : '\n',
141141
afterName: ' ',
142142
before : '\n',
143-
between : ' '
143+
between : ''
144144
}
145145
}
146146
))
@@ -151,8 +151,9 @@ describe('main > helpers > convert > createNode', function () {
151151
type : 'atrule',
152152
name : 'import',
153153
params: 'module\r\n.js',
154+
nodes : [],
154155
raws : {
155-
after : '',
156+
after : '\n',
156157
afterName: ' ',
157158
before : '\n',
158159
between : ' '
@@ -167,7 +168,7 @@ describe('main > helpers > convert > createNode', function () {
167168
name : 'import',
168169
params: 'module\r\n.js',
169170
raws : {
170-
after : '',
171+
after : '\n',
171172
afterName: ' ',
172173
before : '\n',
173174
between : ' '
@@ -198,7 +199,7 @@ describe('main > helpers > convert > createNode', function () {
198199
type : 'rule',
199200
selector: 'a-b:c .d, .e',
200201
raws : {
201-
after : '',
202+
after : '\n',
202203
before : '\n',
203204
between : ' ',
204205
semicolon: false
@@ -223,7 +224,7 @@ describe('main > helpers > convert > createNode', function () {
223224
type : 'rule',
224225
selector: 'a-b:c .d, .e',
225226
raws : {
226-
after : '',
227+
after : '\n\t\t\t',
227228
before : '\n\t\t\t',
228229
between : ' ',
229230
semicolon: false
@@ -253,7 +254,7 @@ describe('main > helpers > convert > createNode', function () {
253254
value: '[object Object]',
254255
raws : {
255256
before : '\n',
256-
between: ':'
257+
between: ': '
257258
}
258259
}
259260
))
@@ -266,7 +267,7 @@ describe('main > helpers > convert > createNode', function () {
266267
value: '',
267268
raws : {
268269
before : '\n',
269-
between: ':'
270+
between: ': '
270271
}
271272
}
272273
))
@@ -279,7 +280,7 @@ describe('main > helpers > convert > createNode', function () {
279280
value: '',
280281
raws : {
281282
before : '\n',
282-
between: ':'
283+
between: ': '
283284
}
284285
}
285286
))
@@ -293,7 +294,7 @@ describe('main > helpers > convert > createNode', function () {
293294
important: true,
294295
raws : {
295296
before : '\n',
296-
between: ':'
297+
between: ': '
297298
}
298299
}
299300
))
@@ -306,7 +307,7 @@ describe('main > helpers > convert > createNode', function () {
306307
value: '! important',
307308
raws : {
308309
before : '\n',
309-
between: ':'
310+
between: ': '
310311
}
311312
}
312313
))
@@ -320,7 +321,7 @@ describe('main > helpers > convert > createNode', function () {
320321
important: true,
321322
raws : {
322323
before : '\n',
323-
between: ':'
324+
between: ': '
324325
}
325326
}
326327
))

src/test/tests/main/helpers/convert/jsToNodes.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ describe('main > helpers > convert > jsToNodes', function () {
3131

3232
function testJsToNodes(jss, expectedNodes) {
3333
const nodes = jsToNodes(jss, createNode)
34-
assert.deepStrictEqual(nodes, expectedNodes, `JSS:\r\n${JSON.stringify(jss, null, 4)}\r\n\r\nActual: \r\n${JSON.stringify(nodes, null, 4)}\r\n\r\nExpected:\r\n${JSON.stringify(expectedNodes, null, 4)}`)
34+
const errorMessage = `JSS:\r\n${JSON.stringify(jss, null, 4)}\r\n\r\nActual: \r\n${JSON.stringify(nodes, null, 4)}\r\n\r\nExpected:\r\n${JSON.stringify(expectedNodes, null, 4)}`
35+
assert.deepStrictEqual(nodes, expectedNodes, errorMessage)
3536
}
3637

3738
it('null', function () {

src/test/tests/main/helpers/convert/nodesToJs.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@ describe('main > helpers > convert > nodesToJs', function () {
2222

2323
function testNodesToJs(jss, expectedNodes) {
2424
const nodes = nodesToJs(jss, parseNode)
25-
assert.deepStrictEqual(nodes, expectedNodes, `JSS:\r\n${JSON.stringify(jss, null, 4)}\r\n\r\nActual: \r\n${JSON.stringify(nodes, null, 4)}\r\n\r\nExpected:\r\n${JSON.stringify(expectedNodes, null, 4)}`)
25+
const errorMessage = `JSS:\r\n${JSON.stringify(jss, null, 4)}\r\n\r\nActual: \r\n${JSON.stringify(nodes, null, 4)}\r\n\r\nExpected:\r\n${JSON.stringify(expectedNodes, null, 4)}`
26+
assert.deepStrictEqual(nodes, expectedNodes, errorMessage)
27+
assert.strictEqual(JSON.stringify(nodes), JSON.stringify(expectedNodes), errorMessage)
2628
}
2729

2830
it('null', function () {

src/test/tests/main/helpers/convert/parseNode.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ describe('main > helpers > convert > parseNode', function () {
99
function testParseNode(node, expectedItem) {
1010
const item = parseNode(node, expectedItem)
1111
assert.deepStrictEqual(item, expectedItem)
12+
assert.strictEqual(JSON.stringify(item), JSON.stringify(expectedItem))
1213
}
1314

1415
it('null', function () {
@@ -55,7 +56,8 @@ describe('main > helpers > convert > parseNode', function () {
5556
params: ' \n\t module\r\n.js \n\t',
5657
nodes : []
5758
}, {
58-
value: '@import module\r\n.js'
59+
name: '@import module\r\n.js',
60+
value: []
5961
})
6062

6163
testParseNode({

src/test/tests/main/parse.js

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,19 @@ import {stringify} from '../../../main/stringify'
66
describe('main > parse', function () {
77
const css = `
88
@import 'module.js';
9+
@font-face;
910
@font-face {
1011
1112
}
1213
@media(min-width: 500px) {
1314
15+
}
16+
@font-face {
17+
color: #0f0;
18+
}
19+
@media(min-width: 500px) {
20+
color: #0ff;
21+
font-size: 1px
1422
}
1523
:global(.x::placeholder) {
1624
color: blue !important;
@@ -25,8 +33,14 @@ describe('main > parse', function () {
2533
const js = [
2634
"@import 'module.js'",
2735
'@font-face',
28-
'@media (min-width: 500px)',
2936
{
37+
'@font-face': {
38+
color: '#0f0'
39+
},
40+
'@media (min-width: 500px)': {
41+
color : '#0ff',
42+
'font-size': '1px'
43+
},
3044
':global(.x::placeholder)': {
3145
color : 'blue !important',
3246
background: '-moz-linear-gradient(top, #1e5799 0%, #2989d8 50%, #207cca 51%, #7db9e8 100%)',
@@ -40,15 +54,36 @@ describe('main > parse', function () {
4054
}
4155
]
4256

57+
const postProcessCss = `
58+
@import 'module.js';
59+
@font-face;
60+
@font-face {
61+
color: #0f0
62+
}
63+
@media (min-width: 500px) {
64+
color: #0ff;
65+
font-size: 1px
66+
}
67+
:global(.x::placeholder) {
68+
color: blue !important;
69+
background: -moz-linear-gradient(top, #1e5799 0%, #2989d8 50%, #207cca 51%, #7db9e8 100%);
70+
.y {
71+
/* Comment */
72+
content: "text"
73+
}
74+
}
75+
`
76+
4377
it('parse', function () {
4478
const parsedPostcss = postcssParse(css)
4579

4680
const parsedJs = parse(parsedPostcss)
4781

4882
assert.deepStrictEqual(parsedJs, js)
83+
assert.strictEqual(JSON.stringify(parsedJs), JSON.stringify(js))
4984
})
5085

51-
xit('stringify', function () {
86+
it('stringify', function () {
5287
const stringifyPostcss = stringify(js)
5388

5489
const builder = []
@@ -57,6 +92,6 @@ describe('main > parse', function () {
5792
})
5893
const stringifyCss = builder.join('')
5994

60-
assert.strictEqual(stringifyCss, css)
95+
assert.strictEqual(stringifyCss, postProcessCss)
6196
})
6297
})

0 commit comments

Comments
 (0)