diff --git a/cmd/grill/flags.go b/cmd/grill/flags.go index 34713c5..e5e8baf 100644 --- a/cmd/grill/flags.go +++ b/cmd/grill/flags.go @@ -31,7 +31,7 @@ var opts = struct { no: flags.Bool("no", false, "answer no to all questions (unsupported)"), preserveEnv: flags.Bool("preserve-env", false, "don't reset common environment variables"), keepTmpdir: flags.Bool("keep-tmpdir", false, "keep temporary directories"), - shell: flags.String("shell", "/bin/sh", "shell to use for running tests (unsupported)"), + shell: flags.String("shell", "/bin/sh", "shell to use for running tests"), shellOpts: flags.String("shell-opts", "", "arguments to invoke shell with (unsupported)"), xunitFile: flags.String("xunit-file", "", "path to write xUnit XML output (unsupported)"), indent: flags.Int("indent", 2, "number of spaces to use for indentation (unsupported)"), diff --git a/cmd/grill/main.go b/cmd/grill/main.go index f493ac9..6c021c0 100644 --- a/cmd/grill/main.go +++ b/cmd/grill/main.go @@ -58,7 +58,7 @@ func Main(a []string, stdout, stderr io.Writer) int { return 2 } - context, err := grill.DefaultTestContext("bash", stdout, stderr) + context, err := grill.DefaultTestContext(*opts.shell, stdout, stderr) if err != nil { log.Println(err) return 1 @@ -89,6 +89,10 @@ func Main(a []string, stdout, stderr io.Writer) int { if err := suite.WriteErr(); err != nil { log.Println(err) } + } else { + if err := suite.RemoveErr(); err != nil { + log.Println(err) + } } } diff --git a/internal/grill/grill.go b/internal/grill/grill.go index 0e2e22b..419104d 100644 --- a/internal/grill/grill.go +++ b/internal/grill/grill.go @@ -127,6 +127,14 @@ func (suite TestSuite) WriteErr() error { return nil } +// RemoveErr removes the matching .err file, if it exists. +func (suite TestSuite) RemoveErr() error { + if err := os.Remove(suite.Name + ".err"); err != nil && !os.IsNotExist(err) { + return err + } + return nil +} + // WriteReport writes out a report on the overall grill run. // // Setting quiet to true will hide the suite diffs diff --git a/tests/errfile.t b/tests/errfile.t index 085e36f..782fff9 100644 --- a/tests/errfile.t +++ b/tests/errfile.t @@ -1,14 +1,27 @@ - $ cp $TESTDIR/errfile/*.t . + $ mkdir sub + $ echo ' $ true' > sub/pass.t + $ echo ' $ false' > sub/fail.t - $ grill pass.t >/dev/null 2>&1 - - $ grill fail.t >/dev/null 2>&1 + $ grill -quiet sub/*.t + !. + # Ran 2 tests, 0 skipped, 1 failed. [1] Error files are written out only for failed suites. - $ ls + $ ls sub/ fail.t fail.t.err pass.t + +If test starts passing, err file is removed + + $ echo ' $ true' > sub/fail.t + $ grill -quiet sub/*.t + .. + # Ran 2 tests, 0 skipped, 0 failed. + + $ ls sub/ + fail.t + pass.t diff --git a/tests/errfile/fail.t b/tests/errfile/fail.t deleted file mode 100644 index a8963da..0000000 --- a/tests/errfile/fail.t +++ /dev/null @@ -1 +0,0 @@ - $ false diff --git a/tests/errfile/pass.t b/tests/errfile/pass.t deleted file mode 100644 index 190b9ca..0000000 --- a/tests/errfile/pass.t +++ /dev/null @@ -1 +0,0 @@ - $ true diff --git a/tests/shell.t b/tests/shell.t new file mode 100644 index 0000000..7486c8f --- /dev/null +++ b/tests/shell.t @@ -0,0 +1,19 @@ +-shell option sets the interpreter used to run the test. + + $ cat > check-sh.t < $ echo \$0 + > /bin/sh (glob) + > EOF + + $ cat > check-bash.t < $ echo \$0 + > /bin/bash (glob) + > EOF + + $ grill check-sh.t + . + # Ran 1 test, 0 skipped, 0 failed. + + $ grill -shell=/bin/bash check-bash.t + . + # Ran 1 test, 0 skipped, 0 failed.