From ba28126ea1ca33edc6d56cbd6193a2227391d159 Mon Sep 17 00:00:00 2001 From: Luis Davim Date: Sun, 24 Jul 2022 13:20:23 +0100 Subject: [PATCH 1/3] fix: the interactive confirm answers should match the confirm/reject text Signed-off-by: Luis Davim --- interactive_confirm_printer.go | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/interactive_confirm_printer.go b/interactive_confirm_printer.go index cbfa53692..31dbafd9f 100644 --- a/interactive_confirm_printer.go +++ b/interactive_confirm_printer.go @@ -3,6 +3,7 @@ package pterm import ( "fmt" "os" + "strings" "atomicgo.dev/cursor" "atomicgo.dev/keyboard" @@ -98,10 +99,11 @@ func (p InteractiveConfirmPrinter) Show(text ...string) (bool, error) { } p.TextStyle.Print(text[0] + " " + p.getSuffix() + ": ") + y, n := p.getShortHandles() err := keyboard.Listen(func(keyInfo keys.Key) (stop bool, err error) { key := keyInfo.Code - char := keyInfo.String() + char := strings.ToLower(keyInfo.String()) if err != nil { return false, fmt.Errorf("failed to get key: %w", err) } @@ -109,12 +111,12 @@ func (p InteractiveConfirmPrinter) Show(text ...string) (bool, error) { switch key { case keys.RuneKey: switch char { - case "y", "Y": + case y: p.ConfirmStyle.Print(p.ConfirmText) Println() result = true return true, nil - case "n", "N": + case n: p.RejectStyle.Print(p.RejectText) Println() result = false @@ -139,15 +141,21 @@ func (p InteractiveConfirmPrinter) Show(text ...string) (bool, error) { return result, err } +// getShortHandles returns the short hand answers for the confirmation prompt +func (p InteractiveConfirmPrinter) getShortHandles() (string, string) { + y := strings.ToLower(string([]rune(p.ConfirmText)[0])) + n := strings.ToLower(string([]rune(p.RejectText)[0])) + + return y, n +} + +// getSuffix returns the confirmation prompt suffix func (p InteractiveConfirmPrinter) getSuffix() string { - var y string - var n string + y, n := p.getShortHandles() if p.DefaultValue { - y = "Y" - n = "n" + y = strings.ToUpper(y) } else { - y = "y" - n = "N" + n = strings.ToUpper(n) } return p.SuffixStyle.Sprintf("[%s/%s]", y, n) From f1c8f2be275fbdff2c89b0929af6f57f3fb6d936 Mon Sep 17 00:00:00 2001 From: Luis Davim Date: Sun, 24 Jul 2022 16:34:19 +0100 Subject: [PATCH 2/3] test: add tests for custom answers --- interactive_confirm_printer_test.go | 39 +++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/interactive_confirm_printer_test.go b/interactive_confirm_printer_test.go index ec6dbb963..c6320c782 100644 --- a/interactive_confirm_printer_test.go +++ b/interactive_confirm_printer_test.go @@ -76,6 +76,45 @@ func TestInteractiveConfirmPrinter_WithRejectText(t *testing.T) { testza.AssertEqual(t, p.RejectText, "reject") } +func TestInteractiveConfirmPrinter_CustomAnswers(t *testing.T) { + p := pterm.DefaultInteractiveConfirm.WithRejectText("reject").WithConfirmText("accept") + tests := []struct { + name string + key rune + expected bool + }{ + { + name: "Accept_upper_case", + key: 'A', + expected: true, + }, + { + name: "Accept_lower", + key: 'a', + expected: true, + }, + { + name: "Reject_upper_case", + key: 'R', + expected: false, + }, + { + name: "Reject_lower_case", + key: 'r', + expected: false, + }, + } + for _, tc := range tests { + t.Run(tc.name, func(t *testing.T) { + go func() { + keyboard.SimulateKeyPress(tc.key) + }() + result, _ := p.Show() + testza.AssertEqual(t, result, tc.expected) + }) + } +} + func TestInteractiveConfirmPrinter_WithSuffixStyle(t *testing.T) { style := pterm.NewStyle(pterm.FgRed) p := pterm.DefaultInteractiveConfirm.WithSuffixStyle(style) From 561cda9a9b03cb5d11332d9744ca7e0a0dbf3321 Mon Sep 17 00:00:00 2001 From: Luis Davim Date: Sun, 24 Jul 2022 13:32:23 +0100 Subject: [PATCH 3/3] chore: disable gocritic "preferDecodeRune" --- .golangci.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.golangci.yml b/.golangci.yml index 4b48b03ad..57ba35d86 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -88,5 +88,9 @@ issues: - linters: - gocritic text: "unnecessaryDefer:" + - linters: + - gocritic + text: "preferDecodeRune:" service: - golangci-lint-version: 1.31.x # use the fixed version to not introduce new linters unexpectedly \ No newline at end of file + golangci-lint-version: 1.31.x # use the fixed version to not introduce new linters unexpectedly +