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  }