From 6237c81e2ae942aae9c4194a34734ae3bdc19be7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20=C4=8Cert=C3=ADk?= Date: Fri, 27 Sep 2024 14:42:10 -0600 Subject: [PATCH 1/4] Fix the syntax in if_else.sh The test script `if_else.sh` has incorrect syntax for an if statement: $ bash if_else.sh if_else.sh: line 2: syntax error near unexpected token `then' if_else.sh: line 2: `if [[ $FOO -eq 1 ]] then' The correct syntax uses `;` before `then`. --- scripts/if_else.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/if_else.sh b/scripts/if_else.sh index f3fd04f..ddb39d1 100644 --- a/scripts/if_else.sh +++ b/scripts/if_else.sh @@ -1,8 +1,8 @@ FOO=2 -if [[ $FOO -eq 1 ]] then +if [[ $FOO -eq 1 ]]; then echo "FOO is 1" -elif [[ $FOO -eq 2 ]] then +elif [[ $FOO -eq 2 ]]; then echo "FOO is 2" else echo "FOO is not 1 or 2" -fi \ No newline at end of file +fi From 76cb0338d01be7f01f93417b0499ee361a201025 Mon Sep 17 00:00:00 2001 From: prsabahrami Date: Sat, 28 Sep 2024 17:45:21 -0400 Subject: [PATCH 2/4] fix if syntax --- crates/deno_task_shell/src/grammar.pest | 4 ++-- crates/tests/src/lib.rs | 19 +++++++++++++++++++ scripts/if_else.sh | 6 +++--- 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/crates/deno_task_shell/src/grammar.pest b/crates/deno_task_shell/src/grammar.pest index c3e081f..4a54219 100644 --- a/crates/deno_task_shell/src/grammar.pest +++ b/crates/deno_task_shell/src/grammar.pest @@ -289,8 +289,8 @@ else_part = !{ } conditional_expression = !{ - ("[[" ~ (unary_conditional_expression | binary_conditional_expression | UNQUOTED_PENDING_WORD) ~ "]]") | - ("[" ~ (unary_conditional_expression | binary_conditional_expression | UNQUOTED_PENDING_WORD) ~ "]") | + ("[[" ~ (unary_conditional_expression | binary_conditional_expression | UNQUOTED_PENDING_WORD) ~ "]]" ~ ";"?) | + ("[" ~ (unary_conditional_expression | binary_conditional_expression | UNQUOTED_PENDING_WORD) ~ "]" ~ ";"?) | ("test" ~ (unary_conditional_expression | binary_conditional_expression | UNQUOTED_PENDING_WORD)) } diff --git a/crates/tests/src/lib.rs b/crates/tests/src/lib.rs index eb6e23e..bf8a2b6 100644 --- a/crates/tests/src/lib.rs +++ b/crates/tests/src/lib.rs @@ -887,6 +887,25 @@ async fn date() { .await; } +#[tokio::test] +async fn if_clause() { + TestBuilder::new() + .command(r#"FOO=2; if [[ $FOO == 1 ]]; then echo "FOO is 1"; elif [[ $FOO -eq 2 ]]; then echo "FOO is 2"; else echo "FOO is not 1 or 2"; fi"#) + .assert_stdout("FOO is 2\n") + .run() + .await; + TestBuilder::new() + .command(r#"FOO=3; if [[ $FOO == 1 ]]; then echo "FOO is 1"; elif [[ $FOO -eq 2 ]]; then echo "FOO is 2"; else echo "FOO is not 1 or 2"; fi"#) + .assert_stdout("FOO is not 1 or 2\n") + .run() + .await; + + TestBuilder::new() + .command(r#"FOO=1; if [[ $FOO == 1 ]]; then echo "FOO is 1"; elif [[ $FOO -eq 2 ]]; then echo "FOO is 2"; else echo "FOO is not 1 or 2"; fi"#) + .assert_stdout("FOO is 1\n") + .run() + .await; +} #[cfg(test)] fn no_such_file_error_text() -> &'static str { if cfg!(windows) { diff --git a/scripts/if_else.sh b/scripts/if_else.sh index ddb39d1..7a54692 100644 --- a/scripts/if_else.sh +++ b/scripts/if_else.sh @@ -1,8 +1,8 @@ FOO=2 if [[ $FOO -eq 1 ]]; then - echo "FOO is 1" + echo "FOO is 1"; elif [[ $FOO -eq 2 ]]; then - echo "FOO is 2" + echo "FOO is 2"; else - echo "FOO is not 1 or 2" + echo "FOO is not 1 or 2"; fi From 8b7dfd96d0122cdf105d4dbdd8b2886ea6967e22 Mon Sep 17 00:00:00 2001 From: prsabahrami Date: Sat, 28 Sep 2024 19:11:37 -0400 Subject: [PATCH 3/4] Added from_file to TestBuilder and minor fix in if parser --- crates/deno_task_shell/src/grammar.pest | 2 +- crates/tests/src/lib.rs | 11 ++++++++ crates/tests/src/test_builder.rs | 4 +++ scripts/if_else.sh | 35 ++++++++++++++++++++++++- 4 files changed, 50 insertions(+), 2 deletions(-) diff --git a/crates/deno_task_shell/src/grammar.pest b/crates/deno_task_shell/src/grammar.pest index 4a54219..abc6947 100644 --- a/crates/deno_task_shell/src/grammar.pest +++ b/crates/deno_task_shell/src/grammar.pest @@ -284,7 +284,7 @@ if_clause = !{ } else_part = !{ - Elif ~ conditional_expression ~ Then ~ complete_command ~ linebreak ~ else_part? | + Elif ~ conditional_expression ~ linebreak ~ Then ~ complete_command ~ linebreak ~ else_part? | Else ~ linebreak ~ complete_command } diff --git a/crates/tests/src/lib.rs b/crates/tests/src/lib.rs index bf8a2b6..0466d5a 100644 --- a/crates/tests/src/lib.rs +++ b/crates/tests/src/lib.rs @@ -905,7 +905,18 @@ async fn if_clause() { .assert_stdout("FOO is 1\n") .run() .await; + + TestBuilder::new() + .from_file("../../scripts/if_else.sh") + .assert_exit_code(0) + .assert_stdout("FOO is 2\n") + .assert_stdout("FOO is 2\n") + .assert_stdout("FOO is 2\n") + .assert_stdout("FOO is 2\n") + .run() + .await; } + #[cfg(test)] fn no_such_file_error_text() -> &'static str { if cfg!(windows) { diff --git a/crates/tests/src/test_builder.rs b/crates/tests/src/test_builder.rs index 4b1ad3c..a111ec5 100644 --- a/crates/tests/src/test_builder.rs +++ b/crates/tests/src/test_builder.rs @@ -128,6 +128,10 @@ impl TestBuilder { self } + pub fn from_file(&mut self, path: &str) -> &mut Self { + self.command(fs::read_to_string(path).unwrap().as_str()) + } + pub fn stdin(&mut self, stdin: &str) -> &mut Self { self.stdin = stdin.as_bytes().to_vec(); self diff --git a/scripts/if_else.sh b/scripts/if_else.sh index 7a54692..5da3368 100644 --- a/scripts/if_else.sh +++ b/scripts/if_else.sh @@ -1,8 +1,41 @@ FOO=2 -if [[ $FOO -eq 1 ]]; then +if [[ $FOO -eq 1 ]]; +then echo "FOO is 1"; +elif [[ $FOO -eq 2 ]]; +then + echo "FOO is 2"; +else + echo "FOO is not 1 or 2"; +fi + +FOO=2 +if [[ $FOO -eq 1 ]]; then + echo "FOO is 1" elif [[ $FOO -eq 2 ]]; then + echo "FOO is 2" +else + echo "FOO is not 1 or 2" +fi + +FOO=2 +if [[ $FOO -eq 1 ]]; +then + echo "FOO is 1"; +elif [[ $FOO -eq 2 ]]; +then echo "FOO is 2"; else echo "FOO is not 1 or 2"; fi + +FOO=2 +if [[ $FOO -eq 1 ]] +then + echo "FOO is 1"; +elif [[ $FOO -eq 2 ]] +then + echo "FOO is 2"; +else + echo "FOO is not 1 or 2"; +fi \ No newline at end of file From 6a61a98b072bc887091b28f56cf28e1cc9037d42 Mon Sep 17 00:00:00 2001 From: prsabahrami Date: Sat, 28 Sep 2024 19:12:59 -0400 Subject: [PATCH 4/4] Update function name to script_file due to from_* conflict --- crates/tests/src/lib.rs | 2 +- crates/tests/src/test_builder.rs | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/crates/tests/src/lib.rs b/crates/tests/src/lib.rs index 0466d5a..5646006 100644 --- a/crates/tests/src/lib.rs +++ b/crates/tests/src/lib.rs @@ -907,7 +907,7 @@ async fn if_clause() { .await; TestBuilder::new() - .from_file("../../scripts/if_else.sh") + .script_file("../../scripts/if_else.sh") .assert_exit_code(0) .assert_stdout("FOO is 2\n") .assert_stdout("FOO is 2\n") diff --git a/crates/tests/src/test_builder.rs b/crates/tests/src/test_builder.rs index a111ec5..6899ea1 100644 --- a/crates/tests/src/test_builder.rs +++ b/crates/tests/src/test_builder.rs @@ -128,8 +128,9 @@ impl TestBuilder { self } - pub fn from_file(&mut self, path: &str) -> &mut Self { - self.command(fs::read_to_string(path).unwrap().as_str()) + pub fn script_file(&mut self, path: &str) -> &mut Self { + self.command(fs::read_to_string(path).unwrap().as_str()); + self } pub fn stdin(&mut self, stdin: &str) -> &mut Self {