github.com/markusbkk/elvish@v0.0.0-20231204143114-91dc52438621/pkg/cli/term/file_reader_unix_test.go (about) 1 //go:build !windows && !plan9 2 // +build !windows,!plan9 3 4 package term 5 6 import ( 7 "fmt" 8 "io" 9 "os" 10 "testing" 11 "time" 12 13 "github.com/markusbkk/elvish/pkg/testutil" 14 ) 15 16 func TestFileReader_ReadByteWithTimeout(t *testing.T) { 17 r, w, cleanup := setupFileReader() 18 defer cleanup() 19 20 content := []byte("0123456789") 21 w.Write(content) 22 23 // Test successful ReadByteWithTimeout calls. 24 for i := 0; i < len(content); i++ { 25 t.Run(fmt.Sprintf("byte %d", i), func(t *testing.T) { 26 b, err := r.ReadByteWithTimeout(-1) 27 if err != nil { 28 t.Errorf("got err %v, want nil", err) 29 } 30 if b != content[i] { 31 t.Errorf("got byte %q, want %q", b, content[i]) 32 } 33 }) 34 } 35 } 36 37 func TestFileReader_ReadByteWithTimeout_EOF(t *testing.T) { 38 r, w, cleanup := setupFileReader() 39 defer cleanup() 40 41 w.Close() 42 _, err := r.ReadByteWithTimeout(-1) 43 if err != io.EOF { 44 t.Errorf("got byte %v, want %v", err, io.EOF) 45 } 46 } 47 48 func TestFileReader_ReadByteWithTimeout_Timeout(t *testing.T) { 49 r, _, cleanup := setupFileReader() 50 defer cleanup() 51 52 _, err := r.ReadByteWithTimeout(testutil.Scaled(time.Millisecond)) 53 if err != errTimeout { 54 t.Errorf("got err %v, want %v", err, errTimeout) 55 } 56 } 57 58 func TestFileReader_Stop(t *testing.T) { 59 r, _, cleanup := setupFileReader() 60 defer cleanup() 61 62 errCh := make(chan error, 1) 63 go func() { 64 _, err := r.ReadByteWithTimeout(-1) 65 errCh <- err 66 }() 67 r.Stop() 68 69 if err := <-errCh; err != ErrStopped { 70 t.Errorf("got err %v, want %v", err, ErrStopped) 71 } 72 } 73 74 func setupFileReader() (reader fileReader, writer *os.File, cleanup func()) { 75 pr, pw := testutil.MustPipe() 76 r, err := newFileReader(pr) 77 if err != nil { 78 panic(err) 79 } 80 return r, pw, func() { 81 r.Close() 82 pr.Close() 83 pw.Close() 84 } 85 }