gitlab.com/apertussolutions/u-root@v7.0.0+incompatible/cmds/core/elvish/eval/std_ports_test.go (about) 1 package eval 2 3 import ( 4 "io" 5 "io/ioutil" 6 "os" 7 "testing" 8 ) 9 10 func TestEvalerPorts(t *testing.T) { 11 stdoutReader, stdout := mustPipe() 12 defer stdoutReader.Close() 13 14 stderrReader, stderr := mustPipe() 15 defer stderrReader.Close() 16 17 prefix := "> " 18 ep := newStdPorts(DevNull, stdout, stderr, prefix) 19 ep.ports[1].Chan <- "x" 20 ep.ports[1].Chan <- "y" 21 ep.ports[2].Chan <- "bad" 22 ep.ports[2].Chan <- "err" 23 ep.close() 24 stdout.Close() 25 stderr.Close() 26 27 stdoutAll := mustReadAllString(stdoutReader) 28 wantStdoutAll := "> x\n> y\n" 29 if stdoutAll != wantStdoutAll { 30 t.Errorf("stdout is %q, want %q", stdoutAll, wantStdoutAll) 31 } 32 stderrAll := mustReadAllString(stderrReader) 33 wantStderrAll := "> bad\n> err\n" 34 if stderrAll != wantStderrAll { 35 t.Errorf("stderr is %q, want %q", stderrAll, wantStderrAll) 36 } 37 } 38 39 func mustPipe() (*os.File, *os.File) { 40 r, w, err := os.Pipe() 41 if err != nil { 42 panic(err) 43 } 44 return r, w 45 } 46 47 func mustReadAllString(r io.Reader) string { 48 b, err := ioutil.ReadAll(r) 49 if err != nil { 50 panic(err) 51 } 52 return string(b) 53 }