From e912d9a95dd870b639293773a10bc7620c887e4c Mon Sep 17 00:00:00 2001 From: Tony Worm Date: Sat, 17 Oct 2020 19:40:16 -0400 Subject: [PATCH] stream testing output --- lib/test/exec.go | 43 +++++++++++++++++++++++++++++++++++++++---- lib/test/from.go | 22 ++++++++++++++++++++-- lib/test/run.go | 1 + script/hack.go | 6 ++---- test.cue | 2 ++ 5 files changed, 64 insertions(+), 10 deletions(-) diff --git a/lib/test/exec.go b/lib/test/exec.go index 59855ecc9..f8381dd26 100644 --- a/lib/test/exec.go +++ b/lib/test/exec.go @@ -1,7 +1,10 @@ package test import ( + "bytes" "fmt" + "io" + "os" "os/exec" "strings" ) @@ -42,9 +45,25 @@ func RunBash(T *Tester, verbose int) (err error) { } } + // Setup io streams + cmd.Stdin = os.Stdin + + var outBuf, errBuf bytes.Buffer + cmd.Stdout = io.MultiWriter(os.Stdout, &outBuf) + cmd.Stderr = io.MultiWriter(os.Stderr, &errBuf) + // Run and save output - out, err := cmd.CombinedOutput() - T.Output = string(out) + err = cmd.Start() + if err != nil { + return err + } + + err = cmd.Wait() + if err != nil { + return err + } + + T.Output = outBuf.String() + errBuf.String() return err } @@ -81,9 +100,25 @@ func RunExec(T *Tester, verbose int) (err error) { } } + // Setup io streams + cmd.Stdin = os.Stdin + + var outBuf, errBuf bytes.Buffer + cmd.Stdout = io.MultiWriter(os.Stdout, &outBuf) + cmd.Stderr = io.MultiWriter(os.Stderr, &errBuf) + // Run and save output - out, err := cmd.CombinedOutput() - T.Output = string(out) + err = cmd.Start() + if err != nil { + return err + } + + err = cmd.Wait() + if err != nil { + return err + } + + T.Output = outBuf.String() + errBuf.String() return err } diff --git a/lib/test/from.go b/lib/test/from.go index a221c6db4..04d9c0896 100644 --- a/lib/test/from.go +++ b/lib/test/from.go @@ -9,8 +9,26 @@ import ( func RunTestFromArgsFlags(args []string, cmdflags flags.TestFlagpole) (error) { + verbose := flags.RootPflags.Verbose + cueFiles, extraArgs := args, []string{} + + // split args at "--" + pos := -1 + for i, arg := range args { + if arg == "--" { + pos = i + break + } + } + if pos >= 0 { + cueFiles, extraArgs = args[0:pos], args[pos+1:] + if len(extraArgs) > 0 { + fmt.Println("using extra args:", extraArgs) + } + } + // Loadup our Cue files - crt, err := cuetils.CueRuntimeFromEntrypointsAndFlags(args) + crt, err := cuetils.CueRuntimeFromEntrypointsAndFlags(cueFiles) if err != nil { return err } @@ -38,7 +56,7 @@ func RunTestFromArgsFlags(args []string, cmdflags flags.TestFlagpole) (error) { } // Run all of our suites - _, err = RunSuites(suites, -1) + _, err = RunSuites(suites, verbose) // Print our final tests and stats fmt.Printf("\n\n\n======= FINAL RESULTS ======\n") diff --git a/lib/test/run.go b/lib/test/run.go index ac8a20562..c045dbb94 100644 --- a/lib/test/run.go +++ b/lib/test/run.go @@ -6,6 +6,7 @@ import ( ) func RunSuites(suites []Suite, verbose int) (TS Stats, err error) { + fmt.Println("RunSuites") // set start time TS.Start = time.Now() diff --git a/script/hack.go b/script/hack.go index 490fb4f87..34d619230 100644 --- a/script/hack.go +++ b/script/hack.go @@ -22,10 +22,8 @@ func Hack(args []string) error { fs := osfs.New(cwd) - llvl := "warn" - if flags.RootPflags.Verbose != "" { - llvl = flags.RootPflags.Verbose - } + llvls := []string{"error","warn","info","debug"} + llvl := llvls[flags.RootPflags.Verbose] config := &ast.Config{ LogLevel: llvl, diff --git a/test.cue b/test.cue index 99e03e259..abb5b8281 100644 --- a/test.cue +++ b/test.cue @@ -11,6 +11,8 @@ import "strings" sysenv: bool | *false env?: [string]: string + args?: [...string] + verbose?: bool | int dir: string ...