mirror of
https://github.com/nushell/nushell.git
synced 2025-08-03 01:59:22 +02:00
46 lines
1.5 KiB
Rust
46 lines
1.5 KiB
Rust
use crate::completion::matchers;
|
|
pub struct Matcher;
|
|
|
|
impl matchers::Matcher for Matcher {
|
|
fn matches(&self, partial: &str, from: &str) -> bool {
|
|
from.to_ascii_lowercase()
|
|
.starts_with(partial.to_ascii_lowercase().as_str())
|
|
}
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
use super::*;
|
|
|
|
// TODO: check some unicode matches if this becomes relevant
|
|
|
|
// FIXME: could work exhaustively through ['-', '--'. ''] in a loop for each test
|
|
#[test]
|
|
fn completes_exact_matches() {
|
|
let matcher: Box<dyn matchers::Matcher> = Box::new(Matcher);
|
|
|
|
assert!(matcher.matches("shouldmatch", "shouldmatch"));
|
|
assert!(matcher.matches("shouldm", "shouldmatch"));
|
|
assert!(matcher.matches("--also-should-m", "--also-should-match"));
|
|
assert!(matcher.matches("-also-should-m", "-also-should-match"));
|
|
}
|
|
|
|
#[test]
|
|
fn completes_case_insensitive_matches() {
|
|
let matcher: Box<dyn matchers::Matcher> = Box::new(Matcher);
|
|
|
|
assert!(matcher.matches("thisshould", "Thisshouldmatch"));
|
|
assert!(matcher.matches("--Shouldm", "--shouldmatch"));
|
|
assert!(matcher.matches("-Shouldm", "-shouldmatch"));
|
|
}
|
|
|
|
#[test]
|
|
fn should_not_match_when_unequal() {
|
|
let matcher: Box<dyn matchers::Matcher> = Box::new(Matcher);
|
|
|
|
assert!(!matcher.matches("ashouldmatch", "Shouldnotmatch"));
|
|
assert!(!matcher.matches("--ashouldnotmatch", "--Shouldnotmatch"));
|
|
assert!(!matcher.matches("-ashouldnotmatch", "-Shouldnotmatch"));
|
|
}
|
|
}
|