@@ -407,6 +407,42 @@ mod test {
407407 Cfg :: Cfg ( Symbol :: intern ( name) , Some ( Symbol :: intern ( value) ) )
408408 }
409409
410+ fn dummy_meta_item_word ( name : & str ) -> MetaItem {
411+ MetaItem {
412+ name : Path :: from_ident ( DUMMY_SP , Ident :: from_str ( name) ) ,
413+ node : MetaItemKind :: Word ,
414+ span : DUMMY_SP ,
415+ }
416+ }
417+
418+ macro_rules! dummy_meta_item_list {
419+ ( $name: ident, [ $( $list: ident) ,* $( , ) * ] ) => {
420+ MetaItem {
421+ name: Path :: from_ident( DUMMY_SP , Ident :: from_str( stringify!( $name) ) ) ,
422+ node: MetaItemKind :: List ( vec![
423+ $(
424+ dummy_spanned( NestedMetaItemKind :: MetaItem (
425+ dummy_meta_item_word( stringify!( $list) ) ,
426+ ) ) ,
427+ ) *
428+ ] ) ,
429+ span: DUMMY_SP ,
430+ }
431+ } ;
432+
433+ ( $name: ident, [ $( $list: expr) ,* $( , ) * ] ) => {
434+ MetaItem {
435+ name: Path :: from_ident( DUMMY_SP , Ident :: from_str( stringify!( $name) ) ) ,
436+ node: MetaItemKind :: List ( vec![
437+ $(
438+ dummy_spanned( NestedMetaItemKind :: MetaItem ( $list) ) ,
439+ ) *
440+ ] ) ,
441+ span: DUMMY_SP ,
442+ }
443+ } ;
444+ }
445+
410446 #[ test]
411447 fn test_cfg_not ( ) {
412448 assert_eq ! ( !Cfg :: False , Cfg :: True ) ;
@@ -525,15 +561,11 @@ mod test {
525561
526562 #[ test]
527563 fn test_parse_ok ( ) {
528- let mi = MetaItem {
529- name : Symbol :: intern ( "all" ) ,
530- node : MetaItemKind :: Word ,
531- span : DUMMY_SP ,
532- } ;
564+ let mi = dummy_meta_item_word ( "all" ) ;
533565 assert_eq ! ( Cfg :: parse( & mi) , Ok ( word_cfg( "all" ) ) ) ;
534566
535567 let mi = MetaItem {
536- name : Symbol :: intern ( "all" ) ,
568+ name : Path :: from_ident ( DUMMY_SP , Ident :: from_str ( "all" ) ) ,
537569 node : MetaItemKind :: NameValue ( dummy_spanned ( LitKind :: Str (
538570 Symbol :: intern ( "done" ) ,
539571 StrStyle :: Cooked ,
@@ -542,208 +574,60 @@ mod test {
542574 } ;
543575 assert_eq ! ( Cfg :: parse( & mi) , Ok ( name_value_cfg( "all" , "done" ) ) ) ;
544576
545- let mi = MetaItem {
546- name : Symbol :: intern ( "all" ) ,
547- node : MetaItemKind :: List ( vec ! [
548- dummy_spanned( NestedMetaItemKind :: MetaItem ( MetaItem {
549- name: Symbol :: intern( "a" ) ,
550- node: MetaItemKind :: Word ,
551- span: DUMMY_SP ,
552- } ) ) ,
553- dummy_spanned( NestedMetaItemKind :: MetaItem ( MetaItem {
554- name: Symbol :: intern( "b" ) ,
555- node: MetaItemKind :: Word ,
556- span: DUMMY_SP ,
557- } ) ) ,
558- ] ) ,
559- span : DUMMY_SP ,
560- } ;
577+ let mi = dummy_meta_item_list ! ( all, [ a, b] ) ;
561578 assert_eq ! ( Cfg :: parse( & mi) , Ok ( word_cfg( "a" ) & word_cfg( "b" ) ) ) ;
562579
563- let mi = MetaItem {
564- name : Symbol :: intern ( "any" ) ,
565- node : MetaItemKind :: List ( vec ! [
566- dummy_spanned( NestedMetaItemKind :: MetaItem ( MetaItem {
567- name: Symbol :: intern( "a" ) ,
568- node: MetaItemKind :: Word ,
569- span: DUMMY_SP ,
570- } ) ) ,
571- dummy_spanned( NestedMetaItemKind :: MetaItem ( MetaItem {
572- name: Symbol :: intern( "b" ) ,
573- node: MetaItemKind :: Word ,
574- span: DUMMY_SP ,
575- } ) ) ,
576- ] ) ,
577- span : DUMMY_SP ,
578- } ;
580+ let mi = dummy_meta_item_list ! ( any, [ a, b] ) ;
579581 assert_eq ! ( Cfg :: parse( & mi) , Ok ( word_cfg( "a" ) | word_cfg( "b" ) ) ) ;
580582
581- let mi = MetaItem {
582- name : Symbol :: intern ( "not" ) ,
583- node : MetaItemKind :: List ( vec ! [
584- dummy_spanned( NestedMetaItemKind :: MetaItem ( MetaItem {
585- name: Symbol :: intern( "a" ) ,
586- node: MetaItemKind :: Word ,
587- span: DUMMY_SP ,
588- } ) ) ,
589- ] ) ,
590- span : DUMMY_SP ,
591- } ;
583+ let mi = dummy_meta_item_list ! ( not, [ a] ) ;
592584 assert_eq ! ( Cfg :: parse( & mi) , Ok ( !word_cfg( "a" ) ) ) ;
593585
594- let mi = MetaItem {
595- name : Symbol :: intern ( "not" ) ,
596- node : MetaItemKind :: List ( vec ! [
597- dummy_spanned( NestedMetaItemKind :: MetaItem ( MetaItem {
598- name: Symbol :: intern( "any" ) ,
599- node: MetaItemKind :: List ( vec![
600- dummy_spanned( NestedMetaItemKind :: MetaItem ( MetaItem {
601- name: Symbol :: intern( "a" ) ,
602- node: MetaItemKind :: Word ,
603- span: DUMMY_SP ,
604- } ) ) ,
605- dummy_spanned( NestedMetaItemKind :: MetaItem ( MetaItem {
606- name: Symbol :: intern( "all" ) ,
607- node: MetaItemKind :: List ( vec![
608- dummy_spanned( NestedMetaItemKind :: MetaItem ( MetaItem {
609- name: Symbol :: intern( "b" ) ,
610- node: MetaItemKind :: Word ,
611- span: DUMMY_SP ,
612- } ) ) ,
613- dummy_spanned( NestedMetaItemKind :: MetaItem ( MetaItem {
614- name: Symbol :: intern( "c" ) ,
615- node: MetaItemKind :: Word ,
616- span: DUMMY_SP ,
617- } ) ) ,
618- ] ) ,
619- span: DUMMY_SP ,
620- } ) ) ,
621- ] ) ,
622- span: DUMMY_SP ,
623- } ) ) ,
586+ let mi = dummy_meta_item_list ! ( not, [
587+ dummy_meta_item_list!( any, [
588+ dummy_meta_item_word( "a" ) ,
589+ dummy_meta_item_list!( all, [ b, c] ) ,
624590 ] ) ,
625- span : DUMMY_SP ,
626- } ;
591+ ] ) ;
627592 assert_eq ! ( Cfg :: parse( & mi) , Ok ( !( word_cfg( "a" ) | ( word_cfg( "b" ) & word_cfg( "c" ) ) ) ) ) ;
628593
629- let mi = MetaItem {
630- name : Symbol :: intern ( "all" ) ,
631- node : MetaItemKind :: List ( vec ! [
632- dummy_spanned( NestedMetaItemKind :: MetaItem ( MetaItem {
633- name: Symbol :: intern( "a" ) ,
634- node: MetaItemKind :: Word ,
635- span: DUMMY_SP ,
636- } ) ) ,
637- dummy_spanned( NestedMetaItemKind :: MetaItem ( MetaItem {
638- name: Symbol :: intern( "b" ) ,
639- node: MetaItemKind :: Word ,
640- span: DUMMY_SP ,
641- } ) ) ,
642- dummy_spanned( NestedMetaItemKind :: MetaItem ( MetaItem {
643- name: Symbol :: intern( "c" ) ,
644- node: MetaItemKind :: Word ,
645- span: DUMMY_SP ,
646- } ) ) ,
647- ] ) ,
648- span : DUMMY_SP ,
649- } ;
594+ let mi = dummy_meta_item_list ! ( all, [ a, b, c] ) ;
650595 assert_eq ! ( Cfg :: parse( & mi) , Ok ( word_cfg( "a" ) & word_cfg( "b" ) & word_cfg( "c" ) ) ) ;
651596 }
652597
653598 #[ test]
654599 fn test_parse_err ( ) {
655600 let mi = MetaItem {
656- name : Symbol :: intern ( "foo" ) ,
601+ name : Path :: from_ident ( DUMMY_SP , Ident :: from_str ( "foo" ) ) ,
657602 node : MetaItemKind :: NameValue ( dummy_spanned ( LitKind :: Bool ( false ) ) ) ,
658603 span : DUMMY_SP ,
659604 } ;
660605 assert ! ( Cfg :: parse( & mi) . is_err( ) ) ;
661606
662- let mi = MetaItem {
663- name : Symbol :: intern ( "not" ) ,
664- node : MetaItemKind :: List ( vec ! [
665- dummy_spanned( NestedMetaItemKind :: MetaItem ( MetaItem {
666- name: Symbol :: intern( "a" ) ,
667- node: MetaItemKind :: Word ,
668- span: DUMMY_SP ,
669- } ) ) ,
670- dummy_spanned( NestedMetaItemKind :: MetaItem ( MetaItem {
671- name: Symbol :: intern( "b" ) ,
672- node: MetaItemKind :: Word ,
673- span: DUMMY_SP ,
674- } ) ) ,
675- ] ) ,
676- span : DUMMY_SP ,
677- } ;
607+ let mi = dummy_meta_item_list ! ( not, [ a, b] ) ;
678608 assert ! ( Cfg :: parse( & mi) . is_err( ) ) ;
679609
680- let mi = MetaItem {
681- name : Symbol :: intern ( "not" ) ,
682- node : MetaItemKind :: List ( vec ! [ ] ) ,
683- span : DUMMY_SP ,
684- } ;
610+ let mi = dummy_meta_item_list ! ( not, [ ] ) ;
685611 assert ! ( Cfg :: parse( & mi) . is_err( ) ) ;
686612
687- let mi = MetaItem {
688- name : Symbol :: intern ( "foo" ) ,
689- node : MetaItemKind :: List ( vec ! [
690- dummy_spanned( NestedMetaItemKind :: MetaItem ( MetaItem {
691- name: Symbol :: intern( "a" ) ,
692- node: MetaItemKind :: Word ,
693- span: DUMMY_SP ,
694- } ) ) ,
695- ] ) ,
696- span : DUMMY_SP ,
697- } ;
613+ let mi = dummy_meta_item_list ! ( foo, [ ] ) ;
698614 assert ! ( Cfg :: parse( & mi) . is_err( ) ) ;
699615
700- let mi = MetaItem {
701- name : Symbol :: intern ( "all" ) ,
702- node : MetaItemKind :: List ( vec ! [
703- dummy_spanned( NestedMetaItemKind :: MetaItem ( MetaItem {
704- name: Symbol :: intern( "foo" ) ,
705- node: MetaItemKind :: List ( vec![ ] ) ,
706- span: DUMMY_SP ,
707- } ) ) ,
708- dummy_spanned( NestedMetaItemKind :: MetaItem ( MetaItem {
709- name: Symbol :: intern( "b" ) ,
710- node: MetaItemKind :: Word ,
711- span: DUMMY_SP ,
712- } ) ) ,
713- ] ) ,
714- span : DUMMY_SP ,
715- } ;
616+ let mi = dummy_meta_item_list ! ( all, [
617+ dummy_meta_item_list!( foo, [ ] ) ,
618+ dummy_meta_item_word( "b" ) ,
619+ ] ) ;
716620 assert ! ( Cfg :: parse( & mi) . is_err( ) ) ;
717621
718- let mi = MetaItem {
719- name : Symbol :: intern ( "any" ) ,
720- node : MetaItemKind :: List ( vec ! [
721- dummy_spanned( NestedMetaItemKind :: MetaItem ( MetaItem {
722- name: Symbol :: intern( "a" ) ,
723- node: MetaItemKind :: Word ,
724- span: DUMMY_SP ,
725- } ) ) ,
726- dummy_spanned( NestedMetaItemKind :: MetaItem ( MetaItem {
727- name: Symbol :: intern( "foo" ) ,
728- node: MetaItemKind :: List ( vec![ ] ) ,
729- span: DUMMY_SP ,
730- } ) ) ,
731- ] ) ,
732- span : DUMMY_SP ,
733- } ;
622+ let mi = dummy_meta_item_list ! ( any, [
623+ dummy_meta_item_word( "a" ) ,
624+ dummy_meta_item_list!( foo, [ ] ) ,
625+ ] ) ;
734626 assert ! ( Cfg :: parse( & mi) . is_err( ) ) ;
735627
736- let mi = MetaItem {
737- name : Symbol :: intern ( "not" ) ,
738- node : MetaItemKind :: List ( vec ! [
739- dummy_spanned( NestedMetaItemKind :: MetaItem ( MetaItem {
740- name: Symbol :: intern( "foo" ) ,
741- node: MetaItemKind :: List ( vec![ ] ) ,
742- span: DUMMY_SP ,
743- } ) ) ,
744- ] ) ,
745- span : DUMMY_SP ,
746- } ;
628+ let mi = dummy_meta_item_list ! ( not, [
629+ dummy_meta_item_list!( foo, [ ] ) ,
630+ ] ) ;
747631 assert ! ( Cfg :: parse( & mi) . is_err( ) ) ;
748632 }
749633
0 commit comments