diff options
| author | Jonathan Turner <jonathandturner@users.noreply.github.com> | 2016-08-31 06:29:09 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2016-08-31 06:29:09 -0700 |
| commit | 1048ea24e198d9b09951700d007cbbbd2a9b4649 (patch) | |
| tree | 2b57ac2cc6615e8b677118e54fd2049974f9bcfc /src/libstd | |
| parent | 18b5ae301978a2afeac20b9e38d0ebd71eb49752 (diff) | |
| parent | 268b3f58184cc7efa8196a28cccffcc01a5d61ac (diff) | |
| download | rust-1048ea24e198d9b09951700d007cbbbd2a9b4649.tar.gz rust-1048ea24e198d9b09951700d007cbbbd2a9b4649.zip | |
Rollup merge of #36101 - frewsxcv:debug-path-components, r=alexcrichton
Implement `Debug` for `std::path::{Components,Iter}`.
None
Diffstat (limited to 'src/libstd')
| -rw-r--r-- | src/libstd/path.rs | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/src/libstd/path.rs b/src/libstd/path.rs index 67219b6fd1b..dbf17b3c813 100644 --- a/src/libstd/path.rs +++ b/src/libstd/path.rs @@ -639,6 +639,25 @@ pub struct Iter<'a> { inner: Components<'a>, } +#[stable(feature = "path_components_debug", since = "1.13.0")] +impl<'a> fmt::Debug for Components<'a> { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + struct DebugHelper<'a>(&'a Path); + + impl<'a> fmt::Debug for DebugHelper<'a> { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + f.debug_list() + .entries(self.0.components()) + .finish() + } + } + + f.debug_tuple("Components") + .field(&DebugHelper(self.as_path())) + .finish() + } +} + impl<'a> Components<'a> { // how long is the prefix, if any? #[inline] @@ -818,6 +837,25 @@ impl<'a> AsRef<OsStr> for Components<'a> { } } +#[stable(feature = "path_iter_debug", since = "1.13.0")] +impl<'a> fmt::Debug for Iter<'a> { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + struct DebugHelper<'a>(&'a Path); + + impl<'a> fmt::Debug for DebugHelper<'a> { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + f.debug_list() + .entries(self.0.iter()) + .finish() + } + } + + f.debug_tuple("Iter") + .field(&DebugHelper(self.as_path())) + .finish() + } +} + impl<'a> Iter<'a> { /// Extracts a slice corresponding to the portion of the path remaining for iteration. #[stable(feature = "rust1", since = "1.0.0")] @@ -3483,4 +3521,47 @@ mod tests { ); } } + + #[test] + fn test_components_debug() { + let path = Path::new("/tmp"); + + let mut components = path.components(); + + let expected = "Components([RootDir, Normal(\"tmp\")])"; + let actual = format!("{:?}", components); + assert_eq!(expected, actual); + + let _ = components.next().unwrap(); + let expected = "Components([Normal(\"tmp\")])"; + let actual = format!("{:?}", components); + assert_eq!(expected, actual); + + let _ = components.next().unwrap(); + let expected = "Components([])"; + let actual = format!("{:?}", components); + assert_eq!(expected, actual); + } + + #[cfg(unix)] + #[test] + fn test_iter_debug() { + let path = Path::new("/tmp"); + + let mut iter = path.iter(); + + let expected = "Iter([\"/\", \"tmp\"])"; + let actual = format!("{:?}", iter); + assert_eq!(expected, actual); + + let _ = iter.next().unwrap(); + let expected = "Iter([\"tmp\"])"; + let actual = format!("{:?}", iter); + assert_eq!(expected, actual); + + let _ = iter.next().unwrap(); + let expected = "Iter([])"; + let actual = format!("{:?}", iter); + assert_eq!(expected, actual); + } } |
