@@ -573,6 +573,110 @@ fn matches_enum_struct_non_exhaustive() -> Result<()> {
573
573
verify_that ! ( actual, matches_pattern!( & AnEnum :: Variant1 { a_field: eq( 123 ) , .. } ) )
574
574
}
575
575
576
+ #[ test]
577
+ fn matches_enum_struct_with_all_non_exhaustive_fields ( ) -> Result < ( ) > {
578
+ #[ allow( dead_code) ]
579
+ #[ derive( Debug ) ]
580
+ enum AnEnum {
581
+ Variant1 { a : u32 , b : u32 } ,
582
+ Variant2 { c : u32 , d : u32 } ,
583
+ }
584
+ let actual: AnEnum = AnEnum :: Variant1 { a : 123 , b : 234 } ;
585
+ verify_that ! ( actual, matches_pattern!( & AnEnum :: Variant1 { .. } ) )
586
+ }
587
+
588
+ #[ test]
589
+ fn has_failure_when_wrong_enum_struct_variant_is_matched_with_all_non_exhaustive_fields (
590
+ ) -> Result < ( ) > {
591
+ #[ allow( dead_code) ]
592
+ #[ derive( Debug ) ]
593
+ enum AnEnum {
594
+ Variant1 { a : u32 , b : u32 } ,
595
+ Variant2 { c : u32 , d : u32 } ,
596
+ }
597
+ let actual: AnEnum = AnEnum :: Variant1 { a : 123 , b : 234 } ;
598
+
599
+ let result = verify_that ! ( actual, matches_pattern!( & AnEnum :: Variant2 { .. } ) ) ;
600
+
601
+ const EXPECTED : & str = indoc ! (
602
+ "
603
+ Expected: is & AnEnum :: Variant2 { .. }
604
+ Actual: Variant1 { a: 123, b: 234 },
605
+ which is not & AnEnum :: Variant2 { .. }
606
+ "
607
+ ) ;
608
+ verify_that ! ( result, err( displays_as( contains_substring( EXPECTED ) ) ) )
609
+ }
610
+
611
+ #[ test]
612
+ fn matches_enum_struct_with_all_wildcard_fields ( ) -> Result < ( ) > {
613
+ #[ allow( dead_code) ]
614
+ #[ derive( Debug ) ]
615
+ enum AnEnum {
616
+ Variant1 { a : u32 , b : u32 } ,
617
+ Variant2 { c : u32 , d : u32 } ,
618
+ }
619
+ let actual: AnEnum = AnEnum :: Variant1 { a : 123 , b : 234 } ;
620
+ verify_that ! ( actual, matches_pattern!( & AnEnum :: Variant1 { a: _, b: _ } ) )
621
+ }
622
+
623
+ #[ test]
624
+ fn has_failure_when_wrong_enum_struct_variant_is_matched_with_all_wildcard_fields ( ) -> Result < ( ) > {
625
+ #[ allow( dead_code) ]
626
+ #[ derive( Debug ) ]
627
+ enum AnEnum {
628
+ Variant1 { a : u32 , b : u32 } ,
629
+ Variant2 { c : u32 , d : u32 } ,
630
+ }
631
+ let actual: AnEnum = AnEnum :: Variant1 { a : 123 , b : 234 } ;
632
+
633
+ let result = verify_that ! ( actual, matches_pattern!( & AnEnum :: Variant2 { c: _, d: _ } ) ) ;
634
+
635
+ const EXPECTED : & str = indoc ! (
636
+ "
637
+ Expected: is & AnEnum :: Variant2 { c : _, d : _, }
638
+ Actual: Variant1 { a: 123, b: 234 },
639
+ which is not & AnEnum :: Variant2 { c : _, d : _, }
640
+ "
641
+ ) ;
642
+ verify_that ! ( result, err( displays_as( contains_substring( EXPECTED ) ) ) )
643
+ }
644
+
645
+ #[ test]
646
+ fn matches_enum_struct_non_exhaustive_with_wildcard_fields ( ) -> Result < ( ) > {
647
+ #[ allow( dead_code) ]
648
+ #[ derive( Debug ) ]
649
+ enum AnEnum {
650
+ Variant1 { a : u32 , b : u32 } ,
651
+ Variant2 { c : u32 , d : u32 } ,
652
+ }
653
+ let actual: AnEnum = AnEnum :: Variant1 { a : 123 , b : 234 } ;
654
+ verify_that ! ( actual, matches_pattern!( & AnEnum :: Variant1 { a: _, .. } ) )
655
+ }
656
+
657
+ #[ test]
658
+ fn has_failure_when_wrong_enum_struct_variant_is_matched_non_exhaustive_with_wildcard_fields (
659
+ ) -> Result < ( ) > {
660
+ #[ allow( dead_code) ]
661
+ #[ derive( Debug ) ]
662
+ enum AnEnum {
663
+ Variant1 { a : u32 , b : u32 } ,
664
+ Variant2 { c : u32 , d : u32 } ,
665
+ }
666
+ let actual: AnEnum = AnEnum :: Variant1 { a : 123 , b : 234 } ;
667
+
668
+ let result = verify_that ! ( actual, matches_pattern!( & AnEnum :: Variant2 { c: _, .. } ) ) ;
669
+
670
+ const EXPECTED : & str = indoc ! (
671
+ "
672
+ Expected: is & AnEnum :: Variant2 { c : _, .. }
673
+ Actual: Variant1 { a: 123, b: 234 },
674
+ which is not & AnEnum :: Variant2 { c : _, .. }
675
+ "
676
+ ) ;
677
+ verify_that ! ( result, err( displays_as( contains_substring( EXPECTED ) ) ) )
678
+ }
679
+
576
680
#[ test]
577
681
fn matches_enum_struct_exhaustive_with_multiple_variants ( ) -> Result < ( ) > {
578
682
#[ allow( dead_code) ]
0 commit comments