From d267887346095b2e6f2fc4c16ffbe31b38ad0e99 Mon Sep 17 00:00:00 2001 From: Max Brauer Date: Sat, 17 Sep 2022 12:59:45 +0200 Subject: [PATCH] Allow FileTests to have trailing empty lines This makes it easier to author template tests, because editors tend to append a newline when saving files. --- test/filetests/filetests.go | 24 ++++++++------ test/filetests/filetests_test.go | 56 ++++++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+), 10 deletions(-) create mode 100644 test/filetests/filetests_test.go diff --git a/test/filetests/filetests.go b/test/filetests/filetests.go index 4535e066..b31965ec 100644 --- a/test/filetests/filetests.go +++ b/test/filetests/filetests.go @@ -93,12 +93,12 @@ func (f FileTests) Run(t *testing.T) { } else { resultStr := testErr.UserErr().Error() resultStr = regexp.MustCompile("__ytt_tpl\\d+_").ReplaceAllString(resultStr, "__ytt_tplXXX_") - resultStr = f.trimTrailingWhitespace(resultStr) + resultStr = TrimTrailingMultilineWhitespace(resultStr) expectedStr = strings.TrimPrefix(expectedStr, "ERR:") expectedStr = strings.TrimPrefix(expectedStr, " ") expectedStr = strings.ReplaceAll(expectedStr, "__YTT_VERSION__", version.Version) - expectedStr = f.trimTrailingWhitespace(expectedStr) + expectedStr = TrimTrailingMultilineWhitespace(expectedStr) err = f.expectEquals(resultStr, expectedStr) } case strings.HasPrefix(expectedStr, "OUTPUT POSITION:"): @@ -134,14 +134,6 @@ func (f FileTests) Run(t *testing.T) { } } -func (f FileTests) trimTrailingWhitespace(multiLineString string) string { - var newLines []string - for _, line := range strings.Split(multiLineString, "\n") { - newLines = append(newLines, strings.TrimRight(line, "\t ")) - } - return strings.Join(newLines, "\n") -} - func (f FileTests) asFilePositionsStr(result MarshalableResult) (string, error) { printerFunc := func(w io.Writer) yamlmeta.DocumentPrinter { return yamlmeta.WrappedFilePositionPrinter{yamlmeta.NewFilePositionPrinter(w)} @@ -250,3 +242,15 @@ func (l DefaultTemplateLoader) Load(thread *starlark.Thread, module string) (sta yttlibrary.NewDataModule(&l.DataValues, nil), nil, nil) return api.FindModule(strings.TrimPrefix(module, "@ytt:")) } + +// TrimTrailingMultilineWhitespace returns a string with trailing whitespace trimmed from every line as well +// as trimmed trailing empty lines +func TrimTrailingMultilineWhitespace(s string) string { + var trimmedLines []string + for _, line := range strings.Split(s, "\n") { + trimmedLine := strings.TrimRight(line, "\t ") + trimmedLines = append(trimmedLines, trimmedLine) + } + multiline := strings.Join(trimmedLines, "\n") + return strings.TrimRight(multiline, "\n") +} diff --git a/test/filetests/filetests_test.go b/test/filetests/filetests_test.go new file mode 100644 index 00000000..9a949c21 --- /dev/null +++ b/test/filetests/filetests_test.go @@ -0,0 +1,56 @@ +package filetests + +import ( + "github.com/stretchr/testify/assert" + "testing" +) + +func TestTrimTrailingMultilineWhitespace(t *testing.T) { + for _, testcase := range []struct { + give, want string + }{ + { + give: `we want yaml`, + want: `we want yaml`, + }, + { + give: `we want yaml `, + want: `we want yaml`, + }, + { + give: `we want yaml `, + want: `we want yaml`, + }, + { + give: `we want yaml +`, + want: `we want yaml`, + }, + { + give: ` +we +want +yaml `, + want: ` +we +want +yaml`, + }, + { + give: ` +we + + want + yaml + +`, + want: ` +we + + want + yaml`, + }, + } { + assert.Equal(t, testcase.want, TrimTrailingMultilineWhitespace(testcase.give)) + } +}