mirror of
https://github.com/sxyazi/yazi.git
synced 2026-07-25 08:41:05 +00:00
Simplify the test code
This commit is contained in:
parent
d9f5752641
commit
4b63196731
1 changed files with 71 additions and 87 deletions
|
|
@ -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(¤t_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());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue