input_test.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. package cmdline
  2. import (
  3. "fmt"
  4. "os"
  5. "sync"
  6. "testing"
  7. "time"
  8. "github.com/stretchr/testify/assert"
  9. "github.com/tal-tech/go-zero/core/lang"
  10. )
  11. func TestEnterToContinue(t *testing.T) {
  12. r, w, err := os.Pipe()
  13. assert.Nil(t, err)
  14. ow := os.Stdout
  15. os.Stdout = w
  16. or := os.Stdin
  17. os.Stdin = r
  18. defer func() {
  19. os.Stdin = or
  20. os.Stdout = ow
  21. }()
  22. var wg sync.WaitGroup
  23. wg.Add(2)
  24. go func() {
  25. defer wg.Done()
  26. fmt.Println()
  27. }()
  28. go func() {
  29. defer wg.Done()
  30. EnterToContinue()
  31. }()
  32. wait := make(chan lang.PlaceholderType)
  33. go func() {
  34. wg.Wait()
  35. close(wait)
  36. }()
  37. select {
  38. case <-time.After(time.Second):
  39. t.Error("timeout")
  40. case <-wait:
  41. }
  42. }
  43. func TestReadLine(t *testing.T) {
  44. r, w, err := os.Pipe()
  45. assert.Nil(t, err)
  46. ow := os.Stdout
  47. os.Stdout = w
  48. or := os.Stdin
  49. os.Stdin = r
  50. defer func() {
  51. os.Stdin = or
  52. os.Stdout = ow
  53. }()
  54. const message = "hello"
  55. var wg sync.WaitGroup
  56. wg.Add(2)
  57. go func() {
  58. defer wg.Done()
  59. fmt.Println(message)
  60. }()
  61. go func() {
  62. defer wg.Done()
  63. input := ReadLine("")
  64. assert.Equal(t, message, input)
  65. }()
  66. wait := make(chan lang.PlaceholderType)
  67. go func() {
  68. wg.Wait()
  69. close(wait)
  70. }()
  71. select {
  72. case <-time.After(time.Second):
  73. t.Error("timeout")
  74. case <-wait:
  75. }
  76. }