diff options
| author | a14m <[email protected]> | 2021-04-05 00:00:17 +0200 |
|---|---|---|
| committer | a14m <[email protected]> | 2021-04-05 00:00:17 +0200 |
| commit | a46a77b00f353be70f429111e62057c89b2c53a8 (patch) | |
| tree | bfe12a402b28e2952da461d73d88512faa6b0a7c /CLI/rust/src | |
| parent | 060f420cf7412be7ec89806816185e877883a647 (diff) | |
Add skeleton for URL/file generators
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!() } |
