This commit is contained in:
sxyazi 2024-02-18 00:08:49 +08:00
parent addda17dea
commit 8fbf68298f
No known key found for this signature in database

View file

@ -9,10 +9,7 @@ pub struct Selected {
} }
impl Selected { impl Selected {
pub fn get_inner(&self)->BTreeSet<Url>{ pub fn get_inner(&self) -> BTreeSet<Url> { self.inner.clone() }
return self.inner.clone()
}
pub fn new() -> Self { Selected { inner: BTreeSet::new(), parents: HashMap::new() } }
pub fn insert(&mut self, url: Url) -> bool { self.insert_many(&[&url]) } pub fn insert(&mut self, url: Url) -> bool { self.insert_many(&[&url]) }
@ -50,7 +47,7 @@ impl Selected {
} }
pub fn remove(&mut self, url: &Url) -> bool { pub fn remove(&mut self, url: &Url) -> bool {
if !self.inner.remove(&url) { if !self.inner.remove(url) {
return false; return false;
} }
@ -66,7 +63,7 @@ impl Selected {
self.parents.remove(&current_path); self.parents.remove(&current_path);
} }
} }
return true; true
} }
pub fn is_empty(&self) -> bool { self.inner.is_empty() } pub fn is_empty(&self) -> bool { self.inner.is_empty() }
@ -77,10 +74,10 @@ impl Selected {
} }
pub fn iter(&self) -> std::collections::btree_set::Iter<Url> { self.inner.iter() } pub fn iter(&self) -> std::collections::btree_set::Iter<Url> { self.inner.iter() }
pub fn contains(&self,url:&Url)->bool{
self.inner.contains(url) pub fn contains(&self, url: &Url) -> bool { self.inner.contains(url) }
}
} }
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use std::path::Path; use std::path::Path;
@ -89,7 +86,7 @@ mod tests {
#[test] #[test]
fn test_insert_non_conflicting() { fn test_insert_non_conflicting() {
let mut selected = Selected::new(); let mut selected = Selected::default();
let url1 = Url::from(Path::new("/a/b")); let url1 = Url::from(Path::new("/a/b"));
let url2 = Url::from(Path::new("/c/d")); let url2 = Url::from(Path::new("/c/d"));
@ -100,7 +97,7 @@ mod tests {
#[test] #[test]
fn test_insert_conflicting_parent() { fn test_insert_conflicting_parent() {
let mut selected = Selected::new(); let mut selected = Selected::default();
let parent_url = Url::from(Path::new("/a")); let parent_url = Url::from(Path::new("/a"));
let child_url = Url::from(Path::new("/a/b")); let child_url = Url::from(Path::new("/a/b"));
@ -110,7 +107,7 @@ mod tests {
#[test] #[test]
fn test_insert_conflicting_child() { fn test_insert_conflicting_child() {
let mut selected = Selected::new(); let mut selected = Selected::default();
let child_url = Url::from(Path::new("/a/b/c")); let child_url = Url::from(Path::new("/a/b/c"));
let parent_url = Url::from(Path::new("/a/b")); let parent_url = Url::from(Path::new("/a/b"));
let sibling_url = Url::from(Path::new("/a/b/d")); let sibling_url = Url::from(Path::new("/a/b/d"));
@ -122,7 +119,7 @@ mod tests {
#[test] #[test]
fn test_remove() { fn test_remove() {
let mut selected = Selected::new(); let mut selected = Selected::default();
let url = Url::from(Path::new("/a/b")); let url = Url::from(Path::new("/a/b"));
assert!(selected.insert(url.clone()), "Should successfully insert url"); assert!(selected.insert(url.clone()), "Should successfully insert url");
@ -133,7 +130,7 @@ mod tests {
#[test] #[test]
fn insert_many_success() { fn insert_many_success() {
let mut selected = Selected::new(); let mut selected = Selected::default();
let child1 = Url::from(Path::new("/parent/child1")); let child1 = Url::from(Path::new("/parent/child1"));
let child2 = Url::from(Path::new("/parent/child2")); let child2 = Url::from(Path::new("/parent/child2"));
let child3 = Url::from(Path::new("/parent/child3")); let child3 = Url::from(Path::new("/parent/child3"));
@ -143,7 +140,7 @@ mod tests {
#[test] #[test]
fn insert_many_with_existing_parent_fails() { fn insert_many_with_existing_parent_fails() {
let mut selected = Selected::new(); let mut selected = Selected::default();
selected.insert(Url::from(Path::new("/parent"))); selected.insert(Url::from(Path::new("/parent")));
let childs1 = Url::from(Path::new("/parent/child1")); let childs1 = Url::from(Path::new("/parent/child1"));
@ -154,7 +151,7 @@ mod tests {
#[test] #[test]
fn insert_many_with_existing_child_fails() { fn insert_many_with_existing_child_fails() {
let mut selected = Selected::new(); let mut selected = Selected::default();
let child = Url::from(Path::new("/parent/child1")); let child = Url::from(Path::new("/parent/child1"));
selected.insert(child); selected.insert(child);
@ -169,14 +166,14 @@ mod tests {
#[test] #[test]
fn insert_many_empty_urls_list() { fn insert_many_empty_urls_list() {
let mut selected = Selected::new(); let mut selected = Selected::default();
let urls = vec![]; let urls = vec![];
assert!(!selected.insert_many(&urls), "Inserting an empty list of urls should false"); assert!(!selected.insert_many(&urls), "Inserting an empty list of urls should false");
} }
#[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::new(); let mut selected = Selected::default();
selected.insert(Url::from(Path::new("/parent/child"))); selected.insert(Url::from(Path::new("/parent/child")));
let child1 = Url::from(Path::new("/parent/child/child1")); let child1 = Url::from(Path::new("/parent/child/child1"));
let child2 = Url::from(Path::new("/parent/child/child2")); let child2 = Url::from(Path::new("/parent/child/child2"));
@ -188,7 +185,7 @@ mod tests {
} }
#[test] #[test]
fn insert_many_with_direct_parent_fails() { fn insert_many_with_direct_parent_fails() {
let mut selected = Selected::new(); let mut selected = Selected::default();
selected.insert(Url::from(Path::new("/a"))); selected.insert(Url::from(Path::new("/a")));
let binding = Url::from(Path::new("/a/b")); let binding = Url::from(Path::new("/a/b"));
let urls = vec![&binding]; let urls = vec![&binding];
@ -200,7 +197,7 @@ mod tests {
#[test] #[test]
fn insert_many_with_nested_child_fails() { fn insert_many_with_nested_child_fails() {
let mut selected = Selected::new(); let mut selected = Selected::default();
selected.insert(Url::from(Path::new("/a/b"))); selected.insert(Url::from(Path::new("/a/b")));
let binding = Url::from(Path::new("/a")); let binding = Url::from(Path::new("/a"));
let urls = vec![&binding]; let urls = vec![&binding];
@ -212,7 +209,7 @@ mod tests {
#[test] #[test]
fn insert_many_sibling_directories_success() { fn insert_many_sibling_directories_success() {
let mut selected = Selected::new(); let mut selected = Selected::default();
let child1 = Url::from(Path::new("/a/b")); let child1 = Url::from(Path::new("/a/b"));
let child2 = Url::from(Path::new("/a/c")); let child2 = Url::from(Path::new("/a/c"));
let urls = vec![&child1, &child2]; let urls = vec![&child1, &child2];
@ -221,7 +218,7 @@ mod tests {
#[test] #[test]
fn insert_many_with_grandchild_fails() { fn insert_many_with_grandchild_fails() {
let mut selected = Selected::new(); let mut selected = Selected::default();
selected.insert(Url::from(Path::new("/a/b"))); selected.insert(Url::from(Path::new("/a/b")));
let binding = Url::from(Path::new("/a/b/c")); let binding = Url::from(Path::new("/a/b/c"));
let urls = vec![&binding]; let urls = vec![&binding];
@ -232,7 +229,7 @@ mod tests {
} }
#[test] #[test]
fn test_insert_many_with_remove() { fn test_insert_many_with_remove() {
let mut selected = Selected::new(); let mut selected = Selected::default();
let child1 = Url::from(Path::new("/parent/child1")); let child1 = Url::from(Path::new("/parent/child1"));
let child2 = Url::from(Path::new("/parent/child2")); let child2 = Url::from(Path::new("/parent/child2"));
let child3 = Url::from(Path::new("/parent/child3")); let child3 = Url::from(Path::new("/parent/child3"));