summaryrefslogtreecommitdiffstats
path: root/CLI/rust/src
diff options
context:
space:
mode:
authora14m <[email protected]>2021-04-05 00:00:17 +0200
committera14m <[email protected]>2021-04-05 00:00:17 +0200
commita46a77b00f353be70f429111e62057c89b2c53a8 (patch)
treebfe12a402b28e2952da461d73d88512faa6b0a7c /CLI/rust/src
parent060f420cf7412be7ec89806816185e877883a647 (diff)
Add skeleton for URL/file generators
Diffstat (limited to 'CLI/rust/src')
-rw-r--r--CLI/rust/src/game_of_life/generators/input.rs67
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!()
}