From b41bf6dcf49f7cd7cc726e049b0f0f2775566fc7 Mon Sep 17 00:00:00 2001 From: perro Date: Tue, 14 Mar 2023 12:17:27 -0700 Subject: [PATCH] Autocomplete tests --- src/error.rs | 4 ++++ src/formatters.rs | 44 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/src/error.rs b/src/error.rs index 916a5b2..a07fc27 100644 --- a/src/error.rs +++ b/src/error.rs @@ -200,6 +200,10 @@ Is there a permissions issue? Here's the underlaying error: letters, numbers, dots, dashes and underscores are allowed.")] InvalidCustomFormatter(String), + #[error("The specified name for a autocompleted formatter \"{0}\" is not valid. Only ascii +letters, numbers, dots, dashes and underscores are allowed.")] + InvalidAutocompleteFormatter(String), + #[error("You have specified a custom formatter \"{0}\" but your config file doesn't say where to look for it. diff --git a/src/formatters.rs b/src/formatters.rs index a88a0d8..36503aa 100644 --- a/src/formatters.rs +++ b/src/formatters.rs @@ -74,3 +74,47 @@ impl FromStr for Formatter { }) } } + +#[cfg(test)] +mod tests { + + use super::*; + + fn autocomplete(s: &str) -> error::Result { + let formatters = vec!["text", "csv", "json", "ids", "ical", "chart"]; + if s.len() > 1 { + for formatter in formatters { + if formatter.contains(s) { + return Formatter::from_str(formatter) + } + } + } + Err(error::Error::InvalidAutocompleteFormatter(s.to_string())) + } + + #[test] + fn valid_autocomplete_starts_with() { + let format = autocomplete("tex"); + assert!(format.is_ok()); + } + + #[test] + fn valid_autocomplete_contains() { + let format = autocomplete("sv"); + assert!(format.is_ok()); + } + + #[test] + fn invalid_autocomplete_to_short() { + let format = autocomplete("s"); + assert!(format.is_err()); + } + + #[test] + fn invalid_autocomplete_does_not_contains() { + let format = autocomplete("fail"); + assert!(format.is_err()); + } + + // TODO: autocomplete for custom formatter +}