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  }