From f9bf2231e50c04391bc2d10ac1cd97da09147eef Mon Sep 17 00:00:00 2001 From: Virgil Date: Thu, 2 Apr 2026 11:05:34 +0000 Subject: [PATCH] fix(cli): accept eof input in multi-select Co-Authored-By: Virgil --- pkg/cli/prompt.go | 6 +++--- pkg/cli/prompt_test.go | 9 +++++++++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/pkg/cli/prompt.go b/pkg/cli/prompt.go index 13287ce..49ea0e9 100644 --- a/pkg/cli/prompt.go +++ b/pkg/cli/prompt.go @@ -102,14 +102,14 @@ func MultiSelect(label string, options []string) ([]string, error) { r := newReader() input, err := r.ReadString('\n') - if err != nil && strings.TrimSpace(input) == "" { + trimmed := strings.TrimSpace(input) + if err != nil && trimmed == "" { return []string{}, nil } - if err != nil { + if err != nil && !errors.Is(err, io.EOF) { return nil, err } - trimmed := strings.TrimSpace(input) selected, parseErr := parseMultiSelection(trimmed, len(options)) if parseErr != nil { return nil, fmt.Errorf("invalid selection %q: %w", trimmed, parseErr) diff --git a/pkg/cli/prompt_test.go b/pkg/cli/prompt_test.go index 8c1c45d..1380bea 100644 --- a/pkg/cli/prompt_test.go +++ b/pkg/cli/prompt_test.go @@ -137,6 +137,15 @@ func TestMultiSelect_Bad_EOFReturnsEmptySelection(t *testing.T) { assert.Empty(t, vals) } +func TestMultiSelect_Good_EOFWithInput(t *testing.T) { + SetStdin(strings.NewReader("1 3")) + defer SetStdin(nil) + + vals, err := MultiSelect("Pick", []string{"a", "b", "c"}) + assert.NoError(t, err) + assert.Equal(t, []string{"a", "c"}, vals) +} + func TestMultiSelect_Good_DedupesSelections(t *testing.T) { SetStdin(strings.NewReader("1 1 2-3 2\n")) defer SetStdin(nil) -- 2.45.3