diff options
author | Matthias Beyer <matthias.beyer@atos.net> | 2021-08-24 10:24:38 +0200 |
---|---|---|
committer | Matthias Beyer <matthias.beyer@atos.net> | 2021-08-26 12:30:22 +0200 |
commit | 87bbee75947c807bf80672c13770fd7601e51193 (patch) | |
tree | 832e30ad5595e1cdce0451b6b06ccb4c881781fe /src/repository | |
parent | 4df6b533cd299e6ec23fa4f25f94f20c0c058c76 (diff) |
Add tests for Filesystem content aggregation code
Signed-off-by: Matthias Beyer <matthias.beyer@atos.net>
Diffstat (limited to 'src/repository')
-rw-r--r-- | src/repository/fs.rs | 191 |
1 files changed, 191 insertions, 0 deletions
diff --git a/src/repository/fs.rs b/src/repository/fs.rs index d5761a7..c588b18 100644 --- a/src/repository/fs.rs +++ b/src/repository/fs.rs @@ -186,3 +186,194 @@ fn load_file(path: &Path) -> Result<String> { .map_err(Error::from) } +#[cfg(test)] +mod tests { + use super::*; + + fn dir(name: &str, hm: Vec<(PathComponent, Element)>) -> (PathComponent, Element) { + (PathComponent::DirName(name.to_string()), Element::Dir(hm.into_iter().collect())) + } + + fn pkgtoml(content: &str) -> (PathComponent, Element) { + (PathComponent::PkgToml, Element::File(content.to_string())) + } + + #[test] + fn test_one_file_in_directory() { + let fsr = FileSystemRepresentation { + root: PathBuf::from("/"), + + // Representing + // / + // /foo + // /foo/pkg.toml + elements: vec![ + dir("foo", vec![ + pkgtoml("content") + ]) + ].into_iter().collect(), + + files: vec![ + PathBuf::from("foo/pkg.toml") + ], + }; + + let path = "foo/pkg.toml".as_ref(); + + assert!(fsr.is_leaf_file(path).unwrap()); + assert_eq!(fsr.get_files_for(path).unwrap(), vec!["content"]); + } + + #[test] + fn test_deep_pkgtoml() { + let fsr = FileSystemRepresentation { + root: PathBuf::from("/"), + + // Representing + // / + // /foo + // /foo/bar + // /foo/baz + // /foo/baz/pkg.toml + elements: vec![ + dir("foo", vec![ + dir("bar", vec![ + dir("baz", vec![ + pkgtoml("content"), + ]) + ]) + ]) + ].into_iter().collect(), + + files: vec![ + PathBuf::from("foo/bar/baz/pkg.toml") + ], + }; + + let path = "foo/bar/baz/pkg.toml".as_ref(); + + assert!(fsr.is_leaf_file(path).unwrap()); + assert_eq!(fsr.get_files_for(path).unwrap(), vec!["content"]); + } + + #[test] + fn test_hierarchy() { + let fsr = FileSystemRepresentation { + root: PathBuf::from("/"), + + // Representing + // / + // /foo + // /foo/bar + // /foo/baz + // /foo/baz/pkg.toml + elements: vec![ + dir("foo", vec![ + pkgtoml("content1"), + dir("bar", vec![ + pkgtoml("content2"), + dir("baz", vec![ + pkgtoml("content3"), + ]) + ]) + ]) + ].into_iter().collect(), + + files: vec![ + PathBuf::from("foo/pkg.toml"), + PathBuf::from("foo/bar/pkg.toml"), + PathBuf::from("foo/bar/baz/pkg.toml") + ], + }; + + { + let path = "foo/pkg.toml".as_ref(); + + assert!(!fsr.is_leaf_file(path).unwrap()); + } + { + let path = "foo/bar/pkg.toml".as_ref(); + + assert!(!fsr.is_leaf_file(path).unwrap()); + } + { + let path = "foo/bar/baz/pkg.toml".as_ref(); + + assert!(fsr.is_leaf_file(path).unwrap()); + assert_eq!(fsr.get_files_for(path).unwrap(), vec!["content1", "content2", "content3"]); + } + } + + #[test] + fn test_hierarchy_with_missing_intermediate_files() { + let fsr = FileSystemRepresentation { + root: PathBuf::from("/"), + + // Representing + // / + // /foo + // /foo/bar + // /foo/baz + // /foo/baz/pkg.toml + elements: vec![ + dir("foo", vec![ + pkgtoml("content1"), + dir("bar", vec![ + dir("baz", vec![ + pkgtoml("content3"), + ]) + ]) + ]) + ].into_iter().collect(), + + files: vec![ + PathBuf::from("foo/pkg.toml"), + PathBuf::from("foo/bar/baz/pkg.toml") + ], + }; + + let path = "foo/pkg.toml".as_ref(); + assert!(!fsr.is_leaf_file(path).unwrap()); + + let path = "foo/bar/baz/pkg.toml".as_ref(); + assert!(fsr.is_leaf_file(path).unwrap()); + assert_eq!(fsr.get_files_for(path).unwrap(), vec!["content1", "content3"]); + } + + #[test] + fn test_hierarchy_with_toplevel_file() { + let fsr = FileSystemRepresentation { + root: PathBuf::from("/"), + + // Representing + // / + // /foo + // /foo/bar + // /foo/baz + // /foo/baz/pkg.toml + elements: vec![ + pkgtoml("content1"), + dir("foo", vec![ + dir("bar", vec![ + dir("baz", vec![ + pkgtoml("content3"), + ]) + ]) + ]) + ].into_iter().collect(), + + files: vec![ + PathBuf::from("pkg.toml"), + PathBuf::from("foo/bar/baz/pkg.toml") + ], + }; + + let path = "pkg.toml".as_ref(); + assert!(!fsr.is_leaf_file(path).unwrap()); + + let path = "foo/bar/baz/pkg.toml".as_ref(); + assert!(fsr.is_leaf_file(path).unwrap()); + assert_eq!(fsr.get_files_for(path).unwrap(), vec!["content1", "content3"]); + } + +} |