Skip to content

Commit df133d6

Browse files
committed
Merge pull request #112 from csscomb/tg/sort-order-tests
Sort order: Use external files for tests
2 parents dd9c7dd + 35159d8 commit df133d6

102 files changed

Lines changed: 973 additions & 749 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

lib/options/sort-order.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,8 @@ module.exports = {
223223
}
224224
}
225225

226+
// If current node is not property-value pair or import or include,
227+
// skip it and continue with the next node:
226228
if (!propertyName) {
227229
deleted.splice(deleted.length - sc0.length, deleted.length + 1);
228230
continue;

test/less.js

Lines changed: 39 additions & 308 deletions
Original file line numberDiff line numberDiff line change
@@ -1,331 +1,62 @@
11
var Comb = require('../lib/csscomb');
22
var assert = require('assert');
3+
var fs = require('fs');
34

45
describe('LESS', function() {
56
var comb;
6-
var config;
77
var input;
8-
var expected;
8+
9+
function readFile(path) {
10+
return fs.readFileSync('test/less/' + path, 'utf8');
11+
}
912

1013
beforeEach(function() {
1114
comb = new Comb();
15+
comb.configure({});
1216
});
1317

14-
afterEach(function() {
15-
comb.configure(config);
16-
assert.equal(comb.processString(input, 'less'), expected);
18+
it('Should parse nested rules', function() {
19+
input = readFile('nested-rule.less');
20+
assert.equal(comb.processString(input, 'less'), input);
1721
});
1822

19-
describe('Parsing', function() {
20-
it('Should parse nested rules', function() {
21-
config = { 'sort-order': [
22-
['top', 'color']
23-
] };
24-
25-
input = 'div { color: tomato; a { top: 0; } }';
26-
27-
expected = 'div { color: tomato; a { top: 0; } }';
28-
});
29-
30-
it('Should parse operations', function() {
31-
config = {};
32-
33-
input = 'div {\n' +
34-
' @base: 5%;\n' +
35-
' @filler: @base * 2;\n' +
36-
' @other: @base + @filler;\n' +
37-
' color: #888 / 4;\n' +
38-
' background-color: @base-color + #111;\n' +
39-
' height: 100% / 2 + @filler;\n' +
40-
' }';
41-
42-
expected = 'div {\n' +
43-
' @base: 5%;\n' +
44-
' @filler: @base * 2;\n' +
45-
' @other: @base + @filler;\n' +
46-
' color: #888 / 4;\n' +
47-
' background-color: @base-color + #111;\n' +
48-
' height: 100% / 2 + @filler;\n' +
49-
' }';
50-
});
51-
52-
it('Should parse parent selector &', function() {
53-
config = { 'sort-order': [
54-
['top', 'left', 'color']
55-
] };
56-
57-
input = 'div { color: tomato; &.top { color: nani; top: 0; } left: 0; }';
58-
59-
expected = 'div { left: 0; color: tomato; &.top {top: 0; color: nani; }}';
60-
});
61-
62-
it('Should parse variables', function() {
63-
config = {};
64-
65-
input = '@red: tomato; div { color: @tomato; top: @@foo; }';
66-
67-
expected = '@red: tomato; div { color: @tomato; top: @@foo; }';
68-
});
69-
70-
it('Should parse interpolated variables inside selectors', function() {
71-
config = { 'sort-order': [
72-
['top', 'left', 'color']
73-
] };
74-
75-
input = 'div.@{nani} {color:tomato;top:0;}';
76-
77-
expected = 'div.@{nani} {top:0;color:tomato;}';
78-
});
79-
80-
it('Should parse interpolated variables inside values', function() {
81-
config = { 'sort-order': [
82-
['top', 'left', 'color']
83-
] };
84-
85-
input = 'div {color:@{tomato};top:0;}';
86-
87-
expected = 'div {top:0;color:@{tomato};}';
88-
});
89-
90-
it('Should parse @import', function() {
91-
config = {};
92-
93-
input = 'div { @import "foo.css"; top: 0; }';
94-
95-
expected = 'div { @import "foo.css"; top: 0; }';
96-
});
97-
98-
it('Should parse included mixins', function() {
99-
config = {};
100-
101-
input = 'div { .mixin; top: 0; }';
102-
103-
expected = 'div { .mixin; top: 0; }';
104-
});
105-
106-
it('Should parse nested @media', function() {
107-
config = {};
108-
109-
input = 'div {\n' +
110-
' @media screen and (orientation: landscape) {\n' +
111-
' color: tomato;\n' +
112-
' }\n' +
113-
' top: 0;\n' +
114-
'}';
115-
116-
expected = 'div {\n' +
117-
' @media screen and (orientation: landscape) {\n' +
118-
' color: tomato;\n' +
119-
' }\n' +
120-
' top: 0;\n' +
121-
'}';
122-
});
23+
it('Should parse operations', function() {
24+
input = readFile('operation.less');
25+
assert.equal(comb.processString(input, 'less'), input);
12326
});
12427

125-
describe('Sorting', function() {
126-
it('Should sort properties inside rules', function() {
127-
config = { 'sort-order': [
128-
['top', 'color']
129-
] };
130-
131-
input = 'div { color: tomato; top: 0; }';
132-
133-
expected = 'div {top: 0; color: tomato; }';
134-
});
135-
136-
it('Should sort properties inside nested rules', function() {
137-
config = { 'sort-order': [
138-
['top', 'color']
139-
] };
140-
141-
input = 'div { color: tomato; a { color: nani; top: 0; } }';
142-
143-
expected = 'div { color: tomato; a {top: 0; color: nani; } }';
144-
});
145-
146-
it('Should sort properties divided by nested rules', function() {
147-
config = { 'sort-order': [
148-
['top', 'left', 'color']
149-
] };
150-
151-
input = 'div { color: tomato; a { color: nani; top: 0; } left: 0; }';
152-
153-
expected = 'div { left: 0; color: tomato; a {top: 0; color: nani; }}';
154-
});
155-
156-
it('Should group declarations with proper comments and spaces (single line)', function() {
157-
config = { 'sort-order': [
158-
['top', 'color']
159-
] };
160-
161-
input = 'div {/* 1 */ color: tomato; /* 2 */ top: 0; /* 3 */ /* 4 */}';
162-
163-
expected = 'div {top: 0; /* 3 */ /* 4 *//* 1 */ color: tomato; /* 2 */ }';
164-
});
165-
166-
it('Should group declarations with proper comments and spaces (multiple lines). Test 1', function() {
167-
config = { 'sort-order': [
168-
['top', 'color']
169-
] };
170-
171-
input = 'div {\n' +
172-
' color: tomato; /* 1 */\n' +
173-
' /* 2 */\n' +
174-
' /* 3 */\n' +
175-
' top: 0; /* 4 */\n' +
176-
' /* 5 */\n' +
177-
'}';
178-
179-
expected = 'div {\n' +
180-
' /* 2 */\n' +
181-
' /* 3 */\n' +
182-
' top: 0; /* 4 */\n' +
183-
' color: tomato; /* 1 */\n' +
184-
' /* 5 */\n' +
185-
'}';
186-
});
187-
188-
it('Should group declarations with proper comments and spaces (multiple lines). Test 2', function() {
189-
config = { 'sort-order': [
190-
['$variable', 'color']
191-
] };
192-
193-
input = 'p {\n' +
194-
' /* One hell of a comment */\n' +
195-
' color: tomato;\n' +
196-
' // Get in line!\n' +
197-
' @var: white;\n' +
198-
' }';
199-
200-
expected = 'p {\n' +
201-
' // Get in line!\n' +
202-
' @var: white;\n' +
203-
' /* One hell of a comment */\n' +
204-
' color: tomato;\n' +
205-
' }';
206-
});
207-
208-
it('Should group declarations with proper comments and spaces (multiple lines). Test 3', function() {
209-
config = { 'sort-order': [
210-
['$variable', 'color']
211-
] };
212-
213-
input = 'p {\n' +
214-
' color: tomato; /* One hell of a comment */\n' +
215-
' @var: white; // Get in line!\n' +
216-
' }';
217-
218-
expected = 'p {\n' +
219-
' @var: white; // Get in line!\n' +
220-
' color: tomato; /* One hell of a comment */\n' +
221-
' }';
222-
});
223-
224-
it('Should divide properties from different groups with an empty line', function() {
225-
config = { 'sort-order': [
226-
['top'], ['color']
227-
] };
228-
229-
input = 'div {\n' +
230-
' color: tomato;\n' +
231-
' top: 0;\n' +
232-
'}';
233-
234-
expected = 'div {\n' +
235-
' top: 0;\n' +
236-
'\n' +
237-
' color: tomato;\n' +
238-
'}';
239-
});
240-
241-
it('Should sort variables', function() {
242-
config = { 'sort-order': [
243-
['$variable', 'color']
244-
] };
245-
246-
input = 'div { color: @red; @red: tomato; }';
247-
248-
expected = 'div {@red: tomato; color: @red; }';
249-
});
250-
251-
it('Should sort imports', function() {
252-
config = { 'sort-order': [
253-
['$import', 'color']
254-
] };
255-
256-
input = 'div { color: tomato; @import "foo.css"; }';
257-
258-
expected = 'div {@import "foo.css"; color: tomato; }';
259-
});
260-
261-
it('Should sort included mixins. Test 1', function() {
262-
config = { 'sort-order': [
263-
['$include', 'color', 'border-top', 'border-bottom']
264-
] };
265-
266-
input = '.bordered {\n' +
267-
' border-bottom: solid 2px black;\n' +
268-
' border-top: dotted 1px black;\n' +
269-
' }\n' +
270-
'#menu a {\n' +
271-
' color: #111;\n' +
272-
' .bordered;\n' +
273-
' }\n' +
274-
'.post a {\n' +
275-
' color: red;\n' +
276-
' .bordered;\n' +
277-
' }';
278-
279-
expected = '.bordered {\n' +
280-
' border-top: dotted 1px black;\n' +
281-
' border-bottom: solid 2px black;\n' +
282-
' }\n' +
283-
'#menu a {\n' +
284-
' .bordered;\n' +
285-
' color: #111;\n' +
286-
' }\n' +
287-
'.post a {\n' +
288-
' .bordered;\n' +
289-
' color: red;\n' +
290-
' }';
291-
});
28+
it('Should parse parent selector &', function() {
29+
input = readFile('parent-selector.less');
30+
assert.equal(comb.processString(input, 'less'), input);
31+
});
29232

293-
it('Should sort included mixins. Test 2', function() {
294-
config = { 'sort-order': [
295-
['$include', 'top', 'color']
296-
] };
33+
it('Should parse variables', function() {
34+
input = readFile('variable.less');
35+
assert.equal(comb.processString(input, 'less'), input);
36+
});
29737

298-
input = '.test {\n' +
299-
' .test1();\n' +
300-
' color: tomato;\n' +
301-
' .test2();\n' +
302-
' top: 0;\n' +
303-
' }';
38+
it('Should parse interpolated variables inside selectors', function() {
39+
input = readFile('interpolated-variable-1.less');
40+
assert.equal(comb.processString(input, 'less'), input);
41+
});
30442

305-
expected = '.test {\n' +
306-
' .test1();\n' +
307-
' .test2();\n' +
308-
' top: 0;\n' +
309-
' color: tomato;\n' +
310-
' }';
311-
});
43+
it('Should parse interpolated variables inside values', function() {
44+
input = readFile('interpolated-variable-2.less');
45+
assert.equal(comb.processString(input, 'less'), input);
46+
});
31247

313-
it('Should sort included mixins. Test 3', function() {
314-
config = { 'sort-order': [
315-
['$include', 'border', 'color']
316-
] };
48+
it('Should parse @import', function() {
49+
input = readFile('import.less');
50+
assert.equal(comb.processString(input, 'less'), input);
51+
});
31752

318-
input = '.foo {\n' +
319-
' color: #0f0;\n' +
320-
' border: 1px solid #f00;\n' +
321-
' .linear-gradient(#fff; #000);\n' +
322-
'}';
53+
it('Should parse included mixins', function() {
54+
input = readFile('mixin.less');
55+
assert.equal(comb.processString(input, 'less'), input);
56+
});
32357

324-
expected = '.foo {\n' +
325-
' .linear-gradient(#fff; #000);\n' +
326-
' border: 1px solid #f00;\n' +
327-
' color: #0f0;\n' +
328-
'}';
329-
});
58+
it('Should parse nested @media', function() {
59+
input = readFile('nested-media.less');
60+
assert.equal(comb.processString(input, 'less'), input);
33061
});
33162
});

test/less/import.less

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
div {
2+
@import "foo.css";
3+
top: 0;
4+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
div.@{nani} {
2+
color:tomato;
3+
top:0;
4+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
div {
2+
color: @{tomato};
3+
top:0;
4+
}

test/less/mixin.less

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
div {
2+
.mixin;
3+
top: 0;
4+
}

0 commit comments

Comments
 (0)