code-intelligence.com/cifuzz@v0.40.0/pkg/dialog/dialog_test.go (about)

     1  package dialog
     2  
     3  import (
     4  	"bytes"
     5  	"os"
     6  	"testing"
     7  
     8  	"atomicgo.dev/keyboard"
     9  	"atomicgo.dev/keyboard/keys"
    10  	"github.com/pterm/pterm"
    11  	"github.com/stretchr/testify/assert"
    12  	"github.com/stretchr/testify/require"
    13  )
    14  
    15  func TestSelect(t *testing.T) {
    16  	var outBuf bytes.Buffer
    17  	pterm.SetDefaultOutput(&outBuf)
    18  
    19  	defer pterm.SetDefaultOutput(os.Stdout)
    20  
    21  	go func() {
    22  		require.NoError(t, keyboard.SimulateKeyPress(keys.Down))
    23  		require.NoError(t, keyboard.SimulateKeyPress(keys.Down))
    24  		require.NoError(t, keyboard.SimulateKeyPress(keys.Up))
    25  		require.NoError(t, keyboard.SimulateKeyPress(keys.Enter))
    26  	}()
    27  
    28  	items := map[string]string{
    29  		"Item No1": "item1",
    30  		"Item No2": "item2",
    31  		"Item No3": "item3",
    32  		"Item No4": "item4",
    33  	}
    34  	userInput, err := Select("Test", items, true)
    35  	require.NoError(t, err)
    36  	assert.Equal(t, "item2", userInput)
    37  }
    38  
    39  func TestMultiSelect(t *testing.T) {
    40  	var outBuf bytes.Buffer
    41  	pterm.SetDefaultOutput(&outBuf)
    42  
    43  	defer pterm.SetDefaultOutput(os.Stdout)
    44  
    45  	go func() {
    46  		require.NoError(t, keyboard.SimulateKeyPress(keys.Down))
    47  		require.NoError(t, keyboard.SimulateKeyPress(keys.Down))
    48  		require.NoError(t, keyboard.SimulateKeyPress(keys.Up))
    49  		require.NoError(t, keyboard.SimulateKeyPress(keys.Space))
    50  		require.NoError(t, keyboard.SimulateKeyPress(keys.Up))
    51  		require.NoError(t, keyboard.SimulateKeyPress(keys.Space))
    52  		require.NoError(t, keyboard.SimulateKeyPress(keys.Enter))
    53  	}()
    54  
    55  	items := map[string]string{
    56  		"Item No1": "item1",
    57  		"Item No2": "item2",
    58  		"Item No3": "item3",
    59  		"Item No4": "item4",
    60  	}
    61  	userInput, err := MultiSelect("Test", items)
    62  	require.NoError(t, err)
    63  	assert.Equal(t, []string{"item1", "item2"}, userInput)
    64  }