| // +build race |
| |
| package liner |
| |
| import ( |
| "io/ioutil" |
| "os" |
| "sync" |
| "testing" |
| ) |
| |
| func TestWriteHistory(t *testing.T) { |
| oldout := os.Stdout |
| defer func() { os.Stdout = oldout }() |
| oldin := os.Stdout |
| defer func() { os.Stdin = oldin }() |
| |
| newinr, newinw, err := os.Pipe() |
| if err != nil { |
| t.Fatal(err) |
| } |
| os.Stdin = newinr |
| newoutr, newoutw, err := os.Pipe() |
| if err != nil { |
| t.Fatal(err) |
| } |
| defer newoutr.Close() |
| os.Stdout = newoutw |
| |
| var wait sync.WaitGroup |
| wait.Add(1) |
| s := NewLiner() |
| go func() { |
| s.AppendHistory("foo") |
| s.AppendHistory("bar") |
| s.Prompt("") |
| wait.Done() |
| }() |
| |
| s.WriteHistory(ioutil.Discard) |
| |
| newinw.Close() |
| wait.Wait() |
| } |