From 74fe847f77fcff8067842c9001de81fb99a726ed Mon Sep 17 00:00:00 2001 From: kohensu Date: Wed, 13 Jun 2018 12:06:32 +0200 Subject: [PATCH] Add test of --skip-build --- src/command.rs | 103 +++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 82 insertions(+), 21 deletions(-) diff --git a/src/command.rs b/src/command.rs index f818f4ca..310d36c6 100644 --- a/src/command.rs +++ b/src/command.rs @@ -185,6 +185,8 @@ struct Init { crate_name: Option, } +type InitStep = fn(&mut Init, &Step, &Logger) -> result::Result<(), Error>; + impl Init { pub fn new( path: Option, @@ -203,32 +205,47 @@ impl Init { } } - pub fn process(&mut self, log: &Logger, mode: InitMode) -> result::Result<(), Error> { - let process_steps: Vec result::Result<(), Error>> = - match mode { - InitMode::Normal => vec![ - Init::step_check_dependency, - Init::step_add_wasm_target, - Init::step_build_wasm, - Init::step_create_dir, - Init::step_create_json, - Init::step_copy_readme, - Init::step_check_create_type, - Init::step_install_wasm_bindgen, - Init::step_running_wasm_bindgen, - ], - InitMode::Nobuild => vec![ - Init::step_check_dependency, - Init::step_create_dir, - Init::step_create_json, - Init::step_copy_readme, - ], + fn get_process_steps(mode: InitMode) -> Vec<(&'static str, InitStep)> { + macro_rules! steps { + ($($name:ident),+) => { + { + let mut steps: Vec<(&'static str, InitStep)> = Vec::new(); + $(steps.push((stringify!($name), Init::$name));)* + steps + } }; + ($($name:ident,)*) => (steps![$($name),*]) + } + + match mode { + InitMode::Normal => steps![ + step_check_dependency, + step_add_wasm_target, + step_build_wasm, + step_create_dir, + step_create_json, + step_copy_readme, + step_check_create_type, + step_install_wasm_bindgen, + step_running_wasm_bindgen, + ], + InitMode::Nobuild => steps![ + step_check_dependency, + step_create_dir, + step_create_json, + step_copy_readme, + ], + } + } + + pub fn process(&mut self, log: &Logger, mode: InitMode) -> result::Result<(), Error> { + let process_steps = Init::get_process_steps(mode); + let mut step_counter = Step::new(process_steps.len()); let started = Instant::now(); - for process_step in process_steps { + for (_, process_step) in process_steps { process_step(self, &step_counter, log)?; step_counter.inc(); } @@ -453,3 +470,47 @@ fn set_crate_path(path: Option) -> String { crate_path } + +#[cfg(test)] +mod test { + use super::*; + + #[test] + fn init_normal_build() { + let steps: Vec<&str> = Init::get_process_steps(InitMode::Normal) + .into_iter() + .map(|(n, _)| n) + .collect(); + assert_eq!( + steps, + [ + "step_check_dependency", + "step_add_wasm_target", + "step_build_wasm", + "step_create_dir", + "step_create_json", + "step_copy_readme", + "step_check_create_type", + "step_install_wasm_bindgen", + "step_running_wasm_bindgen" + ] + ); + } + + #[test] + fn init_skip_build() { + let steps: Vec<&str> = Init::get_process_steps(InitMode::Nobuild) + .into_iter() + .map(|(n, _)| n) + .collect(); + assert_eq!( + steps, + [ + "step_check_dependency", + "step_create_dir", + "step_create_json", + "step_copy_readme" + ] + ); + } +}