diff --git a/snok.go b/snok.go index ea95b1f67fcac237e523080700e1e19eb356535b..dcba08812bd917dd21dd60ff37a8bac1c3ae6cdf 100644 --- a/snok.go +++ b/snok.go @@ -6,10 +6,12 @@ import ( "flag" "fmt" "io" + "os" "regexp" "slices" "strconv" "strings" + "sync" "testing" "unicode" @@ -21,8 +23,8 @@ import ( type test struct { Name string `json:"name,omitempty"` Args []string `json:"args,omitempty"` - Input *string `json:"input,omitempty"` // Todo: add support for URIs - Output *string `json:"output,omitempty"` + Input *string `json:"input,omitempty"` // Todo: add support for URIs + Output *string `json:"output,omitempty"` // Todo: support regex and strings ExpectError bool `json:"expectError,omitempty"` } @@ -119,32 +121,30 @@ func (ct *CommandTest) testCmd(t *testing.T, cmd *cobra.Command, args []string) } func (ct *CommandTest) executeCmd(args []string, input io.Reader) (string, error) { - /* - osStdout := os.Stdout // keep backup of the real stdout - defer func() { os.Stdout = osStdout }() // restore the real stdout - r, w, _ := os.Pipe() - os.Stdout = w - */ + + osStdout := os.Stdout // keep backup of the real stdout + defer func() { os.Stdout = osStdout }() // restore the real stdout + r, w, _ := os.Pipe() + os.Stdout = w + output := new(bytes.Buffer) - /* - var wg sync.WaitGroup - wg.Add(1) - go func() { - _, err := io.Copy(output, r) - if err != nil { - s.t.Error(err) - } - wg.Done() - }() - */ + + var wg sync.WaitGroup + wg.Add(1) + go func() { + _, err := io.Copy(output, r) + require.NoError(ct.t, err, "IO Error") + wg.Done() + }() + ct.RootCmd.SetIn(input) - ct.RootCmd.SetOutput(output) + ct.RootCmd.SetOutput(w) ct.RootCmd.SetArgs(args) err := ct.RootCmd.Execute() - /* - w.Close() - wg.Wait() - */ + + w.Close() + wg.Wait() + return output.String(), err }