Skip to content

Commit a761d18

Browse files
committed
Add extended rule objects with selector in order
1 parent 5029cb2 commit a761d18

File tree

8 files changed

+646
-22
lines changed

8 files changed

+646
-22
lines changed

__tests__/order.js

Lines changed: 287 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,3 +171,290 @@ test(
171171
}
172172
)
173173
);
174+
175+
groupTest([
176+
{
177+
options: {
178+
order: [
179+
{
180+
type: 'rule',
181+
selector: '^a',
182+
},
183+
{
184+
type: 'rule',
185+
selector: /^&/,
186+
},
187+
{
188+
type: 'rule',
189+
},
190+
],
191+
},
192+
cases: [
193+
{
194+
description: `doesn't change`,
195+
fixture: `
196+
a {
197+
a {}
198+
abbr {}
199+
&:hover {}
200+
span {}
201+
}
202+
`,
203+
expected: `
204+
a {
205+
a {}
206+
abbr {}
207+
&:hover {}
208+
span {}
209+
}
210+
`,
211+
},
212+
{
213+
description: `doesn't change`,
214+
fixture: `
215+
a {
216+
abbr {}
217+
a {}
218+
&:hover {}
219+
span {}
220+
}
221+
`,
222+
expected: `
223+
a {
224+
abbr {}
225+
a {}
226+
&:hover {}
227+
span {}
228+
}
229+
`,
230+
},
231+
{
232+
description: `doesn't change`,
233+
fixture: `
234+
a {
235+
a {}
236+
span {}
237+
}
238+
`,
239+
expected: `
240+
a {
241+
a {}
242+
span {}
243+
}
244+
`,
245+
},
246+
{
247+
fixture: `
248+
a {
249+
a {}
250+
&:hover {}
251+
abbr {}
252+
span {}
253+
}
254+
`,
255+
expected: `
256+
a {
257+
a {}
258+
abbr {}
259+
&:hover {}
260+
span {}
261+
}
262+
`,
263+
},
264+
{
265+
fixture: `
266+
a {
267+
span {}
268+
&:hover {}
269+
}
270+
`,
271+
expected: `
272+
a {
273+
&:hover {}
274+
span {}
275+
}
276+
`,
277+
},
278+
{
279+
fixture: `
280+
a {
281+
span {}
282+
abbr {}
283+
}
284+
`,
285+
expected: `
286+
a {
287+
abbr {}
288+
span {}
289+
}
290+
`,
291+
},
292+
],
293+
},
294+
{
295+
options: {
296+
order: [
297+
{
298+
type: 'rule',
299+
selector: /^&/,
300+
},
301+
{
302+
type: 'rule',
303+
selector: /^&:\w/,
304+
},
305+
{
306+
type: 'rule',
307+
},
308+
],
309+
},
310+
cases: [
311+
{
312+
description: `doesn't change`,
313+
fixture: `
314+
a {
315+
&:hover {}
316+
& b {}
317+
b & {}
318+
}
319+
`,
320+
expected: `
321+
a {
322+
&:hover {}
323+
& b {}
324+
b & {}
325+
}
326+
`,
327+
},
328+
{
329+
description: `doesn't change`,
330+
fixture: `
331+
a {
332+
& b {}
333+
&:hover {}
334+
b & {}
335+
}
336+
`,
337+
expected: `
338+
a {
339+
& b {}
340+
&:hover {}
341+
b & {}
342+
}
343+
`,
344+
},
345+
{
346+
fixture: `
347+
a {
348+
& b {}
349+
b & {}
350+
&:hover {}
351+
}
352+
`,
353+
expected: `
354+
a {
355+
& b {}
356+
&:hover {}
357+
b & {}
358+
}
359+
`,
360+
},
361+
{
362+
fixture: `
363+
a {
364+
&:hover {}
365+
b & {}
366+
& b {}
367+
}
368+
`,
369+
expected: `
370+
a {
371+
&:hover {}
372+
& b {}
373+
b & {}
374+
}
375+
`,
376+
},
377+
],
378+
},
379+
{
380+
options: {
381+
order: [
382+
{
383+
type: 'rule',
384+
},
385+
{
386+
type: 'rule',
387+
selector: /^&:\w/,
388+
},
389+
{
390+
type: 'rule',
391+
selector: /^&/,
392+
},
393+
],
394+
},
395+
cases: [
396+
{
397+
description: `doesn't change`,
398+
fixture: `
399+
a {
400+
b & {}
401+
&:hover {}
402+
& b {}
403+
}
404+
`,
405+
expected: `
406+
a {
407+
b & {}
408+
&:hover {}
409+
& b {}
410+
}
411+
`,
412+
},
413+
{
414+
description: `doesn't change`,
415+
fixture: `
416+
a {
417+
b & {}
418+
& b {}
419+
}
420+
`,
421+
expected: `
422+
a {
423+
b & {}
424+
& b {}
425+
}
426+
`,
427+
},
428+
{
429+
fixture: `
430+
a {
431+
b & {}
432+
& b {}
433+
&:hover {}
434+
}
435+
`,
436+
expected: `
437+
a {
438+
b & {}
439+
&:hover {}
440+
& b {}
441+
}
442+
`,
443+
},
444+
{
445+
fixture: `
446+
a {
447+
&:hover {}
448+
b & {}
449+
}
450+
`,
451+
expected: `
452+
a {
453+
b & {}
454+
&:hover {}
455+
}
456+
`,
457+
},
458+
],
459+
},
460+
]);

__tests__/validate-options.js

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,26 @@ testConfig({
8585
},
8686
});
8787

88+
testConfig({
89+
description: 'valid rules variants',
90+
valid: true,
91+
config: {
92+
order: [
93+
{
94+
type: 'rule',
95+
selector: /^&:\w/,
96+
},
97+
{
98+
type: 'rule',
99+
selector: '^&:\\w',
100+
},
101+
{
102+
type: 'rule',
103+
},
104+
],
105+
},
106+
});
107+
88108
testConfig({
89109
description: 'valid keyword with at-rule variant (keyword last)',
90110
valid: true,
@@ -229,6 +249,58 @@ testConfig({
229249
},
230250
});
231251

252+
testConfig({
253+
description: 'valid selector (string)',
254+
valid: true,
255+
config: {
256+
order: [
257+
{
258+
type: 'rule',
259+
selector: '^&:hover',
260+
},
261+
],
262+
},
263+
});
264+
265+
testConfig({
266+
description: 'valid selector (RegExp)',
267+
valid: true,
268+
config: {
269+
order: [
270+
{
271+
type: 'rule',
272+
selector: /^&:\w/,
273+
},
274+
],
275+
},
276+
});
277+
278+
testConfig({
279+
description: 'invalid. selector is empty',
280+
valid: false,
281+
config: {
282+
order: [
283+
{
284+
type: 'rule',
285+
selector: '',
286+
},
287+
],
288+
},
289+
});
290+
291+
testConfig({
292+
description: 'invalid. selector is not a string',
293+
valid: false,
294+
config: {
295+
order: [
296+
{
297+
type: 'rule',
298+
selector: null,
299+
},
300+
],
301+
},
302+
});
303+
232304
testConfig({
233305
description: 'valid. default order (one object)',
234306
valid: true,

0 commit comments

Comments
 (0)