diff options
Diffstat (limited to 'CLI/rust/src')
| -rw-r--r-- | CLI/rust/src/game_of_life/generators/input.rs | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/CLI/rust/src/game_of_life/generators/input.rs b/CLI/rust/src/game_of_life/generators/input.rs index 1f10a22..c2b2bb0 100644 --- a/CLI/rust/src/game_of_life/generators/input.rs +++ b/CLI/rust/src/game_of_life/generators/input.rs @@ -1,5 +1,6 @@ use crate::game_of_life::opts::Opts; use crate::game_of_life::universe::Universe; +use regex::Regex; #[cfg(test)] use mocktopus::macros::mockable; @@ -12,5 +13,71 @@ use mocktopus::macros::mockable; /// used as the seeding input #[cfg_attr(test, mockable)] pub(crate) fn new(opts: Opts) -> Universe { + let input = opts.input.clone().unwrap(); + match Regex::new("^(ht|f)?tp(s)?://*").unwrap().is_match(&input) { + true => generate_url_data(opts), + false => generate_file_data(opts), + } +} + +#[cfg(test)] +mod new { + use super::*; + use mocktopus::mocking::*; + + fn universe_mock(opts: Opts) -> Universe { + Universe { + opts, + current: vec![vec![]], + future: vec![vec![]], + } + } + + #[test] + fn with_url() { + let opts = Opts { + seed: 1337, + input: Some(String::from("https://example.com")), + width: 13, + height: 13, + live_cell: 'L', + dead_cell: 'D', + delay: 13, + }; + + generate_file_data.mock_safe(|_| panic!()); + generate_url_data.mock_safe(|opts| MockResult::Return(universe_mock(opts))); + assert_eq!(new(opts.clone()), universe_mock(opts.clone())); + } + + #[test] + fn with_file() { + let opts = Opts { + seed: 1337, + input: Some(String::from("./example.txt")), + width: 13, + height: 13, + live_cell: 'L', + dead_cell: 'D', + delay: 13, + }; + + generate_file_data.mock_safe(|opts| MockResult::Return(universe_mock(opts))); + generate_url_data.mock_safe(|_| panic!()); + assert_eq!(new(opts.clone()), universe_mock(opts.clone())); + } +} + +/// Reads a local file and parses it, converting alpha-numerical chars into living cells +/// in a newly generated universe simulation +#[cfg_attr(test, mockable)] +fn generate_file_data(_opts: Opts) -> Universe { + unimplemented!() +} + +/// Reads a URL and parses it, converting alpha-numerical chars into living cells +/// in a newly generated universe simulation +#[cfg_attr(test, mockable)] +fn generate_url_data(_opts: Opts) -> Universe { unimplemented!() } |
