race_test.go 658 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. // +build race
  2. package liner
  3. import (
  4. "io/ioutil"
  5. "os"
  6. "sync"
  7. "testing"
  8. )
  9. func TestWriteHistory(t *testing.T) {
  10. oldout := os.Stdout
  11. defer func() { os.Stdout = oldout }()
  12. oldin := os.Stdout
  13. defer func() { os.Stdin = oldin }()
  14. newinr, newinw, err := os.Pipe()
  15. if err != nil {
  16. t.Fatal(err)
  17. }
  18. os.Stdin = newinr
  19. newoutr, newoutw, err := os.Pipe()
  20. if err != nil {
  21. t.Fatal(err)
  22. }
  23. defer newoutr.Close()
  24. os.Stdout = newoutw
  25. var wait sync.WaitGroup
  26. wait.Add(1)
  27. s := NewLiner()
  28. go func() {
  29. s.AppendHistory("foo")
  30. s.AppendHistory("bar")
  31. s.Prompt("")
  32. wait.Done()
  33. }()
  34. s.WriteHistory(ioutil.Discard)
  35. newinw.Close()
  36. wait.Wait()
  37. }