use super::common; use assert_cmd::prelude::*; use predicates::prelude::*; use std::process::Command; use std::str; #[test] fn sorted_stats() { let store_file = common::get_tempfile_path(); let expected_sorted = predicate::str::similar("3\t/\n2\t/home\n1\t/home/nonexistant_dir\n").from_utf8(); Command::main_binary() .unwrap() .arg("--store") .arg(&store_file.as_os_str()) .arg("--stat") .arg("--sort_method") .arg("frequent") .assert() .stdout(expected_sorted); } #[test] fn sorted_frecent() { let store_file = common::get_tempfile_path(); let expected_sorted = predicate::str::similar("/home\n/home/nonexistant_dir\n/\n").from_utf8(); Command::main_binary() .unwrap() .arg("--store") .arg(&store_file.as_os_str()) .arg("--sorted") .assert() .stdout(expected_sorted); } #[test] fn sorted_recent() { let store_file = common::get_tempfile_path(); let expected_sorted = predicate::str::similar("/home/nonexistant_dir\n/\n/home\n").from_utf8(); Command::main_binary() .unwrap() .arg("--store") .arg(&store_file.as_os_str()) .arg("--sorted") .arg("--sort_method") .arg("recent") .assert() .stdout(expected_sorted); } #[test] fn sorted_frequent() { let store_file = common::get_tempfile_path(); let expected_sorted = predicate::str::similar("/\n/home\n/home/nonexistant_dir\n").from_utf8(); Command::main_binary() .unwrap() .arg("--store") .arg(&store_file.as_os_str()) .arg("--sorted") .arg("--sort_method") .arg("frequent") .assert() .stdout(expected_sorted); } #[test] fn sorted_invalid() { let store_file = common::get_tempfile_path(); let expected_error = predicate::str::contains("invalid value 'badsort'").from_utf8(); Command::main_binary() .unwrap() .arg("--store") .arg(&store_file.as_os_str()) .arg("--sorted") .arg("--sort_method") .arg("badsort") .assert() .stderr(expected_error); } #[test] fn truncate() { let store_file = common::get_tempfile_path(); Command::main_binary() .unwrap() .arg("--store") .arg(&store_file.as_os_str()) .arg("--truncate") .arg("2") .assert() .success(); let two_lines = predicate::function(|x: &[u8]| str::from_utf8(x).unwrap().lines().count() == 2); Command::main_binary() .unwrap() .arg("--store") .arg(&store_file.as_os_str()) .arg("--stat") .assert() .stdout(two_lines); } #[test] fn limit() { let store_file = common::get_tempfile_path(); let two_lines = common::n_results(2); Command::main_binary() .unwrap() .arg("--store") .arg(&store_file.as_os_str()) .arg("--sorted") .arg("--limit") .arg("2") .assert() .success() .stdout(two_lines); } #[test] fn limit_too_many() { let store_file = common::get_tempfile_path(); let three_lines = common::n_results(3); Command::main_binary() .unwrap() .arg("--store") .arg(&store_file.as_os_str()) .arg("--sorted") .arg("--limit") .arg("4") .assert() .success() .stdout(three_lines); } #[test] fn change_half_life_maintain_frecency() { let store_file = common::get_tempfile_path(); Command::main_binary() .unwrap() .arg("--store") .arg(&store_file.as_os_str()) .arg("--halflife") .arg("1000") .assert() .success(); let score_same = common::item_score_approx_equal("/".to_string(), 1.0); Command::main_binary() .unwrap() .arg("--store") .arg(&store_file.as_os_str()) .arg("--stat") .assert() .stdout(score_same); } #[test] fn change_half_life_new_decay() { let store_file = common::get_tempfile_path(); Command::main_binary() .unwrap() .arg("--store") .arg(&store_file.as_os_str()) .arg("--halflife") .arg("100.0") .assert() .success(); let score_half = common::item_score_approx_equal("/home".to_string(), 3.0); Command::main_binary() .unwrap() .arg("--store") .arg(&store_file.as_os_str()) .arg("--stat") .assert() .stdout(score_half); }