@@ -10,6 +10,9 @@ const compile = (input, options) =>
1010 . process ( input , options )
1111 . catch ( e => Promise . reject ( e . message ) ) ;
1212const generateScopedName = name => `__scope__${ name } ` ;
13+ const messagesPlugin = messages => ( ) => ( css , result ) => {
14+ result . push ( ...messages ) ;
15+ } ;
1316
1417const runCSS = ( { fixture, expected, options } ) => {
1518 return expect (
@@ -26,6 +29,17 @@ const runError = ({ fixture, error, options }) => {
2629 ) ;
2730} ;
2831
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+
2943test ( "scope selectors" , ( ) => {
3044 return runCSS ( {
3145 fixture : `
@@ -657,3 +671,187 @@ test("save :import statemtents", () => {
657671 `
658672 } ) ;
659673} ) ;
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