src.elv.sh@v0.21.0-dev.0.20240515223629-06979efb9a2a/pkg/eval/port_helper_test.go (about) 1 package eval 2 3 import ( 4 "io" 5 "os" 6 "testing" 7 ) 8 9 func TestEvalerPorts(t *testing.T) { 10 stdoutReader, stdout := mustPipe() 11 defer stdoutReader.Close() 12 13 stderrReader, stderr := mustPipe() 14 defer stderrReader.Close() 15 16 prefix := "> " 17 ports, cleanup := PortsFromFiles([3]*os.File{DevNull, stdout, stderr}, prefix) 18 ports[1].Chan <- "x" 19 ports[1].Chan <- "y" 20 ports[2].Chan <- "bad" 21 ports[2].Chan <- "err" 22 cleanup() 23 stdout.Close() 24 stderr.Close() 25 26 stdoutAll := mustReadAllString(stdoutReader) 27 wantStdoutAll := "> x\n> y\n" 28 if stdoutAll != wantStdoutAll { 29 t.Errorf("stdout is %q, want %q", stdoutAll, wantStdoutAll) 30 } 31 stderrAll := mustReadAllString(stderrReader) 32 wantStderrAll := "> bad\n> err\n" 33 if stderrAll != wantStderrAll { 34 t.Errorf("stderr is %q, want %q", stderrAll, wantStderrAll) 35 } 36 } 37 38 func mustReadAllString(r io.Reader) string { 39 b, err := io.ReadAll(r) 40 if err != nil { 41 panic(err) 42 } 43 return string(b) 44 } 45 46 func mustPipe() (*os.File, *os.File) { 47 r, w, err := os.Pipe() 48 if err != nil { 49 panic(err) 50 } 51 return r, w 52 }