diff --git a/kong.go b/kong.go index 76eaefe..19ff88e 100644 --- a/kong.go +++ b/kong.go @@ -373,7 +373,7 @@ func (k *Kong) applyHookToDefaultFlags(ctx *Context, node *Node, name string) er } func formatMultilineMessage(w io.Writer, leaders []string, format string, args ...interface{}) { - lines := strings.Split(fmt.Sprintf(format, args...), "\n") + lines := strings.Split(strings.TrimRight(fmt.Sprintf(format, args...), "\n"), "\n") leader := "" for _, l := range leaders { if l == "" { diff --git a/kong_test.go b/kong_test.go index c4ed7f6..f3fb869 100644 --- a/kong_test.go +++ b/kong_test.go @@ -593,11 +593,24 @@ func TestSliceWithDisabledSeparator(t *testing.T) { } func TestMultilineMessage(t *testing.T) { - w := &bytes.Buffer{} - var cli struct{} - p := mustNew(t, &cli, kong.Writers(w, w)) - p.Printf("hello\nworld") - assert.Equal(t, "test: hello\n world\n", w.String()) + tests := []struct { + name string + text string + want string + }{ + {"Simple", "hello\nworld", "test: hello\n world\n"}, + {"WithNewline", "hello\nworld\n", "test: hello\n world\n"}, + } + for _, test := range tests { + test := test + t.Run(test.name, func(t *testing.T) { + w := &bytes.Buffer{} + var cli struct{} + p := mustNew(t, &cli, kong.Writers(w, w)) + p.Printf(test.text) + assert.Equal(t, test.want, w.String()) + }) + } } type cmdWithRun struct {