github.com/oweisse/u-root@v0.0.0-20181109060735-d005ad25fef1/cmds/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  }