diff --git a/libixx/src/index.rs b/libixx/src/index.rs index 77f9a08..723686a 100644 --- a/libixx/src/index.rs +++ b/libixx/src/index.rs @@ -125,6 +125,10 @@ impl Index { .map(|segment| segment.to_lowercase()) .collect::>(); + if search.is_empty() { + return Ok(vec![]); + } + let mut results = Vec::new(); for (idx, option) in self.0.iter().enumerate() { @@ -139,11 +143,13 @@ impl Index { // remove last dot... option_name.pop(); + let lower_option_name = option_name.to_lowercase(); + let mut start = 0; 'outer: { for segment in &search { - match option_name[start..].find(segment) { + match lower_option_name[start..].find(segment) { Some(idx) => start = idx + segment.len(), None => break 'outer, } diff --git a/libixx/src/test/mod.rs b/libixx/src/test/mod.rs index 02e7d64..4ab2ce9 100644 --- a/libixx/src/test/mod.rs +++ b/libixx/src/test/mod.rs @@ -1,21 +1,43 @@ -use std::{collections::HashMap, fs::File}; - use crate::Index; #[test] fn test() { - let options: HashMap = - serde_json::from_str(include_str!("./options.json")).unwrap(); + let mut index = Index::default(); - let options = options.keys().collect::>(); + index.push("home.enableDebugInfo"); + index.push("home.enableNixpkgsReleaseCheck"); + index.push("home.file..enable"); + index.push("home.language.measurement"); + index.push("home.pointerCursor.gtk.enable"); + index.push("home.pointerCursor.x11.enable"); + index.push("programs.home-manager.enable"); + index.push("services.home-manager.autoUpgrade.enable"); + index.push("services.home-manager.autoUpgrade.frequency"); - let mut index = Index::default(); - for option in &options { - index.push(option); - } + assert_eq!( + index.search("ho*auto", 10).unwrap(), + vec![ + ( + 7usize, + "services.home-manager.autoUpgrade.enable".to_string() + ), + ( + 8usize, + "services.home-manager.autoUpgrade.frequency".to_string() + ) + ] + ); - println!("{:?}", index.search("ho*exta", 10).unwrap()); + assert_eq!( + index.search("ho*auto*ena", 10).unwrap(), + vec![( + 7usize, + "services.home-manager.autoUpgrade.enable".to_string() + )] + ); - let mut file = File::create("index.nuscht").unwrap(); - index.write_into(&mut file).unwrap(); + assert_eq!( + index.search("ho*en*Nix", 10).unwrap(), + vec![(1usize, "home.enableNixpkgsReleaseCheck".to_string())] + ); }