Skip to content

Commit 74fe847

Browse files
committed
Add test of --skip-build
1 parent 365813e commit 74fe847

File tree

1 file changed

+82
-21
lines changed

1 file changed

+82
-21
lines changed

src/command.rs

Lines changed: 82 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,8 @@ struct Init {
185185
crate_name: Option<String>,
186186
}
187187

188+
type InitStep = fn(&mut Init, &Step, &Logger) -> result::Result<(), Error>;
189+
188190
impl Init {
189191
pub fn new(
190192
path: Option<String>,
@@ -203,32 +205,47 @@ impl Init {
203205
}
204206
}
205207

206-
pub fn process(&mut self, log: &Logger, mode: InitMode) -> result::Result<(), Error> {
207-
let process_steps: Vec<fn(&mut Init, &Step, &Logger) -> result::Result<(), Error>> =
208-
match mode {
209-
InitMode::Normal => vec![
210-
Init::step_check_dependency,
211-
Init::step_add_wasm_target,
212-
Init::step_build_wasm,
213-
Init::step_create_dir,
214-
Init::step_create_json,
215-
Init::step_copy_readme,
216-
Init::step_check_create_type,
217-
Init::step_install_wasm_bindgen,
218-
Init::step_running_wasm_bindgen,
219-
],
220-
InitMode::Nobuild => vec![
221-
Init::step_check_dependency,
222-
Init::step_create_dir,
223-
Init::step_create_json,
224-
Init::step_copy_readme,
225-
],
208+
fn get_process_steps(mode: InitMode) -> Vec<(&'static str, InitStep)> {
209+
macro_rules! steps {
210+
($($name:ident),+) => {
211+
{
212+
let mut steps: Vec<(&'static str, InitStep)> = Vec::new();
213+
$(steps.push((stringify!($name), Init::$name));)*
214+
steps
215+
}
226216
};
217+
($($name:ident,)*) => (steps![$($name),*])
218+
}
219+
220+
match mode {
221+
InitMode::Normal => steps![
222+
step_check_dependency,
223+
step_add_wasm_target,
224+
step_build_wasm,
225+
step_create_dir,
226+
step_create_json,
227+
step_copy_readme,
228+
step_check_create_type,
229+
step_install_wasm_bindgen,
230+
step_running_wasm_bindgen,
231+
],
232+
InitMode::Nobuild => steps![
233+
step_check_dependency,
234+
step_create_dir,
235+
step_create_json,
236+
step_copy_readme,
237+
],
238+
}
239+
}
240+
241+
pub fn process(&mut self, log: &Logger, mode: InitMode) -> result::Result<(), Error> {
242+
let process_steps = Init::get_process_steps(mode);
243+
227244
let mut step_counter = Step::new(process_steps.len());
228245

229246
let started = Instant::now();
230247

231-
for process_step in process_steps {
248+
for (_, process_step) in process_steps {
232249
process_step(self, &step_counter, log)?;
233250
step_counter.inc();
234251
}
@@ -453,3 +470,47 @@ fn set_crate_path(path: Option<String>) -> String {
453470

454471
crate_path
455472
}
473+
474+
#[cfg(test)]
475+
mod test {
476+
use super::*;
477+
478+
#[test]
479+
fn init_normal_build() {
480+
let steps: Vec<&str> = Init::get_process_steps(InitMode::Normal)
481+
.into_iter()
482+
.map(|(n, _)| n)
483+
.collect();
484+
assert_eq!(
485+
steps,
486+
[
487+
"step_check_dependency",
488+
"step_add_wasm_target",
489+
"step_build_wasm",
490+
"step_create_dir",
491+
"step_create_json",
492+
"step_copy_readme",
493+
"step_check_create_type",
494+
"step_install_wasm_bindgen",
495+
"step_running_wasm_bindgen"
496+
]
497+
);
498+
}
499+
500+
#[test]
501+
fn init_skip_build() {
502+
let steps: Vec<&str> = Init::get_process_steps(InitMode::Nobuild)
503+
.into_iter()
504+
.map(|(n, _)| n)
505+
.collect();
506+
assert_eq!(
507+
steps,
508+
[
509+
"step_check_dependency",
510+
"step_create_dir",
511+
"step_create_json",
512+
"step_copy_readme"
513+
]
514+
);
515+
}
516+
}

0 commit comments

Comments
 (0)