sass 3.2.0.alpha.99 → 3.2.0.alpha.100
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/REVISION +1 -1
- data/VERSION +1 -1
- data/test/sass/extend_test.rb +129 -797
- metadata +4 -4
data/REVISION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
99eaa02f1de89ce2baff36ee7c5d18fbf276ea93
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
3.2.0.alpha.
|
1
|
+
3.2.0.alpha.100
|
data/test/sass/extend_test.rb
CHANGED
@@ -93,21 +93,9 @@ SCSS
|
|
93
93
|
end
|
94
94
|
|
95
95
|
def test_multiple_extends_with_single_extender_and_single_target
|
96
|
-
|
97
|
-
.foo .bar, .baz .bar, .foo .baz, .baz .baz
|
98
|
-
|
99
|
-
CSS
|
100
|
-
.foo .bar {a: b}
|
101
|
-
.baz {@extend .foo; @extend .bar}
|
102
|
-
SCSS
|
103
|
-
|
104
|
-
assert_equal <<CSS, render(<<SCSS)
|
105
|
-
.foo.bar, .baz {
|
106
|
-
a: b; }
|
107
|
-
CSS
|
108
|
-
.foo.bar {a: b}
|
109
|
-
.baz {@extend .foo; @extend .bar}
|
110
|
-
SCSS
|
96
|
+
assert_extends('.foo .bar', '.baz {@extend .foo; @extend .bar}',
|
97
|
+
'.foo .bar, .baz .bar, .foo .baz, .baz .baz')
|
98
|
+
assert_extends '.foo.bar', '.baz {@extend .foo; @extend .bar}', '.foo.bar, .baz'
|
111
99
|
end
|
112
100
|
|
113
101
|
def test_multiple_extends_with_multiple_extenders_and_single_target
|
@@ -143,41 +131,17 @@ SCSS
|
|
143
131
|
end
|
144
132
|
|
145
133
|
def test_dynamic_extendee
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
CSS
|
150
|
-
.foo {a: b}
|
151
|
-
.bar {@extend \#{".foo"}}
|
152
|
-
SCSS
|
153
|
-
|
154
|
-
assert_equal <<CSS, render(<<SCSS)
|
155
|
-
[baz^="blip12px"], .bar {
|
156
|
-
a: b; }
|
157
|
-
CSS
|
158
|
-
[baz^="blip12px"] {a: b}
|
159
|
-
.bar {@extend [baz^="blip\#{12px}"]}
|
160
|
-
SCSS
|
134
|
+
assert_extends '.foo', '.bar {@extend #{".foo"}}', '.foo, .bar'
|
135
|
+
assert_extends('[baz^="blip12px"]', '.bar {@extend [baz^="blip#{12px}"]}',
|
136
|
+
'[baz^="blip12px"], .bar')
|
161
137
|
end
|
162
138
|
|
163
139
|
def test_nested_target
|
164
|
-
|
165
|
-
.foo .bar, .foo .baz {
|
166
|
-
a: b; }
|
167
|
-
CSS
|
168
|
-
.foo .bar {a: b}
|
169
|
-
.baz {@extend .bar}
|
170
|
-
SCSS
|
140
|
+
assert_extends '.foo .bar', '.baz {@extend .bar}', '.foo .bar, .foo .baz'
|
171
141
|
end
|
172
142
|
|
173
143
|
def test_target_with_child
|
174
|
-
|
175
|
-
.foo .bar, .baz .bar {
|
176
|
-
a: b; }
|
177
|
-
CSS
|
178
|
-
.foo .bar {a: b}
|
179
|
-
.baz {@extend .foo}
|
180
|
-
SCSS
|
144
|
+
assert_extends '.foo .bar', '.baz {@extend .foo}', '.foo .bar, .baz .bar'
|
181
145
|
end
|
182
146
|
|
183
147
|
def test_class_unification
|
@@ -293,85 +257,27 @@ SCSS
|
|
293
257
|
end
|
294
258
|
|
295
259
|
def test_pseudoelement_remains_at_end_of_selector
|
296
|
-
|
297
|
-
.foo::bar, .baz::bar
|
298
|
-
a: b; }
|
299
|
-
CSS
|
300
|
-
.foo::bar {a: b}
|
301
|
-
.baz {@extend .foo}
|
302
|
-
SCSS
|
303
|
-
|
304
|
-
assert_equal <<CSS, render(<<SCSS)
|
305
|
-
a.foo::bar, a.baz::bar {
|
306
|
-
a: b; }
|
307
|
-
CSS
|
308
|
-
a.foo::bar {a: b}
|
309
|
-
.baz {@extend .foo}
|
310
|
-
SCSS
|
260
|
+
assert_extends '.foo::bar', '.baz {@extend .foo}', '.foo::bar, .baz::bar'
|
261
|
+
assert_extends 'a.foo::bar', '.baz {@extend .foo}', 'a.foo::bar, a.baz::bar'
|
311
262
|
end
|
312
263
|
|
313
264
|
def test_pseudoclass_remains_at_end_of_selector
|
314
|
-
|
315
|
-
.foo:bar, .baz:bar
|
316
|
-
a: b; }
|
317
|
-
CSS
|
318
|
-
.foo:bar {a: b}
|
319
|
-
.baz {@extend .foo}
|
320
|
-
SCSS
|
321
|
-
|
322
|
-
assert_equal <<CSS, render(<<SCSS)
|
323
|
-
a.foo:bar, a.baz:bar {
|
324
|
-
a: b; }
|
325
|
-
CSS
|
326
|
-
a.foo:bar {a: b}
|
327
|
-
.baz {@extend .foo}
|
328
|
-
SCSS
|
265
|
+
assert_extends '.foo:bar', '.baz {@extend .foo}', '.foo:bar, .baz:bar'
|
266
|
+
assert_extends 'a.foo:bar', '.baz {@extend .foo}', 'a.foo:bar, a.baz:bar'
|
329
267
|
end
|
330
268
|
|
331
269
|
def test_not_remains_at_end_of_selector
|
332
|
-
|
333
|
-
.foo:not(.bar), .baz:not(.bar) {
|
334
|
-
a: b; }
|
335
|
-
CSS
|
336
|
-
.foo:not(.bar) {a: b}
|
337
|
-
.baz {@extend .foo}
|
338
|
-
SCSS
|
270
|
+
assert_extends '.foo:not(.bar)', '.baz {@extend .foo}', '.foo:not(.bar), .baz:not(.bar)'
|
339
271
|
end
|
340
272
|
|
341
273
|
def test_pseudoelement_goes_lefter_than_pseudoclass
|
342
|
-
|
343
|
-
.foo::bar, .baz:bang
|
344
|
-
a: b; }
|
345
|
-
CSS
|
346
|
-
.foo::bar {a: b}
|
347
|
-
.baz:bang {@extend .foo}
|
348
|
-
SCSS
|
349
|
-
|
350
|
-
assert_equal <<CSS, render(<<SCSS)
|
351
|
-
.foo:bar, .baz:bar::bang {
|
352
|
-
a: b; }
|
353
|
-
CSS
|
354
|
-
.foo:bar {a: b}
|
355
|
-
.baz::bang {@extend .foo}
|
356
|
-
SCSS
|
274
|
+
assert_extends '.foo::bar', '.baz:bang {@extend .foo}', '.foo::bar, .baz:bang::bar'
|
275
|
+
assert_extends '.foo:bar', '.baz::bang {@extend .foo}', '.foo:bar, .baz:bar::bang'
|
357
276
|
end
|
358
277
|
|
359
278
|
def test_pseudoelement_goes_lefter_than_not
|
360
|
-
|
361
|
-
.foo::bar, .baz:not(.bang)::bar
|
362
|
-
a: b; }
|
363
|
-
CSS
|
364
|
-
.foo::bar {a: b}
|
365
|
-
.baz:not(.bang) {@extend .foo}
|
366
|
-
SCSS
|
367
|
-
|
368
|
-
assert_equal <<CSS, render(<<SCSS)
|
369
|
-
.foo:not(.bang), .baz:not(.bang)::bar {
|
370
|
-
a: b; }
|
371
|
-
CSS
|
372
|
-
.foo:not(.bang) {a: b}
|
373
|
-
.baz::bar {@extend .foo}
|
374
|
-
SCSS
|
279
|
+
assert_extends '.foo::bar', '.baz:not(.bang) {@extend .foo}', '.foo::bar, .baz:not(.bang)::bar'
|
280
|
+
assert_extends '.foo:not(.bang)', '.baz::bar {@extend .foo}', '.foo:not(.bang), .baz:not(.bang)::bar'
|
375
281
|
end
|
376
282
|
|
377
283
|
def test_negation_unification
|
@@ -408,293 +314,115 @@ SCSS
|
|
408
314
|
## Long Extendees
|
409
315
|
|
410
316
|
def test_long_extendee
|
411
|
-
|
412
|
-
.foo.bar, .baz {
|
413
|
-
a: b; }
|
414
|
-
CSS
|
415
|
-
.foo.bar {a: b}
|
416
|
-
.baz {@extend .foo.bar}
|
417
|
-
SCSS
|
317
|
+
assert_extends '.foo.bar', '.baz {@extend .foo.bar}', '.foo.bar, .baz'
|
418
318
|
end
|
419
319
|
|
420
320
|
def test_long_extendee_requires_all_selectors
|
421
|
-
|
422
|
-
.foo {
|
423
|
-
a: b; }
|
424
|
-
CSS
|
425
|
-
.foo {a: b}
|
426
|
-
.baz {@extend .foo.bar}
|
427
|
-
SCSS
|
321
|
+
assert_extends '.foo', '.baz {@extend .foo.bar}', '.foo'
|
428
322
|
end
|
429
323
|
|
430
324
|
def test_long_extendee_matches_supersets
|
431
|
-
|
432
|
-
.foo.bar.bap, .bap.baz {
|
433
|
-
a: b; }
|
434
|
-
CSS
|
435
|
-
.foo.bar.bap {a: b}
|
436
|
-
.baz {@extend .foo.bar}
|
437
|
-
SCSS
|
325
|
+
assert_extends '.foo.bar.bap', '.baz {@extend .foo.bar}', '.foo.bar.bap, .bap.baz'
|
438
326
|
end
|
439
327
|
|
440
328
|
def test_long_extendee_runs_unification
|
441
|
-
|
442
|
-
ns|*.foo.bar, ns|a.baz {
|
443
|
-
a: b; }
|
444
|
-
CSS
|
445
|
-
ns|*.foo.bar {a: b}
|
446
|
-
a.baz {@extend .foo.bar}
|
447
|
-
SCSS
|
329
|
+
assert_extends 'ns|*.foo.bar', 'a.baz {@extend .foo.bar}', 'ns|*.foo.bar, ns|a.baz'
|
448
330
|
end
|
449
331
|
|
450
332
|
## Long Extenders
|
451
333
|
|
452
334
|
def test_long_extender
|
453
|
-
|
454
|
-
.foo.bar, .bar.baz.bang {
|
455
|
-
a: b; }
|
456
|
-
CSS
|
457
|
-
.foo.bar {a: b}
|
458
|
-
.baz.bang {@extend .foo}
|
459
|
-
SCSS
|
335
|
+
assert_extends '.foo.bar', '.baz.bang {@extend .foo}', '.foo.bar, .bar.baz.bang'
|
460
336
|
end
|
461
337
|
|
462
338
|
def test_long_extender_runs_unification
|
463
|
-
|
464
|
-
ns|*.foo.bar, ns|a.bar.baz {
|
465
|
-
a: b; }
|
466
|
-
CSS
|
467
|
-
ns|*.foo.bar {a: b}
|
468
|
-
a.baz {@extend .foo}
|
469
|
-
SCSS
|
339
|
+
assert_extends 'ns|*.foo.bar', 'a.baz {@extend .foo}', 'ns|*.foo.bar, ns|a.bar.baz'
|
470
340
|
end
|
471
341
|
|
472
342
|
def test_long_extender_aborts_unification
|
473
|
-
|
474
|
-
a.foo#bar {
|
475
|
-
a: b; }
|
476
|
-
CSS
|
477
|
-
a.foo#bar {a: b}
|
478
|
-
h1.baz {@extend .foo}
|
479
|
-
SCSS
|
480
|
-
|
481
|
-
assert_equal <<CSS, render(<<SCSS)
|
482
|
-
a.foo#bar {
|
483
|
-
a: b; }
|
484
|
-
CSS
|
485
|
-
a.foo#bar {a: b}
|
486
|
-
.bang#baz {@extend .foo}
|
487
|
-
SCSS
|
343
|
+
assert_extends 'a.foo#bar', 'h1.baz {@extend .foo}', 'a.foo#bar'
|
344
|
+
assert_extends 'a.foo#bar', '.bang#baz {@extend .foo}', 'a.foo#bar'
|
488
345
|
end
|
489
346
|
|
490
347
|
## Nested Extenders
|
491
348
|
|
492
349
|
def test_nested_extender
|
493
|
-
|
494
|
-
.foo, foo bar {
|
495
|
-
a: b; }
|
496
|
-
CSS
|
497
|
-
.foo {a: b}
|
498
|
-
foo bar {@extend .foo}
|
499
|
-
SCSS
|
350
|
+
assert_extends '.foo', 'foo bar {@extend .foo}', '.foo, foo bar'
|
500
351
|
end
|
501
352
|
|
502
353
|
def test_nested_extender_runs_unification
|
503
|
-
|
504
|
-
.foo.bar, foo bar.bar {
|
505
|
-
a: b; }
|
506
|
-
CSS
|
507
|
-
.foo.bar {a: b}
|
508
|
-
foo bar {@extend .foo}
|
509
|
-
SCSS
|
354
|
+
assert_extends '.foo.bar', 'foo bar {@extend .foo}', '.foo.bar, foo bar.bar'
|
510
355
|
end
|
511
356
|
|
512
357
|
def test_nested_extender_aborts_unification
|
513
|
-
|
514
|
-
baz.foo {
|
515
|
-
a: b; }
|
516
|
-
CSS
|
517
|
-
baz.foo {a: b}
|
518
|
-
foo bar {@extend .foo}
|
519
|
-
SCSS
|
358
|
+
assert_extends 'baz.foo', 'foo bar {@extend .foo}', 'baz.foo'
|
520
359
|
end
|
521
360
|
|
522
361
|
def test_nested_extender_alternates_parents
|
523
|
-
|
524
|
-
.baz .bip .foo, .baz .bip foo .grank bar, foo .grank .baz .bip bar
|
525
|
-
a: b; }
|
526
|
-
CSS
|
527
|
-
.baz .bip .foo {a: b}
|
528
|
-
foo .grank bar {@extend .foo}
|
529
|
-
SCSS
|
362
|
+
assert_extends('.baz .bip .foo', 'foo .grank bar {@extend .foo}',
|
363
|
+
'.baz .bip .foo, .baz .bip foo .grank bar, foo .grank .baz .bip bar')
|
530
364
|
end
|
531
365
|
|
532
366
|
def test_nested_extender_unifies_identical_parents
|
533
|
-
|
534
|
-
.baz .bip .foo, .baz .bip bar
|
535
|
-
a: b; }
|
536
|
-
CSS
|
537
|
-
.baz .bip .foo {a: b}
|
538
|
-
.baz .bip bar {@extend .foo}
|
539
|
-
SCSS
|
367
|
+
assert_extends('.baz .bip .foo', '.baz .bip bar {@extend .foo}',
|
368
|
+
'.baz .bip .foo, .baz .bip bar')
|
540
369
|
end
|
541
370
|
|
542
371
|
def test_nested_extender_unifies_common_substring
|
543
|
-
|
544
|
-
.baz .bip .bap .bink .foo, .baz .brat .bip .bap .bink bar, .brat .baz .bip .bap .bink bar
|
545
|
-
a: b; }
|
546
|
-
CSS
|
547
|
-
.baz .bip .bap .bink .foo {a: b}
|
548
|
-
.brat .bip .bap bar {@extend .foo}
|
549
|
-
SCSS
|
372
|
+
assert_extends('.baz .bip .bap .bink .foo', '.brat .bip .bap bar {@extend .foo}',
|
373
|
+
'.baz .bip .bap .bink .foo, .baz .brat .bip .bap .bink bar, .brat .baz .bip .bap .bink bar')
|
550
374
|
end
|
551
375
|
|
552
376
|
def test_nested_extender_unifies_common_subseq
|
553
|
-
|
554
|
-
.a .x .b .y .foo, .a .x .n .b .y .m bar, .a .n .x .b .y .m bar, .a .x .n .b .m .y bar, .a .n .x .b .m .y bar
|
555
|
-
a: b; }
|
556
|
-
CSS
|
557
|
-
.a .x .b .y .foo {a: b}
|
558
|
-
.a .n .b .m bar {@extend .foo}
|
559
|
-
SCSS
|
377
|
+
assert_extends('.a .x .b .y .foo', '.a .n .b .m bar {@extend .foo}',
|
378
|
+
'.a .x .b .y .foo, .a .x .n .b .y .m bar, .a .n .x .b .y .m bar, .a .x .n .b .m .y bar, .a .n .x .b .m .y bar')
|
560
379
|
end
|
561
380
|
|
562
381
|
def test_nested_extender_chooses_first_subseq
|
563
|
-
|
564
|
-
.a .b .c .d .foo, .a .b .c .d .a .b .bar
|
565
|
-
a: b; }
|
566
|
-
CSS
|
567
|
-
.a .b .c .d .foo {a: b}
|
568
|
-
.c .d .a .b .bar {@extend .foo}
|
569
|
-
SCSS
|
382
|
+
assert_extends('.a .b .c .d .foo', '.c .d .a .b .bar {@extend .foo}',
|
383
|
+
'.a .b .c .d .foo, .a .b .c .d .a .b .bar')
|
570
384
|
end
|
571
385
|
|
572
386
|
def test_nested_extender_counts_extended_subselectors
|
573
|
-
|
574
|
-
.a .bip.bop .foo, .a .b .bip.bop .bar, .b .a .bip.bop .bar
|
575
|
-
a: b; }
|
576
|
-
CSS
|
577
|
-
.a .bip.bop .foo {a: b}
|
578
|
-
.b .bip .bar {@extend .foo}
|
579
|
-
SCSS
|
387
|
+
assert_extends('.a .bip.bop .foo', '.b .bip .bar {@extend .foo}',
|
388
|
+
'.a .bip.bop .foo, .a .b .bip.bop .bar, .b .a .bip.bop .bar')
|
580
389
|
end
|
581
390
|
|
582
391
|
def test_nested_extender_counts_extended_superselectors
|
583
|
-
|
584
|
-
.a .bip .foo, .a .b .bip.bop .bar, .b .a .bip.bop .bar
|
585
|
-
a: b; }
|
586
|
-
CSS
|
587
|
-
.a .bip .foo {a: b}
|
588
|
-
.b .bip.bop .bar {@extend .foo}
|
589
|
-
SCSS
|
392
|
+
assert_extends('.a .bip .foo', '.b .bip.bop .bar {@extend .foo}',
|
393
|
+
'.a .bip .foo, .a .b .bip.bop .bar, .b .a .bip.bop .bar')
|
590
394
|
end
|
591
395
|
|
592
396
|
def test_nested_extender_with_child_selector
|
593
|
-
|
594
|
-
.baz .foo, .baz foo > bar {
|
595
|
-
a: b; }
|
596
|
-
CSS
|
597
|
-
.baz .foo {a: b}
|
598
|
-
foo > bar {@extend .foo}
|
599
|
-
SCSS
|
397
|
+
assert_extends '.baz .foo', 'foo > bar {@extend .foo}', '.baz .foo, .baz foo > bar'
|
600
398
|
end
|
601
399
|
|
602
400
|
def test_nested_extender_finds_common_selectors_around_child_selector
|
603
|
-
|
604
|
-
a > b c .c1, a > b c .c2
|
605
|
-
a: b; }
|
606
|
-
CSS
|
607
|
-
a > b c .c1 {a: b}
|
608
|
-
a c .c2 {@extend .c1}
|
609
|
-
SCSS
|
610
|
-
|
611
|
-
assert_equal <<CSS, render(<<SCSS)
|
612
|
-
a > b c .c1, a > b c .c2 {
|
613
|
-
a: b; }
|
614
|
-
CSS
|
615
|
-
a > b c .c1 {a: b}
|
616
|
-
b c .c2 {@extend .c1}
|
617
|
-
SCSS
|
401
|
+
assert_extends 'a > b c .c1', 'a c .c2 {@extend .c1}', 'a > b c .c1, a > b c .c2'
|
402
|
+
assert_extends 'a > b c .c1', 'b c .c2 {@extend .c1}', 'a > b c .c1, a > b c .c2'
|
618
403
|
end
|
619
404
|
|
620
405
|
def test_nested_extender_doesnt_find_common_selectors_around_adjacent_sibling_selector
|
621
|
-
|
622
|
-
a + b c .c1, a + b
|
623
|
-
|
624
|
-
CSS
|
625
|
-
a + b c .c1 {a: b}
|
626
|
-
a c .c2 {@extend .c1}
|
627
|
-
SCSS
|
628
|
-
|
629
|
-
assert_equal <<CSS, render(<<SCSS)
|
630
|
-
a + b c .c1, a a + b c .c2 {
|
631
|
-
a: b; }
|
632
|
-
CSS
|
633
|
-
a + b c .c1 {a: b}
|
634
|
-
a b .c2 {@extend .c1}
|
635
|
-
SCSS
|
636
|
-
|
637
|
-
assert_equal <<CSS, render(<<SCSS)
|
638
|
-
a + b c .c1, a + b c .c2 {
|
639
|
-
a: b; }
|
640
|
-
CSS
|
641
|
-
a + b c .c1 {a: b}
|
642
|
-
b c .c2 {@extend .c1}
|
643
|
-
SCSS
|
406
|
+
assert_extends 'a + b c .c1', 'a c .c2 {@extend .c1}', 'a + b c .c1, a + b a c .c2, a a + b c .c2'
|
407
|
+
assert_extends 'a + b c .c1', 'a b .c2 {@extend .c1}', 'a + b c .c1, a a + b c .c2'
|
408
|
+
assert_extends 'a + b c .c1', 'b c .c2 {@extend .c1}', 'a + b c .c1, a + b c .c2'
|
644
409
|
end
|
645
410
|
|
646
411
|
def test_nested_extender_doesnt_find_common_selectors_around_sibling_selector
|
647
|
-
|
648
|
-
a ~ b c .c1, a ~ b
|
649
|
-
|
650
|
-
CSS
|
651
|
-
a ~ b c .c1 {a: b}
|
652
|
-
a c .c2 {@extend .c1}
|
653
|
-
SCSS
|
654
|
-
|
655
|
-
assert_equal <<CSS, render(<<SCSS)
|
656
|
-
a ~ b c .c1, a a ~ b c .c2 {
|
657
|
-
a: b; }
|
658
|
-
CSS
|
659
|
-
a ~ b c .c1 {a: b}
|
660
|
-
a b .c2 {@extend .c1}
|
661
|
-
SCSS
|
662
|
-
|
663
|
-
assert_equal <<CSS, render(<<SCSS)
|
664
|
-
a ~ b c .c1, a ~ b c .c2 {
|
665
|
-
a: b; }
|
666
|
-
CSS
|
667
|
-
a ~ b c .c1 {a: b}
|
668
|
-
b c .c2 {@extend .c1}
|
669
|
-
SCSS
|
412
|
+
assert_extends 'a ~ b c .c1', 'a c .c2 {@extend .c1}', 'a ~ b c .c1, a ~ b a c .c2, a a ~ b c .c2'
|
413
|
+
assert_extends 'a ~ b c .c1', 'a b .c2 {@extend .c1}', 'a ~ b c .c1, a a ~ b c .c2'
|
414
|
+
assert_extends 'a ~ b c .c1', 'b c .c2 {@extend .c1}', 'a ~ b c .c1, a ~ b c .c2'
|
670
415
|
end
|
671
416
|
|
672
417
|
def test_nested_extender_with_early_child_selectors_doesnt_subseq_them
|
673
|
-
|
674
|
-
.bip > .bap .foo, .bip > .bap .grip > .bap .bar, .grip > .bap .bip > .bap .bar
|
675
|
-
|
676
|
-
|
677
|
-
.bip > .bap .foo {a: b}
|
678
|
-
.grip > .bap .bar {@extend .foo}
|
679
|
-
SCSS
|
680
|
-
|
681
|
-
assert_equal <<CSS, render(<<SCSS)
|
682
|
-
.bap > .bip .foo, .bap > .bip .bap > .grip .bar, .bap > .grip .bap > .bip .bar {
|
683
|
-
a: b; }
|
684
|
-
CSS
|
685
|
-
.bap > .bip .foo {a: b}
|
686
|
-
.bap > .grip .bar {@extend .foo}
|
687
|
-
SCSS
|
418
|
+
assert_extends('.bip > .bap .foo', '.grip > .bap .bar {@extend .foo}',
|
419
|
+
'.bip > .bap .foo, .bip > .bap .grip > .bap .bar, .grip > .bap .bip > .bap .bar')
|
420
|
+
assert_extends('.bap > .bip .foo', '.bap > .grip .bar {@extend .foo}',
|
421
|
+
'.bap > .bip .foo, .bap > .bip .bap > .grip .bar, .bap > .grip .bap > .bip .bar')
|
688
422
|
end
|
689
423
|
|
690
424
|
def test_nested_extender_with_child_selector_unifies
|
691
|
-
|
692
|
-
.baz.foo, foo > bar.baz {
|
693
|
-
a: b; }
|
694
|
-
CSS
|
695
|
-
.baz.foo {a: b}
|
696
|
-
foo > bar {@extend .foo}
|
697
|
-
SCSS
|
425
|
+
assert_extends '.baz.foo', 'foo > bar {@extend .foo}', '.baz.foo, foo > bar.baz'
|
698
426
|
|
699
427
|
assert_equal <<CSS, render(<<SCSS)
|
700
428
|
.baz > .foo, .baz > .bar {
|
@@ -736,29 +464,9 @@ CSS
|
|
736
464
|
}
|
737
465
|
SCSS
|
738
466
|
|
739
|
-
|
740
|
-
.foo > .bar, .foo
|
741
|
-
|
742
|
-
CSS
|
743
|
-
.foo > .bar {a: b}
|
744
|
-
.bip + .baz {@extend .bar}
|
745
|
-
SCSS
|
746
|
-
|
747
|
-
assert_equal <<CSS, render(<<SCSS)
|
748
|
-
.foo + .bar, .bip > .foo + .baz {
|
749
|
-
a: b; }
|
750
|
-
CSS
|
751
|
-
.foo + .bar {a: b}
|
752
|
-
.bip > .baz {@extend .bar}
|
753
|
-
SCSS
|
754
|
-
|
755
|
-
assert_equal <<CSS, render(<<SCSS)
|
756
|
-
.foo > .bar, .bip.foo > .baz {
|
757
|
-
a: b; }
|
758
|
-
CSS
|
759
|
-
.foo > .bar {a: b}
|
760
|
-
.bip > .baz {@extend .bar}
|
761
|
-
SCSS
|
467
|
+
assert_extends '.foo > .bar', '.bip + .baz {@extend .bar}', '.foo > .bar, .foo > .bip + .baz'
|
468
|
+
assert_extends '.foo + .bar', '.bip > .baz {@extend .bar}', '.foo + .bar, .bip > .foo + .baz'
|
469
|
+
assert_extends '.foo > .bar', '.bip > .baz {@extend .bar}', '.foo > .bar, .bip.foo > .baz'
|
762
470
|
end
|
763
471
|
|
764
472
|
def test_nested_extender_with_trailing_child_selector
|
@@ -768,31 +476,13 @@ SCSS
|
|
768
476
|
end
|
769
477
|
|
770
478
|
def test_nested_extender_with_sibling_selector
|
771
|
-
|
772
|
-
.baz .foo, .baz foo + bar {
|
773
|
-
a: b; }
|
774
|
-
CSS
|
775
|
-
.baz .foo {a: b}
|
776
|
-
foo + bar {@extend .foo}
|
777
|
-
SCSS
|
479
|
+
assert_extends '.baz .foo', 'foo + bar {@extend .foo}', '.baz .foo, .baz foo + bar'
|
778
480
|
end
|
779
481
|
|
780
482
|
def test_nested_extender_with_hacky_selector
|
781
|
-
|
782
|
-
.baz .foo, .baz foo + > > + bar, foo .baz + > > + bar
|
783
|
-
|
784
|
-
CSS
|
785
|
-
.baz .foo {a: b}
|
786
|
-
foo + > > + bar {@extend .foo}
|
787
|
-
SCSS
|
788
|
-
|
789
|
-
assert_equal <<CSS, render(<<SCSS)
|
790
|
-
.baz .foo, > > .baz bar {
|
791
|
-
a: b; }
|
792
|
-
CSS
|
793
|
-
.baz .foo {a: b}
|
794
|
-
> > bar {@extend .foo}
|
795
|
-
SCSS
|
483
|
+
assert_extends('.baz .foo', 'foo + > > + bar {@extend .foo}',
|
484
|
+
'.baz .foo, .baz foo + > > + bar, foo .baz + > > + bar')
|
485
|
+
assert_extends '.baz .foo', '> > bar {@extend .foo}', '.baz .foo, > > .baz bar'
|
796
486
|
end
|
797
487
|
|
798
488
|
def test_nested_extender_merges_with_same_selector
|
@@ -807,393 +497,82 @@ SCSS
|
|
807
497
|
end
|
808
498
|
|
809
499
|
def test_nested_extender_with_child_selector_merges_with_same_selector
|
810
|
-
|
811
|
-
.foo > .bar .baz, .foo > .bar .bang
|
812
|
-
a: b; }
|
813
|
-
CSS
|
814
|
-
.foo > .bar .baz {a: b}
|
815
|
-
.foo > .bar .bang {@extend .baz}
|
816
|
-
SCSS
|
500
|
+
assert_extends('.foo > .bar .baz', '.foo > .bar .bang {@extend .baz}',
|
501
|
+
'.foo > .bar .baz, .foo > .bar .bang')
|
817
502
|
end
|
818
503
|
|
819
504
|
# Combinator Unification
|
820
505
|
|
821
506
|
def test_combinator_unification_for_hacky_combinators
|
822
|
-
|
823
|
-
.a > + x, .a .b > + y, .b .a > + y
|
824
|
-
|
825
|
-
|
826
|
-
.a > + x
|
827
|
-
.b y {@extend x}
|
828
|
-
|
829
|
-
|
830
|
-
assert_equal <<CSS, render(<<SCSS)
|
831
|
-
.a x, .a .b > + y, .b .a > + y {
|
832
|
-
a: b; }
|
833
|
-
CSS
|
834
|
-
.a x {a: b}
|
835
|
-
.b > + y {@extend x}
|
836
|
-
SCSS
|
837
|
-
|
838
|
-
assert_equal <<CSS, render(<<SCSS)
|
839
|
-
.a > + x, .a .b > + y, .b .a > + y {
|
840
|
-
a: b; }
|
841
|
-
CSS
|
842
|
-
.a > + x {a: b}
|
843
|
-
.b > + y {@extend x}
|
844
|
-
SCSS
|
845
|
-
|
846
|
-
assert_equal <<CSS, render(<<SCSS)
|
847
|
-
.a ~ > + x, .a .b ~ > + y, .b .a ~ > + y {
|
848
|
-
a: b; }
|
849
|
-
CSS
|
850
|
-
.a ~ > + x {a: b}
|
851
|
-
.b > + y {@extend x}
|
852
|
-
SCSS
|
853
|
-
|
854
|
-
assert_equal <<CSS, render(<<SCSS)
|
855
|
-
.a + > x {
|
856
|
-
a: b; }
|
857
|
-
CSS
|
858
|
-
.a + > x {a: b}
|
859
|
-
.b > + y {@extend x}
|
860
|
-
SCSS
|
861
|
-
|
862
|
-
assert_equal <<CSS, render(<<SCSS)
|
863
|
-
.a + > x {
|
864
|
-
a: b; }
|
865
|
-
CSS
|
866
|
-
.a + > x {a: b}
|
867
|
-
.b > + y {@extend x}
|
868
|
-
SCSS
|
869
|
-
|
870
|
-
assert_equal <<CSS, render(<<SCSS)
|
871
|
-
.a ~ > + .b > x, .a .c ~ > + .d.b > y, .c .a ~ > + .d.b > y {
|
872
|
-
a: b; }
|
873
|
-
CSS
|
874
|
-
.a ~ > + .b > x {a: b}
|
875
|
-
.c > + .d > y {@extend x}
|
876
|
-
SCSS
|
507
|
+
assert_extends '.a > + x', '.b y {@extend x}', '.a > + x, .a .b > + y, .b .a > + y'
|
508
|
+
assert_extends '.a x', '.b > + y {@extend x}', '.a x, .a .b > + y, .b .a > + y'
|
509
|
+
assert_extends '.a > + x', '.b > + y {@extend x}', '.a > + x, .a .b > + y, .b .a > + y'
|
510
|
+
assert_extends '.a ~ > + x', '.b > + y {@extend x}', '.a ~ > + x, .a .b ~ > + y, .b .a ~ > + y'
|
511
|
+
assert_extends '.a + > x', '.b > + y {@extend x}', '.a + > x'
|
512
|
+
assert_extends '.a + > x', '.b > + y {@extend x}', '.a + > x'
|
513
|
+
assert_extends '.a ~ > + .b > x', '.c > + .d > y {@extend x}', '.a ~ > + .b > x, .a .c ~ > + .d.b > y, .c .a ~ > + .d.b > y'
|
877
514
|
end
|
878
515
|
|
879
516
|
def test_combinator_unification_double_tilde
|
880
|
-
|
881
|
-
.a.b ~ x, .a.b ~ y
|
882
|
-
|
883
|
-
|
884
|
-
.a.b ~ x {a: b}
|
885
|
-
.a ~ y {@extend x}
|
886
|
-
SCSS
|
887
|
-
|
888
|
-
assert_equal <<CSS, render(<<SCSS)
|
889
|
-
.a ~ x, .a.b ~ y {
|
890
|
-
a: b; }
|
891
|
-
CSS
|
892
|
-
.a ~ x {a: b}
|
893
|
-
.a.b ~ y {@extend x}
|
894
|
-
SCSS
|
895
|
-
|
896
|
-
assert_equal <<CSS, render(<<SCSS)
|
897
|
-
.a ~ x, .a ~ .b ~ y, .b ~ .a ~ y, .b.a ~ y {
|
898
|
-
a: b; }
|
899
|
-
CSS
|
900
|
-
.a ~ x {a: b}
|
901
|
-
.b ~ y {@extend x}
|
902
|
-
SCSS
|
903
|
-
|
904
|
-
assert_equal <<CSS, render(<<SCSS)
|
905
|
-
a.a ~ x, a.a ~ b.b ~ y, b.b ~ a.a ~ y {
|
906
|
-
a: b; }
|
907
|
-
CSS
|
908
|
-
a.a ~ x {a: b}
|
909
|
-
b.b ~ y {@extend x}
|
910
|
-
SCSS
|
517
|
+
assert_extends '.a.b ~ x', '.a ~ y {@extend x}', '.a.b ~ x, .a.b ~ y'
|
518
|
+
assert_extends '.a ~ x', '.a.b ~ y {@extend x}', '.a ~ x, .a.b ~ y'
|
519
|
+
assert_extends '.a ~ x', '.b ~ y {@extend x}', '.a ~ x, .a ~ .b ~ y, .b ~ .a ~ y, .b.a ~ y'
|
520
|
+
assert_extends 'a.a ~ x', 'b.b ~ y {@extend x}', 'a.a ~ x, a.a ~ b.b ~ y, b.b ~ a.a ~ y'
|
911
521
|
end
|
912
522
|
|
913
523
|
def test_combinator_unification_tilde_plus
|
914
|
-
|
915
|
-
.a.b + x, .a.b + y
|
916
|
-
|
917
|
-
|
918
|
-
.a.b + x
|
919
|
-
.a ~ y {@extend x}
|
920
|
-
|
921
|
-
|
922
|
-
assert_equal <<CSS, render(<<SCSS)
|
923
|
-
.a + x, .a.b ~ .a + y, .a.b + y {
|
924
|
-
a: b; }
|
925
|
-
CSS
|
926
|
-
.a + x {a: b}
|
927
|
-
.a.b ~ y {@extend x}
|
928
|
-
SCSS
|
929
|
-
|
930
|
-
assert_equal <<CSS, render(<<SCSS)
|
931
|
-
.a + x, .b ~ .a + y, .b.a + y {
|
932
|
-
a: b; }
|
933
|
-
CSS
|
934
|
-
.a + x {a: b}
|
935
|
-
.b ~ y {@extend x}
|
936
|
-
SCSS
|
937
|
-
|
938
|
-
assert_equal <<CSS, render(<<SCSS)
|
939
|
-
a.a + x, b.b ~ a.a + y {
|
940
|
-
a: b; }
|
941
|
-
CSS
|
942
|
-
a.a + x {a: b}
|
943
|
-
b.b ~ y {@extend x}
|
944
|
-
SCSS
|
945
|
-
|
946
|
-
assert_equal <<CSS, render(<<SCSS)
|
947
|
-
.a.b ~ x, .a.b ~ .a + y, .a.b + y {
|
948
|
-
a: b; }
|
949
|
-
CSS
|
950
|
-
.a.b ~ x {a: b}
|
951
|
-
.a + y {@extend x}
|
952
|
-
SCSS
|
953
|
-
|
954
|
-
assert_equal <<CSS, render(<<SCSS)
|
955
|
-
.a ~ x, .a.b + y {
|
956
|
-
a: b; }
|
957
|
-
CSS
|
958
|
-
.a ~ x {a: b}
|
959
|
-
.a.b + y {@extend x}
|
960
|
-
SCSS
|
961
|
-
|
962
|
-
assert_equal <<CSS, render(<<SCSS)
|
963
|
-
.a ~ x, .a ~ .b + y, .a.b + y {
|
964
|
-
a: b; }
|
965
|
-
CSS
|
966
|
-
.a ~ x {a: b}
|
967
|
-
.b + y {@extend x}
|
968
|
-
SCSS
|
969
|
-
|
970
|
-
assert_equal <<CSS, render(<<SCSS)
|
971
|
-
a.a ~ x, a.a ~ b.b + y {
|
972
|
-
a: b; }
|
973
|
-
CSS
|
974
|
-
a.a ~ x {a: b}
|
975
|
-
b.b + y {@extend x}
|
976
|
-
SCSS
|
524
|
+
assert_extends '.a.b + x', '.a ~ y {@extend x}', '.a.b + x, .a.b + y'
|
525
|
+
assert_extends '.a + x', '.a.b ~ y {@extend x}', '.a + x, .a.b ~ .a + y, .a.b + y'
|
526
|
+
assert_extends '.a + x', '.b ~ y {@extend x}', '.a + x, .b ~ .a + y, .b.a + y'
|
527
|
+
assert_extends 'a.a + x', 'b.b ~ y {@extend x}', 'a.a + x, b.b ~ a.a + y'
|
528
|
+
assert_extends '.a.b ~ x', '.a + y {@extend x}', '.a.b ~ x, .a.b ~ .a + y, .a.b + y'
|
529
|
+
assert_extends '.a ~ x', '.a.b + y {@extend x}', '.a ~ x, .a.b + y'
|
530
|
+
assert_extends '.a ~ x', '.b + y {@extend x}', '.a ~ x, .a ~ .b + y, .a.b + y'
|
531
|
+
assert_extends 'a.a ~ x', 'b.b + y {@extend x}', 'a.a ~ x, a.a ~ b.b + y'
|
977
532
|
end
|
978
533
|
|
979
534
|
def test_combinator_unification_angle_sibling
|
980
|
-
|
981
|
-
.a > x, .a > .b
|
982
|
-
|
983
|
-
|
984
|
-
.a > x {a: b}
|
985
|
-
.b ~ y {@extend x}
|
986
|
-
SCSS
|
987
|
-
|
988
|
-
assert_equal <<CSS, render(<<SCSS)
|
989
|
-
.a > x, .a > .b + y {
|
990
|
-
a: b; }
|
991
|
-
CSS
|
992
|
-
.a > x {a: b}
|
993
|
-
.b + y {@extend x}
|
994
|
-
SCSS
|
995
|
-
|
996
|
-
assert_equal <<CSS, render(<<SCSS)
|
997
|
-
.a ~ x, .b > .a ~ y {
|
998
|
-
a: b; }
|
999
|
-
CSS
|
1000
|
-
.a ~ x {a: b}
|
1001
|
-
.b > y {@extend x}
|
1002
|
-
SCSS
|
1003
|
-
|
1004
|
-
assert_equal <<CSS, render(<<SCSS)
|
1005
|
-
.a + x, .b > .a + y {
|
1006
|
-
a: b; }
|
1007
|
-
CSS
|
1008
|
-
.a + x {a: b}
|
1009
|
-
.b > y {@extend x}
|
1010
|
-
SCSS
|
535
|
+
assert_extends '.a > x', '.b ~ y {@extend x}', '.a > x, .a > .b ~ y'
|
536
|
+
assert_extends '.a > x', '.b + y {@extend x}', '.a > x, .a > .b + y'
|
537
|
+
assert_extends '.a ~ x', '.b > y {@extend x}', '.a ~ x, .b > .a ~ y'
|
538
|
+
assert_extends '.a + x', '.b > y {@extend x}', '.a + x, .b > .a + y'
|
1011
539
|
end
|
1012
540
|
|
1013
541
|
def test_combinator_unification_double_angle
|
1014
|
-
|
1015
|
-
.a.b > x, .
|
1016
|
-
|
1017
|
-
|
1018
|
-
.a.b > x {a: b}
|
1019
|
-
.b > y {@extend x}
|
1020
|
-
SCSS
|
1021
|
-
|
1022
|
-
assert_equal <<CSS, render(<<SCSS)
|
1023
|
-
.a > x, .a.b > y {
|
1024
|
-
a: b; }
|
1025
|
-
CSS
|
1026
|
-
.a > x {a: b}
|
1027
|
-
.a.b > y {@extend x}
|
1028
|
-
SCSS
|
1029
|
-
|
1030
|
-
assert_equal <<CSS, render(<<SCSS)
|
1031
|
-
.a > x, .b.a > y {
|
1032
|
-
a: b; }
|
1033
|
-
CSS
|
1034
|
-
.a > x {a: b}
|
1035
|
-
.b > y {@extend x}
|
1036
|
-
SCSS
|
1037
|
-
|
1038
|
-
assert_equal <<CSS, render(<<SCSS)
|
1039
|
-
a.a > x {
|
1040
|
-
a: b; }
|
1041
|
-
CSS
|
1042
|
-
a.a > x {a: b}
|
1043
|
-
b.b > y {@extend x}
|
1044
|
-
SCSS
|
542
|
+
assert_extends '.a.b > x', '.b > y {@extend x}', '.a.b > x, .b.a > y'
|
543
|
+
assert_extends '.a > x', '.a.b > y {@extend x}', '.a > x, .a.b > y'
|
544
|
+
assert_extends '.a > x', '.b > y {@extend x}', '.a > x, .b.a > y'
|
545
|
+
assert_extends 'a.a > x', 'b.b > y {@extend x}', 'a.a > x'
|
1045
546
|
end
|
1046
547
|
|
1047
548
|
def test_combinator_unification_double_plus
|
1048
|
-
|
1049
|
-
.a.b + x, .
|
1050
|
-
|
1051
|
-
|
1052
|
-
.a.b + x {a: b}
|
1053
|
-
.b + y {@extend x}
|
1054
|
-
SCSS
|
1055
|
-
|
1056
|
-
assert_equal <<CSS, render(<<SCSS)
|
1057
|
-
.a + x, .a.b + y {
|
1058
|
-
a: b; }
|
1059
|
-
CSS
|
1060
|
-
.a + x {a: b}
|
1061
|
-
.a.b + y {@extend x}
|
1062
|
-
SCSS
|
1063
|
-
|
1064
|
-
assert_equal <<CSS, render(<<SCSS)
|
1065
|
-
.a + x, .b.a + y {
|
1066
|
-
a: b; }
|
1067
|
-
CSS
|
1068
|
-
.a + x {a: b}
|
1069
|
-
.b + y {@extend x}
|
1070
|
-
SCSS
|
1071
|
-
|
1072
|
-
assert_equal <<CSS, render(<<SCSS)
|
1073
|
-
a.a + x {
|
1074
|
-
a: b; }
|
1075
|
-
CSS
|
1076
|
-
a.a + x {a: b}
|
1077
|
-
b.b + y {@extend x}
|
1078
|
-
SCSS
|
549
|
+
assert_extends '.a.b + x', '.b + y {@extend x}', '.a.b + x, .b.a + y'
|
550
|
+
assert_extends '.a + x', '.a.b + y {@extend x}', '.a + x, .a.b + y'
|
551
|
+
assert_extends '.a + x', '.b + y {@extend x}', '.a + x, .b.a + y'
|
552
|
+
assert_extends 'a.a + x', 'b.b + y {@extend x}', 'a.a + x'
|
1079
553
|
end
|
1080
554
|
|
1081
555
|
def test_combinator_unification_angle_space
|
1082
|
-
|
1083
|
-
.a.b > x, .a.b > y
|
1084
|
-
|
1085
|
-
|
1086
|
-
.a.b > x
|
1087
|
-
.a y {@extend x}
|
1088
|
-
SCSS
|
1089
|
-
|
1090
|
-
assert_equal <<CSS, render(<<SCSS)
|
1091
|
-
.a > x, .a.b .a > y {
|
1092
|
-
a: b; }
|
1093
|
-
CSS
|
1094
|
-
.a > x {a: b}
|
1095
|
-
.a.b y {@extend x}
|
1096
|
-
SCSS
|
1097
|
-
|
1098
|
-
assert_equal <<CSS, render(<<SCSS)
|
1099
|
-
.a > x, .b .a > y {
|
1100
|
-
a: b; }
|
1101
|
-
CSS
|
1102
|
-
.a > x {a: b}
|
1103
|
-
.b y {@extend x}
|
1104
|
-
SCSS
|
1105
|
-
|
1106
|
-
assert_equal <<CSS, render(<<SCSS)
|
1107
|
-
.a.b x, .a.b .a > y {
|
1108
|
-
a: b; }
|
1109
|
-
CSS
|
1110
|
-
.a.b x {a: b}
|
1111
|
-
.a > y {@extend x}
|
1112
|
-
SCSS
|
1113
|
-
|
1114
|
-
assert_equal <<CSS, render(<<SCSS)
|
1115
|
-
.a x, .a.b > y {
|
1116
|
-
a: b; }
|
1117
|
-
CSS
|
1118
|
-
.a x {a: b}
|
1119
|
-
.a.b > y {@extend x}
|
1120
|
-
SCSS
|
1121
|
-
|
1122
|
-
assert_equal <<CSS, render(<<SCSS)
|
1123
|
-
.a x, .a .b > y {
|
1124
|
-
a: b; }
|
1125
|
-
CSS
|
1126
|
-
.a x {a: b}
|
1127
|
-
.b > y {@extend x}
|
1128
|
-
SCSS
|
556
|
+
assert_extends '.a.b > x', '.a y {@extend x}', '.a.b > x, .a.b > y'
|
557
|
+
assert_extends '.a > x', '.a.b y {@extend x}', '.a > x, .a.b .a > y'
|
558
|
+
assert_extends '.a > x', '.b y {@extend x}', '.a > x, .b .a > y'
|
559
|
+
assert_extends '.a.b x', '.a > y {@extend x}', '.a.b x, .a.b .a > y'
|
560
|
+
assert_extends '.a x', '.a.b > y {@extend x}', '.a x, .a.b > y'
|
561
|
+
assert_extends '.a x', '.b > y {@extend x}', '.a x, .a .b > y'
|
1129
562
|
end
|
1130
563
|
|
1131
564
|
def test_combinator_unification_plus_space
|
1132
|
-
|
1133
|
-
.a.b
|
1134
|
-
|
1135
|
-
|
1136
|
-
.a.b + x
|
1137
|
-
.a y {@extend x}
|
1138
|
-
SCSS
|
1139
|
-
|
1140
|
-
assert_equal <<CSS, render(<<SCSS)
|
1141
|
-
.a + x, .a.b .a + y {
|
1142
|
-
a: b; }
|
1143
|
-
CSS
|
1144
|
-
.a + x {a: b}
|
1145
|
-
.a.b y {@extend x}
|
1146
|
-
SCSS
|
1147
|
-
|
1148
|
-
assert_equal <<CSS, render(<<SCSS)
|
1149
|
-
.a + x, .b .a + y {
|
1150
|
-
a: b; }
|
1151
|
-
CSS
|
1152
|
-
.a + x {a: b}
|
1153
|
-
.b y {@extend x}
|
1154
|
-
SCSS
|
1155
|
-
|
1156
|
-
assert_equal <<CSS, render(<<SCSS)
|
1157
|
-
.a.b x, .a.b .a + y {
|
1158
|
-
a: b; }
|
1159
|
-
CSS
|
1160
|
-
.a.b x {a: b}
|
1161
|
-
.a + y {@extend x}
|
1162
|
-
SCSS
|
1163
|
-
|
1164
|
-
assert_equal <<CSS, render(<<SCSS)
|
1165
|
-
.a x, .a .a.b + y {
|
1166
|
-
a: b; }
|
1167
|
-
CSS
|
1168
|
-
.a x {a: b}
|
1169
|
-
.a.b + y {@extend x}
|
1170
|
-
SCSS
|
1171
|
-
|
1172
|
-
assert_equal <<CSS, render(<<SCSS)
|
1173
|
-
.a x, .a .b + y {
|
1174
|
-
a: b; }
|
1175
|
-
CSS
|
1176
|
-
.a x {a: b}
|
1177
|
-
.b + y {@extend x}
|
1178
|
-
SCSS
|
565
|
+
assert_extends '.a.b + x', '.a y {@extend x}', '.a.b + x, .a .a.b + y'
|
566
|
+
assert_extends '.a + x', '.a.b y {@extend x}', '.a + x, .a.b .a + y'
|
567
|
+
assert_extends '.a + x', '.b y {@extend x}', '.a + x, .b .a + y'
|
568
|
+
assert_extends '.a.b x', '.a + y {@extend x}', '.a.b x, .a.b .a + y'
|
569
|
+
assert_extends '.a x', '.a.b + y {@extend x}', '.a x, .a .a.b + y'
|
570
|
+
assert_extends '.a x', '.b + y {@extend x}', '.a x, .a .b + y'
|
1179
571
|
end
|
1180
572
|
|
1181
573
|
def test_combinator_unification_nested
|
1182
|
-
|
1183
|
-
.a > .b + x, .c.a > .
|
1184
|
-
a: b; }
|
1185
|
-
CSS
|
1186
|
-
.a > .b + x {a: b}
|
1187
|
-
.c > .d + y {@extend x}
|
1188
|
-
SCSS
|
1189
|
-
|
1190
|
-
assert_equal <<CSS, render(<<SCSS)
|
1191
|
-
.a > .b + x, .c.a > .b + y {
|
1192
|
-
a: b; }
|
1193
|
-
CSS
|
1194
|
-
.a > .b + x {a: b}
|
1195
|
-
.c > y {@extend x}
|
1196
|
-
SCSS
|
574
|
+
assert_extends '.a > .b + x', '.c > .d + y {@extend x}', '.a > .b + x, .c.a > .d.b + y'
|
575
|
+
assert_extends '.a > .b + x', '.c > y {@extend x}', '.a > .b + x, .c.a > .b + y'
|
1197
576
|
end
|
1198
577
|
|
1199
578
|
def test_combinator_unification_with_newlines
|
@@ -1345,13 +724,7 @@ SCSS
|
|
1345
724
|
end
|
1346
725
|
|
1347
726
|
def test_basic_placeholder_selector
|
1348
|
-
|
1349
|
-
.bar {
|
1350
|
-
color: blue; }
|
1351
|
-
CSS
|
1352
|
-
%foo {color: blue}
|
1353
|
-
.bar {@extend %foo}
|
1354
|
-
SCSS
|
727
|
+
assert_extends '%foo', '.bar {@extend %foo}', '.bar'
|
1355
728
|
end
|
1356
729
|
|
1357
730
|
def test_unused_placeholder_selector
|
@@ -1366,13 +739,7 @@ SCSS
|
|
1366
739
|
end
|
1367
740
|
|
1368
741
|
def test_placeholder_descendant_selector
|
1369
|
-
|
1370
|
-
#context .bar a {
|
1371
|
-
color: blue; }
|
1372
|
-
CSS
|
1373
|
-
#context %foo a {color: blue}
|
1374
|
-
.bar {@extend %foo}
|
1375
|
-
SCSS
|
742
|
+
assert_extends '#context %foo a', '.bar {@extend %foo}', '#context .bar a'
|
1376
743
|
end
|
1377
744
|
|
1378
745
|
def test_semi_placeholder_selector
|
@@ -1463,43 +830,19 @@ SCSS
|
|
1463
830
|
end
|
1464
831
|
|
1465
832
|
def test_nested_selector_with_child_selector_hack_extendee
|
1466
|
-
|
1467
|
-
> .foo, > foo bar {
|
1468
|
-
a: b; }
|
1469
|
-
CSS
|
1470
|
-
> .foo {a: b}
|
1471
|
-
foo bar {@extend .foo}
|
1472
|
-
SCSS
|
833
|
+
assert_extends '> .foo', 'foo bar {@extend .foo}', '> .foo, > foo bar'
|
1473
834
|
end
|
1474
835
|
|
1475
836
|
def test_nested_selector_with_child_selector_hack_extender
|
1476
|
-
|
1477
|
-
.foo .bar, > .foo foo bar, > foo .foo bar {
|
1478
|
-
a: b; }
|
1479
|
-
CSS
|
1480
|
-
.foo .bar {a: b}
|
1481
|
-
> foo bar {@extend .bar}
|
1482
|
-
SCSS
|
837
|
+
assert_extends '.foo .bar', '> foo bar {@extend .bar}', '.foo .bar, > .foo foo bar, > foo .foo bar'
|
1483
838
|
end
|
1484
839
|
|
1485
840
|
def test_nested_selector_with_child_selector_hack_extender_and_extendee
|
1486
|
-
|
1487
|
-
> .foo, > foo bar {
|
1488
|
-
a: b; }
|
1489
|
-
CSS
|
1490
|
-
> .foo {a: b}
|
1491
|
-
> foo bar {@extend .foo}
|
1492
|
-
SCSS
|
841
|
+
assert_extends '> .foo', '> foo bar {@extend .foo}', '> .foo, > foo bar'
|
1493
842
|
end
|
1494
843
|
|
1495
844
|
def test_nested_selector_with_child_selector_hack_extender_and_sibling_selector_extendee
|
1496
|
-
|
1497
|
-
~ .foo {
|
1498
|
-
a: b; }
|
1499
|
-
CSS
|
1500
|
-
~ .foo {a: b}
|
1501
|
-
> foo bar {@extend .foo}
|
1502
|
-
SCSS
|
845
|
+
assert_extends '~ .foo', '> foo bar {@extend .foo}', '~ .foo'
|
1503
846
|
end
|
1504
847
|
|
1505
848
|
def test_nested_selector_with_child_selector_hack_extender_and_extendee_and_newline
|
@@ -1528,33 +871,15 @@ SCSS
|
|
1528
871
|
end
|
1529
872
|
|
1530
873
|
def test_extend_redundancy_elimination_when_it_would_reduce_specificity
|
1531
|
-
|
1532
|
-
a, a.foo {
|
1533
|
-
x: y; }
|
1534
|
-
CSS
|
1535
|
-
a {x: y}
|
1536
|
-
a.foo {@extend a}
|
1537
|
-
SCSS
|
874
|
+
assert_extends 'a', 'a.foo {@extend a}', 'a, a.foo'
|
1538
875
|
end
|
1539
876
|
|
1540
877
|
def test_extend_redundancy_elimination_when_it_would_preserve_specificity
|
1541
|
-
|
1542
|
-
.bar a {
|
1543
|
-
x: y; }
|
1544
|
-
CSS
|
1545
|
-
.bar a {x: y}
|
1546
|
-
a.foo {@extend a}
|
1547
|
-
SCSS
|
878
|
+
assert_extends '.bar a', 'a.foo {@extend a}', '.bar a'
|
1548
879
|
end
|
1549
880
|
|
1550
881
|
def test_extend_redundancy_elimination_never_eliminates_base_selector
|
1551
|
-
|
1552
|
-
a.foo, .foo {
|
1553
|
-
x: y; }
|
1554
|
-
CSS
|
1555
|
-
a.foo {x: y}
|
1556
|
-
.foo {@extend a}
|
1557
|
-
SCSS
|
882
|
+
assert_extends 'a.foo', '.foo {@extend a}', 'a.foo, .foo'
|
1558
883
|
end
|
1559
884
|
|
1560
885
|
def test_extend_cross_branch_redundancy_elimination
|
@@ -1581,13 +906,20 @@ SCSS
|
|
1581
906
|
private
|
1582
907
|
|
1583
908
|
def assert_unification(selector, extension, unified)
|
909
|
+
# Do some trickery so the first law of extend doesn't get in our way.
|
910
|
+
assert_extends(
|
911
|
+
"%-a #{selector}",
|
912
|
+
extension + " -a {@extend %-a}",
|
913
|
+
unified.split(', ').map {|s| "-a #{s}"}.join(', '))
|
914
|
+
end
|
915
|
+
|
916
|
+
def assert_extends(selector, extension, result)
|
1584
917
|
assert_equal <<CSS, render(<<SCSS)
|
1585
|
-
#{
|
918
|
+
#{result} {
|
1586
919
|
a: b; }
|
1587
920
|
CSS
|
1588
|
-
|
921
|
+
#{selector} {a: b}
|
1589
922
|
#{extension}
|
1590
|
-
-a {@extend %-a}
|
1591
923
|
SCSS
|
1592
924
|
end
|
1593
925
|
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sass
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 592303061
|
5
5
|
prerelease: 6
|
6
6
|
segments:
|
7
7
|
- 3
|
8
8
|
- 2
|
9
9
|
- 0
|
10
10
|
- alpha
|
11
|
-
-
|
12
|
-
version: 3.2.0.alpha.
|
11
|
+
- 100
|
12
|
+
version: 3.2.0.alpha.100
|
13
13
|
platform: ruby
|
14
14
|
authors:
|
15
15
|
- Nathan Weizenbaum
|
@@ -162,8 +162,8 @@ files:
|
|
162
162
|
- lib/sass/tree/visitors/set_options.rb
|
163
163
|
- lib/sass/tree/visitors/to_css.rb
|
164
164
|
- lib/sass/tree/while_node.rb
|
165
|
-
- lib/sass/tree/trace_node.rb
|
166
165
|
- lib/sass/tree/supports_node.rb
|
166
|
+
- lib/sass/tree/trace_node.rb
|
167
167
|
- lib/sass/media.rb
|
168
168
|
- lib/sass/util/multibyte_string_scanner.rb
|
169
169
|
- lib/sass/util/subset_map.rb
|