@@ -639,6 +639,25 @@ pub struct Iter<'a> {
639
639
inner : Components < ' a > ,
640
640
}
641
641
642
+ #[ stable( feature = "path_components_debug" , since = "1.13.0" ) ]
643
+ impl < ' a > fmt:: Debug for Components < ' a > {
644
+ fn fmt ( & self , f : & mut fmt:: Formatter ) -> fmt:: Result {
645
+ struct DebugHelper < ' a > ( & ' a Path ) ;
646
+
647
+ impl < ' a > fmt:: Debug for DebugHelper < ' a > {
648
+ fn fmt ( & self , f : & mut fmt:: Formatter ) -> fmt:: Result {
649
+ f. debug_list ( )
650
+ . entries ( self . 0 . components ( ) )
651
+ . finish ( )
652
+ }
653
+ }
654
+
655
+ f. debug_tuple ( "Components" )
656
+ . field ( & DebugHelper ( self . as_path ( ) ) )
657
+ . finish ( )
658
+ }
659
+ }
660
+
642
661
impl < ' a > Components < ' a > {
643
662
// how long is the prefix, if any?
644
663
#[ inline]
@@ -818,6 +837,25 @@ impl<'a> AsRef<OsStr> for Components<'a> {
818
837
}
819
838
}
820
839
840
+ #[ stable( feature = "path_iter_debug" , since = "1.13.0" ) ]
841
+ impl < ' a > fmt:: Debug for Iter < ' a > {
842
+ fn fmt ( & self , f : & mut fmt:: Formatter ) -> fmt:: Result {
843
+ struct DebugHelper < ' a > ( & ' a Path ) ;
844
+
845
+ impl < ' a > fmt:: Debug for DebugHelper < ' a > {
846
+ fn fmt ( & self , f : & mut fmt:: Formatter ) -> fmt:: Result {
847
+ f. debug_list ( )
848
+ . entries ( self . 0 . iter ( ) )
849
+ . finish ( )
850
+ }
851
+ }
852
+
853
+ f. debug_tuple ( "Iter" )
854
+ . field ( & DebugHelper ( self . as_path ( ) ) )
855
+ . finish ( )
856
+ }
857
+ }
858
+
821
859
impl < ' a > Iter < ' a > {
822
860
/// Extracts a slice corresponding to the portion of the path remaining for iteration.
823
861
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
@@ -3483,4 +3521,47 @@ mod tests {
3483
3521
) ;
3484
3522
}
3485
3523
}
3524
+
3525
+ #[ test]
3526
+ fn test_components_debug ( ) {
3527
+ let path = Path :: new ( "/tmp" ) ;
3528
+
3529
+ let mut components = path. components ( ) ;
3530
+
3531
+ let expected = "Components([RootDir, Normal(\" tmp\" )])" ;
3532
+ let actual = format ! ( "{:?}" , components) ;
3533
+ assert_eq ! ( expected, actual) ;
3534
+
3535
+ let _ = components. next ( ) . unwrap ( ) ;
3536
+ let expected = "Components([Normal(\" tmp\" )])" ;
3537
+ let actual = format ! ( "{:?}" , components) ;
3538
+ assert_eq ! ( expected, actual) ;
3539
+
3540
+ let _ = components. next ( ) . unwrap ( ) ;
3541
+ let expected = "Components([])" ;
3542
+ let actual = format ! ( "{:?}" , components) ;
3543
+ assert_eq ! ( expected, actual) ;
3544
+ }
3545
+
3546
+ #[ cfg( unix) ]
3547
+ #[ test]
3548
+ fn test_iter_debug ( ) {
3549
+ let path = Path :: new ( "/tmp" ) ;
3550
+
3551
+ let mut iter = path. iter ( ) ;
3552
+
3553
+ let expected = "Iter([\" /\" , \" tmp\" ])" ;
3554
+ let actual = format ! ( "{:?}" , iter) ;
3555
+ assert_eq ! ( expected, actual) ;
3556
+
3557
+ let _ = iter. next ( ) . unwrap ( ) ;
3558
+ let expected = "Iter([\" tmp\" ])" ;
3559
+ let actual = format ! ( "{:?}" , iter) ;
3560
+ assert_eq ! ( expected, actual) ;
3561
+
3562
+ let _ = iter. next ( ) . unwrap ( ) ;
3563
+ let expected = "Iter([])" ;
3564
+ let actual = format ! ( "{:?}" , iter) ;
3565
+ assert_eq ! ( expected, actual) ;
3566
+ }
3486
3567
}
0 commit comments