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