Skip to content

Commit

Permalink
Allow FileTests to have trailing empty lines
Browse files Browse the repository at this point in the history
This makes it easier to author template tests, because
editors tend to append a newline when saving files.
  • Loading branch information
mamachanko committed Sep 17, 2022
1 parent f5ffa14 commit d267887
Show file tree
Hide file tree
Showing 2 changed files with 70 additions and 10 deletions.
24 changes: 14 additions & 10 deletions test/filetests/filetests.go
Original file line number Diff line number Diff line change
Expand Up @@ -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:"):
Expand Down Expand Up @@ -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)}
Expand Down Expand Up @@ -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")
}
56 changes: 56 additions & 0 deletions test/filetests/filetests_test.go
Original file line number Diff line number Diff line change
@@ -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))
}
}

0 comments on commit d267887

Please sign in to comment.