Skip to main content

Add some tests for the emptydir function

ID
2ece504
date
2024-06-18 20:53:09+00:00
author
Alex Chan <alex@alexwlchan.net>
parent
3e99134
message
Add some tests for the emptydir function
changed files
1 file, 136 additions

Changed files

src/emptydir.rs (769) → src/emptydir.rs (4319)

diff --git a/src/emptydir.rs b/src/emptydir.rs
index f1d3056..046288e 100644
--- a/src/emptydir.rs
+++ b/src/emptydir.rs
@@ -29,3 +29,139 @@ pub fn emptydir(root: &Path) -> u32 {
 
     count_deleted
 }
+
+#[cfg(test)]
+mod emptydir_tests {
+    use std::fs;
+    use std::path::{Path, PathBuf};
+
+    use crate::emptydir::emptydir;
+
+    fn test_dir() -> PathBuf {
+        let tmp_dir = tempdir::TempDir::new("testing").unwrap();
+        let path = tmp_dir.path();
+        path.to_owned()
+    }
+
+    fn create_dir(dir: &PathBuf) {
+        fs::create_dir_all(dir).unwrap();
+    }
+
+    fn create_file(path: PathBuf) {
+        create_dir(&path.parent().unwrap().to_path_buf());
+        fs::write(&path, "this file is for testing").unwrap();
+    }
+
+    #[test]
+    fn it_doesnt_delete_my_do_not_backup() {
+        let dir = Path::new("/Users/alexwlchan/Desktop/do not back up");
+        assert_eq!(emptydir(dir), 0);
+    }
+
+    #[test]
+    fn it_doesnt_delete_a_non_existent_directory() {
+        let dir = Path::new("/does/not/exist");
+        assert_eq!(emptydir(dir), 0);
+    }
+
+    #[test]
+    fn it_deletes_an_empty_dir() {
+        let dir = test_dir();
+
+        // Create the directory, but don't put anything in it
+        create_dir(&dir);
+
+        assert_eq!(emptydir(&dir), 1);
+        assert_eq!(dir.exists(), false);
+    }
+
+    #[test]
+    fn it_ignores_a_dir_with_extra_entries() {
+        let dir = test_dir();
+
+        // Create the directory, then add a text file
+        create_dir(&dir);
+
+        create_file(dir.join("greeting.txt"));
+
+        assert_eq!(emptydir(&dir), 0);
+        assert_eq!(dir.exists(), true);
+        assert_eq!(dir.join("greeting.txt").exists(), true);
+    }
+
+    #[test]
+    fn it_deletes_a_dir_with_only_safe_to_delete_entries() {
+        let dir = test_dir();
+
+        //    .
+        //    ├─ .venv/
+        //    │   └─ bin/
+        //    │       └─ mypython.py
+        //    │
+        //    ├─ __pycache__
+        //    │   └─ myfile.pyc
+        //    │
+        //    └─ .DS_Store
+        //
+        create_dir(&dir);
+
+        create_dir(&dir.join(".venv"));
+        create_file(dir.join(".venv/bin/mypython.py"));
+
+        create_dir(&dir.join("__pycache__"));
+        create_file(dir.join("__pycache__/myfile.pyc"));
+
+        create_file(dir.join(".DS_Store"));
+
+        assert_eq!(emptydir(&dir), 1);
+        assert_eq!(dir.exists(), false);
+    }
+
+    #[test]
+    fn it_ignores_a_dir_with_a_mix_of_safe_and_unsafe_entries() {
+        let dir = test_dir();
+
+        create_dir(&dir);
+
+        create_file(dir.join(".DS_Store"));
+        create_file(dir.join("greeting.txt"));
+
+        assert_eq!(emptydir(&dir), 0);
+        assert_eq!(dir.exists(), true);
+    }
+
+    #[test]
+    fn it_deletes_a_subdir_with_only_safe_to_delete_entries() {
+        let dir = test_dir();
+        let subdir = dir.join("subdir");
+
+        //    .
+        //    ├─ subdir/
+        //    │   ├─ .venv/
+        //    │   │   └─ bin/
+        //    │   │       └─ mypython.py
+        //    │   │
+        //    │   ├─ __pycache__
+        //    │   │   └─ myfile.pyc
+        //    │   │
+        //    │   └─ .DS_Store
+        //    │
+        //    └─ greeting.txt
+        //
+        create_dir(&subdir);
+
+        create_dir(&subdir.join(".venv"));
+        create_file(subdir.join(".venv/bin/mypython.py"));
+
+        create_dir(&subdir.join("__pycache__"));
+        create_file(subdir.join("__pycache__/myfile.pyc"));
+
+        create_file(subdir.join(".DS_Store"));
+
+        create_file(dir.join("greeting.txt"));
+
+        assert_eq!(emptydir(&dir), 1);
+        assert_eq!(dir.exists(), true);
+        assert_eq!(subdir.exists(), false);
+    }
+}