Simplify the test code

This commit is contained in:
sxyazi 2024-02-18 01:07:49 +08:00
parent d9f5752641
commit 4b63196731
No known key found for this signature in database

View file

@ -45,14 +45,14 @@ impl Selected {
return false; return false;
} }
let mut current_path = url.clone(); let mut parent = url.parent_url();
while let Some(parent) = current_path.parent_url() { while let Some(u) = parent {
current_path = parent; parent = u.parent_url();
let counter = self.parents.entry(current_path.clone()).or_insert(0); let counter = self.parents.entry(u.clone()).or_insert(0);
*counter -= 1; *counter -= 1;
if *counter == 0 { if *counter == 0 {
self.parents.remove(&current_path); self.parents.remove(&u);
} }
} }
true true
@ -76,148 +76,132 @@ mod tests {
#[test] #[test]
fn test_insert_non_conflicting() { fn test_insert_non_conflicting() {
let mut selected = Selected::default(); let mut s = Selected::default();
let url1 = Url::from("/a/b");
let url2 = Url::from("/c/d");
assert!(selected.insert(url1)); assert!(s.insert(Url::from("/a/b")));
assert!(selected.insert(url2)); assert!(s.insert(Url::from("/c/d")));
assert_eq!(selected.inner.len(), 2); assert_eq!(s.inner.len(), 2);
} }
#[test] #[test]
fn test_insert_conflicting_parent() { fn test_insert_conflicting_parent() {
let mut selected = Selected::default(); let mut s = Selected::default();
let parent_url = Url::from("/a");
let child_url = Url::from("/a/b");
assert!(selected.insert(parent_url)); assert!(s.insert(Url::from("/a")));
assert!(!selected.insert(child_url)); assert!(!s.insert(Url::from("/a/b")));
} }
#[test] #[test]
fn test_insert_conflicting_child() { fn test_insert_conflicting_child() {
let mut selected = Selected::default(); let mut s = Selected::default();
let child_url = Url::from("/a/b/c");
let parent_url = Url::from("/a/b");
let sibling_url = Url::from("/a/b/d");
assert!(selected.insert(child_url)); assert!(s.insert(Url::from("/a/b/c")));
assert!(!selected.insert(parent_url)); assert!(!s.insert(Url::from("/a/b")));
assert!(selected.insert(sibling_url)); assert!(s.insert(Url::from("/a/b/d")));
} }
#[test] #[test]
fn test_remove() { fn test_remove() {
let mut selected = Selected::default(); let mut s = Selected::default();
let url = Url::from("/a/b");
assert!(selected.insert(url.clone())); assert!(s.insert(Url::from("/a/b")));
assert!(selected.remove(&url)); assert!(s.remove(&Url::from("/a/b")));
assert!(selected.inner.is_empty()); assert!(s.inner.is_empty());
assert!(selected.parents.is_empty()); assert!(s.parents.is_empty());
} }
#[test] #[test]
fn insert_many_success() { fn insert_many_success() {
let mut selected = Selected::default(); let mut s = Selected::default();
let child1 = Url::from("/parent/child1");
let child2 = Url::from("/parent/child2"); assert!(s.insert_many(&[
let child3 = Url::from("/parent/child3"); &Url::from("/parent/child1"),
let urls = vec![&child1, &child2, &child3]; &Url::from("/parent/child2"),
assert!(selected.insert_many(&urls)); &Url::from("/parent/child3")
]));
} }
#[test] #[test]
fn insert_many_with_existing_parent_fails() { fn insert_many_with_existing_parent_fails() {
let mut selected = Selected::default(); let mut s = Selected::default();
selected.insert(Url::from("/parent"));
let child1 = Url::from("/parent/child1"); s.insert(Url::from("/parent"));
let child2 = Url::from("/parent/child2"); assert!(!s.insert_many(&[&Url::from("/parent/child1"), &Url::from("/parent/child2"),]));
let urls = vec![&child1, &child2];
assert!(!selected.insert_many(&urls));
} }
#[test] #[test]
fn insert_many_with_existing_child_fails() { fn insert_many_with_existing_child_fails() {
let mut selected = Selected::default(); let mut s = Selected::default();
let child = Url::from("/parent/child1");
selected.insert(child);
let child1 = Url::from("/parent/child1"); s.insert(Url::from("/parent/child1"));
let child2 = Url::from("/parent/child2"); assert!(s.insert_many(&[&Url::from("/parent/child1"), &Url::from("/parent/child2")]));
let urls = vec![&child1, &child2];
assert!(selected.insert_many(&urls));
} }
#[test] #[test]
fn insert_many_empty_urls_list() { fn insert_many_empty_urls_list() {
let mut selected = Selected::default(); let mut s = Selected::default();
assert!(selected.insert_many(&[]));
assert!(s.insert_many(&[]));
} }
#[test] #[test]
fn insert_many_with_parent_as_child_of_another_url() { fn insert_many_with_parent_as_child_of_another_url() {
let mut selected = Selected::default(); let mut s = Selected::default();
selected.insert(Url::from("/parent/child"));
let child1 = Url::from("/parent/child/child1"); s.insert(Url::from("/parent/child"));
let child2 = Url::from("/parent/child/child2"); assert!(
let urls = vec![&child1, &child2]; !s.insert_many(&[&Url::from("/parent/child/child1"), &Url::from("/parent/child/child2")])
assert!(!selected.insert_many(&urls)); );
} }
#[test] #[test]
fn insert_many_with_direct_parent_fails() { fn insert_many_with_direct_parent_fails() {
let mut selected = Selected::default(); let mut s = Selected::default();
selected.insert(Url::from("/a"));
let binding = Url::from("/a/b"); s.insert(Url::from("/a"));
let urls = vec![&binding]; assert!(!s.insert_many(&[&Url::from("/a/b")]));
assert!(!selected.insert_many(&urls));
} }
#[test] #[test]
fn insert_many_with_nested_child_fails() { fn insert_many_with_nested_child_fails() {
let mut selected = Selected::default(); let mut s = Selected::default();
selected.insert(Url::from("/a/b"));
let binding = Url::from("/a"); s.insert(Url::from("/a/b"));
let urls = vec![&binding]; assert!(!s.insert_many(&[&Url::from("/a")]));
assert!(!selected.insert_many(&urls));
} }
#[test] #[test]
fn insert_many_sibling_directories_success() { fn insert_many_sibling_directories_success() {
let mut selected = Selected::default(); let mut s = Selected::default();
let child1 = Url::from("/a/b");
let child2 = Url::from("/a/c"); assert!(s.insert_many(&[&Url::from("/a/b"), &Url::from("/a/c")]));
let urls = vec![&child1, &child2];
assert!(selected.insert_many(&urls));
} }
#[test] #[test]
fn insert_many_with_grandchild_fails() { fn insert_many_with_grandchild_fails() {
let mut selected = Selected::default(); let mut s = Selected::default();
selected.insert(Url::from("/a/b"));
let binding = Url::from("/a/b/c"); s.insert(Url::from("/a/b"));
let urls = vec![&binding]; assert!(!s.insert_many(&[&Url::from("/a/b/c")]));
assert!(!selected.insert_many(&urls));
} }
#[test] #[test]
fn test_insert_many_with_remove() { fn test_insert_many_with_remove() {
let mut selected = Selected::default(); let mut s = Selected::default();
let child1 = Url::from("/parent/child1"); let child1 = Url::from("/parent/child1");
let child2 = Url::from("/parent/child2"); let child2 = Url::from("/parent/child2");
let child3 = Url::from("/parent/child3"); let child3 = Url::from("/parent/child3");
let urls = vec![&child1, &child2, &child3]; assert!(s.insert_many(&[&child1, &child2, &child3]));
assert!(selected.insert_many(&urls));
assert!(selected.remove(&child1));
assert_eq!(selected.inner.len(), 2);
assert!(!selected.parents.is_empty());
assert!(selected.remove(&child2));
assert!(!selected.parents.is_empty());
assert!(selected.remove(&child3));
assert!(selected.inner.is_empty()); assert!(s.remove(&child1));
assert!(selected.parents.is_empty()); assert_eq!(s.inner.len(), 2);
assert!(!s.parents.is_empty());
assert!(s.remove(&child2));
assert!(!s.parents.is_empty());
assert!(s.remove(&child3));
assert!(s.inner.is_empty());
assert!(s.parents.is_empty());
} }
} }