Skip to content

Commit

Permalink
add tests, fix not using ms
Browse files Browse the repository at this point in the history
  • Loading branch information
ClementTsang committed May 25, 2023
1 parent 1e59d87 commit f910da8
Showing 1 changed file with 119 additions and 15 deletions.
134 changes: 119 additions & 15 deletions src/options.rs
Original file line number Diff line number Diff line change
Expand Up @@ -582,9 +582,9 @@ fn get_show_average_cpu(matches: &ArgMatches, config: &Config) -> bool {
true
}

fn try_parse_secs(s: &str) -> error::Result<u64> {
fn try_parse_ms(s: &str) -> error::Result<u64> {
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::<u64>() {
Ok(val)
} else {
Expand All @@ -599,10 +599,10 @@ fn get_default_time_value(
) -> error::Result<u64> {
let default_time =
if let Some(default_time_value) = matches.get_one::<String>("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
}
Expand All @@ -628,10 +628,10 @@ fn get_time_interval(
matches: &ArgMatches, config: &Config, retention_ms: u64,
) -> error::Result<u64> {
let time_interval = if let Some(time_interval) = matches.get_one::<String>("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
}
Expand Down Expand Up @@ -872,26 +872,130 @@ fn get_retention_ms(matches: &ArgMatches, config: &Config) -> error::Result<u64>
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 {
Expand Down

0 comments on commit f910da8

Please sign in to comment.