diff --git a/cmdext/cmdrunner_test.go b/cmdext/cmdrunner_test.go index e4f2327..2deac37 100644 --- a/cmdext/cmdrunner_test.go +++ b/cmdext/cmdrunner_test.go @@ -84,3 +84,115 @@ func TestPartialRead(t *testing.T) { } } + +func TestPartialReadStderr(t *testing.T) { + res1, err := Runner("python"). + Arg("-c"). + Arg("import sys; import time; print(\"first message\", file=sys.stderr, flush=True); time.sleep(5); print(\"cant see me\", file=sys.stderr, flush=True);"). + Timeout(100 * time.Millisecond). + Run() + if err != nil { + t.Errorf("%v", err) + } + if !res1.CommandTimedOut { + t.Errorf("!CommandTimedOut") + } + if res1.StdErr != "first message\n" { + t.Errorf("res1.StdErr == '%v'", res1.StdErr) + } + if res1.StdOut != "" { + t.Errorf("res1.StdOut == '%v'", res1.StdOut) + } + if res1.StdCombined != "first message\n" { + t.Errorf("res1.StdCombined == '%v'", res1.StdCombined) + } + +} + +func TestReadUnflushedStdout(t *testing.T) { + + res1, err := Runner("python").Arg("-c").Arg("import sys; print(\"message101\", file=sys.stdout, end='')").Run() + if err != nil { + t.Errorf("%v", err) + } + if res1.StdErr != "" { + t.Errorf("res1.StdErr == '%v'", res1.StdErr) + } + if res1.StdOut != "message101" { + t.Errorf("res1.StdOut == '%v'", res1.StdOut) + } + if res1.StdCombined != "message101\n" { + t.Errorf("res1.StdCombined == '%v'", res1.StdCombined) + } + +} + +func TestReadUnflushedStderr(t *testing.T) { + + res1, err := Runner("python").Arg("-c").Arg("import sys; print(\"message101\", file=sys.stderr, end='')").Run() + if err != nil { + t.Errorf("%v", err) + } + if res1.StdErr != "message101" { + t.Errorf("res1.StdErr == '%v'", res1.StdErr) + } + if res1.StdOut != "" { + t.Errorf("res1.StdOut == '%v'", res1.StdOut) + } + if res1.StdCombined != "message101\n" { + t.Errorf("res1.StdCombined == '%v'", res1.StdCombined) + } + +} + +func TestPartialReadUnflushed(t *testing.T) { + t.SkipNow() + + res1, err := Runner("python"). + Arg("-c"). + Arg("import sys; import time; print(\"first message\", end=''); time.sleep(5); print(\"cant see me\", end='');"). + Timeout(100 * time.Millisecond). + Run() + if err != nil { + t.Errorf("%v", err) + } + if !res1.CommandTimedOut { + t.Errorf("!CommandTimedOut") + } + if res1.StdErr != "" { + t.Errorf("res1.StdErr == '%v'", res1.StdErr) + } + if res1.StdOut != "first message" { + t.Errorf("res1.StdOut == '%v'", res1.StdOut) + } + if res1.StdCombined != "first message" { + t.Errorf("res1.StdCombined == '%v'", res1.StdCombined) + } + +} + +func TestPartialReadUnflushedStderr(t *testing.T) { + t.SkipNow() + + res1, err := Runner("python"). + Arg("-c"). + Arg("import sys; import time; print(\"first message\", file=sys.stderr, end=''); time.sleep(5); print(\"cant see me\", file=sys.stderr, end='');"). + Timeout(100 * time.Millisecond). + Run() + if err != nil { + t.Errorf("%v", err) + } + if !res1.CommandTimedOut { + t.Errorf("!CommandTimedOut") + } + if res1.StdErr != "first message" { + t.Errorf("res1.StdErr == '%v'", res1.StdErr) + } + if res1.StdOut != "" { + t.Errorf("res1.StdOut == '%v'", res1.StdOut) + } + if res1.StdCombined != "first message" { + t.Errorf("res1.StdCombined == '%v'", res1.StdCombined) + } + +}