@@ -10,6 +10,9 @@ const compile = (input, options) =>
10
10
. process ( input , options )
11
11
. catch ( e => Promise . reject ( e . message ) ) ;
12
12
const generateScopedName = name => `__scope__${ name } ` ;
13
+ const messagesPlugin = messages => ( ) => ( css , result ) => {
14
+ result . push ( ...messages ) ;
15
+ } ;
13
16
14
17
const runCSS = ( { fixture, expected, options } ) => {
15
18
return expect (
@@ -26,6 +29,17 @@ const runError = ({ fixture, error, options }) => {
26
29
) ;
27
30
} ;
28
31
32
+ const runMessages = ( { fixture, inputMessages, outputMessages, expected } ) => {
33
+ const processor = postcss ( [
34
+ messagesPlugin ( inputMessages ) ,
35
+ plugin ( { generateScopedName } )
36
+ ] ) . process ( strip ( fixture ) ) ;
37
+ return processor . then ( result => {
38
+ expect ( result . messages ) . toEqual ( outputMessages ) ;
39
+ expect ( result . css ) . toEqual ( strip ( expected ) ) ;
40
+ } ) ;
41
+ } ;
42
+
29
43
test ( "scope selectors" , ( ) => {
30
44
return runCSS ( {
31
45
fixture : `
@@ -657,3 +671,187 @@ test("save :import statemtents", () => {
657
671
`
658
672
} ) ;
659
673
} ) ;
674
+
675
+ test ( "dispatch messages with all locals" , ( ) => {
676
+ return runMessages ( {
677
+ fixture : `
678
+ .foo {}
679
+ .foo .bar {}
680
+ :global .baz :local(.zab) {}
681
+ ` ,
682
+ outputMessages : [
683
+ {
684
+ plugin : "postcss-icss-selectors" ,
685
+ type : "icss-scoped" ,
686
+ name : "foo" ,
687
+ value : "__scope__foo"
688
+ } ,
689
+ {
690
+ plugin : "postcss-icss-selectors" ,
691
+ type : "icss-scoped" ,
692
+ name : "bar" ,
693
+ value : "__scope__bar"
694
+ } ,
695
+ {
696
+ plugin : "postcss-icss-selectors" ,
697
+ type : "icss-scoped" ,
698
+ name : "zab" ,
699
+ value : "__scope__zab"
700
+ }
701
+ ]
702
+ } ) ;
703
+ } ) ;
704
+
705
+ test ( "icss-scoped contract" , ( ) => {
706
+ const inputMessages = [
707
+ {
708
+ plugin : "previous-plugin" ,
709
+ type : "icss-scoped" ,
710
+ name : "foo" ,
711
+ value : "__declared__foo"
712
+ }
713
+ ] ;
714
+ return runMessages ( {
715
+ fixture : `
716
+ :export {
717
+ foo: __declared__foo
718
+ }
719
+ .foo {}
720
+ .bar {}
721
+ ` ,
722
+ expected : `
723
+ :export {
724
+ foo: __scope__foo;
725
+ bar: __scope__bar
726
+ }
727
+ .__scope__foo {}
728
+ .__scope__bar {}
729
+ ` ,
730
+ outputMessages : [
731
+ ...inputMessages ,
732
+ {
733
+ plugin : "postcss-icss-selectors" ,
734
+ type : "warning" ,
735
+ text : `'foo' already declared by 'previous-plugin'`
736
+ } ,
737
+ {
738
+ plugin : "postcss-icss-selectors" ,
739
+ type : "icss-scoped" ,
740
+ name : "foo" ,
741
+ value : "__scope__foo"
742
+ } ,
743
+ {
744
+ plugin : "postcss-icss-selectors" ,
745
+ type : "icss-scoped" ,
746
+ name : "bar" ,
747
+ value : "__scope__bar"
748
+ }
749
+ ]
750
+ } ) ;
751
+ } ) ;
752
+
753
+ test ( "icss-composed contract" , ( ) => {
754
+ const inputMessages = [
755
+ {
756
+ plugin : "previous-plugin" ,
757
+ type : "icss-composed" ,
758
+ name : "foo" ,
759
+ value : "__compose__foo"
760
+ } ,
761
+ {
762
+ plugin : "previous-plugin" ,
763
+ type : "icss-composed" ,
764
+ name : "bar" ,
765
+ value : "__compose__bar"
766
+ }
767
+ ] ;
768
+ return runMessages ( {
769
+ fixture : `
770
+ :export {
771
+ foo: __compose__foo;
772
+ baz: __declared__baz
773
+ }
774
+ .foo {}
775
+ .bar {}
776
+ .baz {}
777
+ ` ,
778
+ expected : `
779
+ :export {
780
+ foo: __scope__foo __compose__foo;
781
+ bar: __scope__bar __compose__bar;
782
+ baz: __scope__baz
783
+ }
784
+ .__scope__foo {}
785
+ .__scope__bar {}
786
+ .__scope__baz {}
787
+ ` ,
788
+ inputMessages,
789
+ outputMessages : [
790
+ ...inputMessages ,
791
+ {
792
+ plugin : "postcss-icss-selectors" ,
793
+ type : "icss-scoped" ,
794
+ name : "foo" ,
795
+ value : "__scope__foo"
796
+ } ,
797
+ {
798
+ plugin : "postcss-icss-selectors" ,
799
+ type : "icss-scoped" ,
800
+ name : "bar" ,
801
+ value : "__scope__bar"
802
+ } ,
803
+ {
804
+ plugin : "postcss-icss-selectors" ,
805
+ type : "icss-scoped" ,
806
+ name : "baz" ,
807
+ value : "__scope__baz"
808
+ }
809
+ ]
810
+ } ) ;
811
+ } ) ;
812
+
813
+ test ( "icss-value contract" , ( ) => {
814
+ const inputMessages = [
815
+ {
816
+ plugin : "previous-plugin" ,
817
+ type : "icss-value" ,
818
+ name : "foo" ,
819
+ value : "__declared__foo"
820
+ } ,
821
+ {
822
+ plugin : "previous-plugin" ,
823
+ type : "icss-value" ,
824
+ name : "bar" ,
825
+ value : "__declared__bar"
826
+ }
827
+ ] ;
828
+ return runMessages ( {
829
+ fixture : `
830
+ :export {
831
+ foo: __declared__foo
832
+ }
833
+ .__declared__foo {}
834
+ .__declared__bar {}
835
+ .baz {}
836
+ ` ,
837
+ expected : `
838
+ :export {
839
+ foo: __declared__foo;
840
+ baz: __scope__baz
841
+ }
842
+ .__declared__foo {}
843
+ .__declared__bar {}
844
+ .__scope__baz {}
845
+ ` ,
846
+ inputMessages,
847
+ outputMessages : [
848
+ ...inputMessages ,
849
+ {
850
+ plugin : "postcss-icss-selectors" ,
851
+ type : "icss-scoped" ,
852
+ name : "baz" ,
853
+ value : "__scope__baz"
854
+ }
855
+ ]
856
+ } ) ;
857
+ } ) ;
0 commit comments