@@ -407,6 +407,42 @@ mod test {
407
407
Cfg :: Cfg ( Symbol :: intern ( name) , Some ( Symbol :: intern ( value) ) )
408
408
}
409
409
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
+
410
446
#[ test]
411
447
fn test_cfg_not ( ) {
412
448
assert_eq ! ( !Cfg :: False , Cfg :: True ) ;
@@ -525,15 +561,11 @@ mod test {
525
561
526
562
#[ test]
527
563
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" ) ;
533
565
assert_eq ! ( Cfg :: parse( & mi) , Ok ( word_cfg( "all" ) ) ) ;
534
566
535
567
let mi = MetaItem {
536
- name : Symbol :: intern ( "all" ) ,
568
+ name : Path :: from_ident ( DUMMY_SP , Ident :: from_str ( "all" ) ) ,
537
569
node : MetaItemKind :: NameValue ( dummy_spanned ( LitKind :: Str (
538
570
Symbol :: intern ( "done" ) ,
539
571
StrStyle :: Cooked ,
@@ -542,208 +574,60 @@ mod test {
542
574
} ;
543
575
assert_eq ! ( Cfg :: parse( & mi) , Ok ( name_value_cfg( "all" , "done" ) ) ) ;
544
576
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] ) ;
561
578
assert_eq ! ( Cfg :: parse( & mi) , Ok ( word_cfg( "a" ) & word_cfg( "b" ) ) ) ;
562
579
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] ) ;
579
581
assert_eq ! ( Cfg :: parse( & mi) , Ok ( word_cfg( "a" ) | word_cfg( "b" ) ) ) ;
580
582
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] ) ;
592
584
assert_eq ! ( Cfg :: parse( & mi) , Ok ( !word_cfg( "a" ) ) ) ;
593
585
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] ) ,
624
590
] ) ,
625
- span : DUMMY_SP ,
626
- } ;
591
+ ] ) ;
627
592
assert_eq ! ( Cfg :: parse( & mi) , Ok ( !( word_cfg( "a" ) | ( word_cfg( "b" ) & word_cfg( "c" ) ) ) ) ) ;
628
593
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] ) ;
650
595
assert_eq ! ( Cfg :: parse( & mi) , Ok ( word_cfg( "a" ) & word_cfg( "b" ) & word_cfg( "c" ) ) ) ;
651
596
}
652
597
653
598
#[ test]
654
599
fn test_parse_err ( ) {
655
600
let mi = MetaItem {
656
- name : Symbol :: intern ( "foo" ) ,
601
+ name : Path :: from_ident ( DUMMY_SP , Ident :: from_str ( "foo" ) ) ,
657
602
node : MetaItemKind :: NameValue ( dummy_spanned ( LitKind :: Bool ( false ) ) ) ,
658
603
span : DUMMY_SP ,
659
604
} ;
660
605
assert ! ( Cfg :: parse( & mi) . is_err( ) ) ;
661
606
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] ) ;
678
608
assert ! ( Cfg :: parse( & mi) . is_err( ) ) ;
679
609
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, [ ] ) ;
685
611
assert ! ( Cfg :: parse( & mi) . is_err( ) ) ;
686
612
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, [ ] ) ;
698
614
assert ! ( Cfg :: parse( & mi) . is_err( ) ) ;
699
615
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
+ ] ) ;
716
620
assert ! ( Cfg :: parse( & mi) . is_err( ) ) ;
717
621
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
+ ] ) ;
734
626
assert ! ( Cfg :: parse( & mi) . is_err( ) ) ;
735
627
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
+ ] ) ;
747
631
assert ! ( Cfg :: parse( & mi) . is_err( ) ) ;
748
632
}
749
633
0 commit comments