From f910da8ca45a6cccfa0453a6ba051395931a82c5 Mon Sep 17 00:00:00 2001 From: ClementTsang <34804052+ClementTsang@users.noreply.github.com> Date: Wed, 24 May 2023 22:13:15 -0400 Subject: [PATCH] add tests, fix not using ms --- src/options.rs | 134 +++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 119 insertions(+), 15 deletions(-) diff --git a/src/options.rs b/src/options.rs index 15e7a37fe..36a771d3a 100644 --- a/src/options.rs +++ b/src/options.rs @@ -582,9 +582,9 @@ fn get_show_average_cpu(matches: &ArgMatches, config: &Config) -> bool { true } -fn try_parse_secs(s: &str) -> error::Result { +fn try_parse_ms(s: &str) -> error::Result { if let Ok(val) = humantime::parse_duration(s) { - Ok(val.as_secs()) + Ok(val.as_millis().try_into()?) } else if let Ok(val) = s.parse::() { Ok(val) } else { @@ -599,10 +599,10 @@ fn get_default_time_value( ) -> error::Result { let default_time = if let Some(default_time_value) = matches.get_one::("default_time_value") { - try_parse_secs(default_time_value)? + try_parse_ms(default_time_value)? } else if let Some(flags) = &config.flags { if let Some(default_time_value) = &flags.default_time_value { - try_parse_secs(default_time_value)? + try_parse_ms(default_time_value)? } else { DEFAULT_TIME_MILLISECONDS } @@ -628,10 +628,10 @@ fn get_time_interval( matches: &ArgMatches, config: &Config, retention_ms: u64, ) -> error::Result { let time_interval = if let Some(time_interval) = matches.get_one::("time_delta") { - try_parse_secs(time_interval)? + try_parse_ms(time_interval)? } else if let Some(flags) = &config.flags { if let Some(time_interval) = &flags.time_delta { - try_parse_secs(time_interval)? + try_parse_ms(time_interval)? } else { TIME_CHANGE_MILLISECONDS } @@ -872,26 +872,130 @@ fn get_retention_ms(matches: &ArgMatches, config: &Config) -> error::Result mod test { use clap::ArgMatches; - use super::{get_color_scheme, get_widget_layout, Config}; - use crate::{app::App, canvas::canvas_styling::CanvasStyling, options::try_parse_secs}; + use super::{get_color_scheme, get_time_interval, get_widget_layout, Config}; + use crate::{ + app::App, + canvas::canvas_styling::CanvasStyling, + options::{get_default_time_value, try_parse_ms, ConfigFlags}, + }; #[test] - fn verify_try_parse_secs() { + fn verify_try_parse_ms() { let a = "100s"; let b = "100"; let c = "1 min"; let d = "1 hour 1 min"; - assert_eq!(try_parse_secs(a), Ok(100)); - assert_eq!(try_parse_secs(b), Ok(100)); - assert_eq!(try_parse_secs(c), Ok(60)); - assert_eq!(try_parse_secs(d), Ok(3660)); + assert_eq!(try_parse_ms(a), Ok(100 * 1000)); + assert_eq!(try_parse_ms(b), Ok(100)); + assert_eq!(try_parse_ms(c), Ok(60 * 1000)); + assert_eq!(try_parse_ms(d), Ok(3660 * 1000)); let a_bad = "1 test"; let b_bad = "-100"; - assert!(try_parse_secs(a_bad).is_err()); - assert!(try_parse_secs(b_bad).is_err()); + assert!(try_parse_ms(a_bad).is_err()); + assert!(try_parse_ms(b_bad).is_err()); + } + + #[test] + fn matches_human_times() { + let config = Config::default(); + let app = crate::clap::build_app(); + + { + let app = app.clone(); + let delta_args = vec!["btm", "--time_delta", "2 min"]; + let matches = app.get_matches_from(delta_args); + + assert_eq!( + get_time_interval(&matches, &config, 60 * 60 * 1000), + Ok(2 * 60 * 1000) + ); + } + + { + let default_time_args = vec!["btm", "--default_time_value", "300s"]; + let matches = app.get_matches_from(default_time_args); + + assert_eq!( + get_default_time_value(&matches, &config, 60 * 60 * 1000), + Ok(5 * 60 * 1000) + ); + } + } + + #[test] + fn matches_number_times() { + let config = Config::default(); + let app = crate::clap::build_app(); + + { + let app = app.clone(); + let delta_args = vec!["btm", "--time_delta", "120000"]; + let matches = app.get_matches_from(delta_args); + + assert_eq!( + get_time_interval(&matches, &config, 60 * 60 * 1000), + Ok(2 * 60 * 1000) + ); + } + + { + let default_time_args = vec!["btm", "--default_time_value", "300000"]; + let matches = app.get_matches_from(default_time_args); + + assert_eq!( + get_default_time_value(&matches, &config, 60 * 60 * 1000), + Ok(5 * 60 * 1000) + ); + } + } + + #[test] + fn config_human_times() { + let app = crate::clap::build_app(); + let matches = app.get_matches_from(&["btm"]); + + let mut config = Config::default(); + let mut flags = ConfigFlags::default(); + flags.time_delta = Some("2 min".to_string()); + flags.default_time_value = Some("300s".to_string()); + + config.flags = Some(flags); + + assert_eq!( + get_time_interval(&matches, &config, 60 * 60 * 1000), + Ok(2 * 60 * 1000) + ); + + assert_eq!( + get_default_time_value(&matches, &config, 60 * 60 * 1000), + Ok(5 * 60 * 1000) + ); + } + + #[test] + fn config_number_times() { + let app = crate::clap::build_app(); + let matches = app.get_matches_from(&["btm"]); + + let mut config = Config::default(); + let mut flags = ConfigFlags::default(); + flags.time_delta = Some("120000".to_string()); + flags.default_time_value = Some("300000".to_string()); + + config.flags = Some(flags); + + assert_eq!( + get_time_interval(&matches, &config, 60 * 60 * 1000), + Ok(2 * 60 * 1000) + ); + + assert_eq!( + get_default_time_value(&matches, &config, 60 * 60 * 1000), + Ok(5 * 60 * 1000) + ); } fn create_app(mut config: Config, matches: ArgMatches) -> App {