@@ -600,4 +600,117 @@ describe('CSS Modules', () => {
600600 ) ;
601601 } ) ;
602602 } ) ;
603+
604+ describe ( 'Syntax definition with modules' , ( ) => {
605+ it ( 'should support modules defined in syntax definition' , ( ) => {
606+ const parse = createParser ( {
607+ syntax : {
608+ pseudoClasses : {
609+ unknown : 'reject'
610+ } ,
611+ pseudoElements : {
612+ unknown : 'reject'
613+ } ,
614+ modules : [ 'css-position-4' , 'css-shadow-parts-1' ]
615+ }
616+ } ) ;
617+
618+ // Should parse position-4 pseudo-classes
619+ expect ( parse ( ':initial' ) ) . toEqual (
620+ ast . selector ( {
621+ rules : [
622+ ast . rule ( {
623+ items : [ ast . pseudoClass ( { name : 'initial' } ) ]
624+ } )
625+ ]
626+ } )
627+ ) ;
628+
629+ // Should parse shadow-parts-1 pseudo-elements
630+ expect ( parse ( '::part(button)' ) ) . toEqual (
631+ ast . selector ( {
632+ rules : [
633+ ast . rule ( {
634+ items : [
635+ ast . pseudoElement ( {
636+ name : 'part' ,
637+ argument : ast . selector ( {
638+ rules : [
639+ ast . rule ( {
640+ items : [ ast . tagName ( { name : 'button' } ) ]
641+ } )
642+ ]
643+ } )
644+ } )
645+ ]
646+ } )
647+ ]
648+ } )
649+ ) ;
650+
651+ // Should reject pseudo-classes not in the modules
652+ expect ( ( ) => parse ( ':focus-visible' ) ) . toThrow ( 'Unknown pseudo-class: "focus-visible".' ) ;
653+ } ) ;
654+
655+ it ( 'should support latest syntax with all latest modules' , ( ) => {
656+ const parse = createParser ( {
657+ syntax : 'latest'
658+ } ) ;
659+
660+ // Should parse position-4 pseudo-classes
661+ expect ( parse ( ':initial' ) ) . toEqual (
662+ ast . selector ( {
663+ rules : [
664+ ast . rule ( {
665+ items : [ ast . pseudoClass ( { name : 'initial' } ) ]
666+ } )
667+ ]
668+ } )
669+ ) ;
670+
671+ // Should parse shadow-parts-1 pseudo-elements
672+ expect ( parse ( '::part(button)' ) ) . toEqual (
673+ ast . selector ( {
674+ rules : [
675+ ast . rule ( {
676+ items : [
677+ ast . pseudoElement ( {
678+ name : 'part' ,
679+ argument : ast . selector ( {
680+ rules : [
681+ ast . rule ( {
682+ items : [ ast . tagName ( { name : 'button' } ) ]
683+ } )
684+ ]
685+ } )
686+ } )
687+ ]
688+ } )
689+ ]
690+ } )
691+ ) ;
692+
693+ // Should parse pseudo-4 pseudo-elements
694+ expect ( parse ( '::marker' ) ) . toEqual (
695+ ast . selector ( {
696+ rules : [
697+ ast . rule ( {
698+ items : [ ast . pseudoElement ( { name : 'marker' } ) ]
699+ } )
700+ ]
701+ } )
702+ ) ;
703+
704+ // Should parse scoping-1 pseudo-classes
705+ expect ( parse ( ':host' ) ) . toEqual (
706+ ast . selector ( {
707+ rules : [
708+ ast . rule ( {
709+ items : [ ast . pseudoClass ( { name : 'host' } ) ]
710+ } )
711+ ]
712+ } )
713+ ) ;
714+ } ) ;
715+ } ) ;
603716} ) ;
0 commit comments