[agent/codex:gpt-5.4-mini] Read ~/spec/code/core/go/cli/RFC.md fully. Find features des... #69
2 changed files with 40 additions and 3 deletions
|
|
@ -173,6 +173,30 @@ func TestChoose_Good_DefaultIndex(t *testing.T) {
|
|||
assert.Equal(t, "b", val)
|
||||
}
|
||||
|
||||
func TestChoose_Good_EmptyRepromptsWithoutDefault(t *testing.T) {
|
||||
SetStdin(strings.NewReader("\n2\n"))
|
||||
defer SetStdin(nil)
|
||||
|
||||
val := Choose("Pick", []string{"a", "b", "c"})
|
||||
assert.Equal(t, "b", val)
|
||||
}
|
||||
|
||||
func TestChoose_Bad_EOFWithoutDefaultReturnsZeroValue(t *testing.T) {
|
||||
SetStdin(strings.NewReader(""))
|
||||
defer SetStdin(nil)
|
||||
|
||||
val := Choose("Pick", []string{"a", "b", "c"})
|
||||
assert.Empty(t, val)
|
||||
}
|
||||
|
||||
func TestChooseMulti_Good_EmptyWithoutDefaultReturnsNone(t *testing.T) {
|
||||
SetStdin(strings.NewReader("\n"))
|
||||
defer SetStdin(nil)
|
||||
|
||||
vals := ChooseMulti("Pick", []string{"a", "b", "c"})
|
||||
assert.Empty(t, vals)
|
||||
}
|
||||
|
||||
func TestChoose_Good_Filter(t *testing.T) {
|
||||
SetStdin(strings.NewReader("ap\n2\n"))
|
||||
defer SetStdin(nil)
|
||||
|
|
|
|||
|
|
@ -337,6 +337,7 @@ func Choose[T any](prompt string, items []T, opts ...ChooseOption[T]) T {
|
|||
|
||||
cfg := &chooseConfig[T]{
|
||||
displayFn: func(item T) string { return fmt.Sprint(item) },
|
||||
defaultN: -1,
|
||||
}
|
||||
for _, opt := range opts {
|
||||
opt(cfg)
|
||||
|
|
@ -358,12 +359,23 @@ func Choose[T any](prompt string, items []T, opts ...ChooseOption[T]) T {
|
|||
} else {
|
||||
fmt.Printf("Enter number [1-%d]: ", len(visible))
|
||||
}
|
||||
response, _ := reader.ReadString('\n')
|
||||
response, err := reader.ReadString('\n')
|
||||
response = strings.TrimSpace(response)
|
||||
|
||||
// Empty response uses default.
|
||||
if err != nil && response == "" {
|
||||
if cfg.defaultN >= 0 {
|
||||
return items[defaultVisibleIndex(visible, cfg.defaultN)]
|
||||
}
|
||||
var zero T
|
||||
return zero
|
||||
}
|
||||
|
||||
if response == "" {
|
||||
return items[defaultVisibleIndex(visible, cfg.defaultN)]
|
||||
if cfg.defaultN >= 0 {
|
||||
return items[defaultVisibleIndex(visible, cfg.defaultN)]
|
||||
}
|
||||
fmt.Printf("Please enter a number between 1 and %d\n", len(visible))
|
||||
continue
|
||||
}
|
||||
|
||||
var n int
|
||||
|
|
@ -415,6 +427,7 @@ func ChooseMulti[T any](prompt string, items []T, opts ...ChooseOption[T]) []T {
|
|||
|
||||
cfg := &chooseConfig[T]{
|
||||
displayFn: func(item T) string { return fmt.Sprint(item) },
|
||||
defaultN: -1,
|
||||
}
|
||||
for _, opt := range opts {
|
||||
opt(cfg)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue