Files
go-golden/sanitize_test.go
Jim Myhrberg 3185b09d09 refactor(golden): major refactor and improvements
This includes sanitizing golden file names to avoid characters and names
which are invalid on some operating systems. So this should now work on
Linux, macOS, and Window.
2021-09-17 02:21:32 +01:00

125 lines
3.6 KiB
Go

package golden
import (
"testing"
"github.com/stretchr/testify/assert"
)
func Test_sanitizeFilename(t *testing.T) {
tests := []struct {
name string
filename string
want string
}{
{
name: "empty",
filename: "",
want: "",
},
{
name: ".",
filename: ".",
want: "_",
},
{
name: "..",
filename: "..",
want: "__",
},
{
name: "...",
filename: "...",
want: "___",
},
{
name: "clean",
filename: "foo-bar-nope.golden",
want: "foo-bar-nope.golden",
},
{
name: "with spaces",
filename: "foo bar nope.golden",
want: "foo__bar_nope.golden",
},
{
name: "illegal chars",
filename: `foo/?<>\:*|"bar.golden`,
want: "foo_________bar.golden",
},
{
name: "control chars",
filename: "foo\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b" +
"\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a" +
"\x1b\x1c\x1d\x1e\x1fbar.golden",
want: "foo________________________________bar.golden",
},
{
name: "trailing whitespace",
filename: "foobar.golden ",
want: "foobar.golden",
},
{
name: "trailing dots",
filename: "foobar.golden......",
want: "foobar.golden",
},
{
name: "trailing whitespace and dots",
filename: "foobar.golden .. .. .. ",
want: "foobar.golden",
},
{name: "con", filename: "con", want: "___"},
{name: "prn", filename: "prn", want: "___"},
{name: "aux", filename: "aux", want: "___"},
{name: "nul", filename: "nul", want: "___"},
{name: "com1", filename: "com1", want: "____"},
{name: "com2", filename: "com2", want: "____"},
{name: "com3", filename: "com3", want: "____"},
{name: "com4", filename: "com4", want: "____"},
{name: "com5", filename: "com5", want: "____"},
{name: "com6", filename: "com6", want: "____"},
{name: "com7", filename: "com7", want: "____"},
{name: "com8", filename: "com8", want: "____"},
{name: "com9", filename: "com9", want: "____"},
{name: "lpt1", filename: "lpt1", want: "____"},
{name: "lpt2", filename: "lpt2", want: "____"},
{name: "lpt3", filename: "lpt3", want: "____"},
{name: "lpt4", filename: "lpt4", want: "____"},
{name: "lpt5", filename: "lpt5", want: "____"},
{name: "lpt6", filename: "lpt6", want: "____"},
{name: "lpt7", filename: "lpt7", want: "____"},
{name: "lpt8", filename: "lpt8", want: "____"},
{name: "lpt9", filename: "lpt9", want: "____"},
{name: "CON", filename: "CON", want: "___"},
{name: "PRN", filename: "PRN", want: "___"},
{name: "AUX", filename: "AUX", want: "___"},
{name: "NUL", filename: "NUL", want: "___"},
{name: "COM1", filename: "COM1", want: "____"},
{name: "COM2", filename: "COM2", want: "____"},
{name: "COM3", filename: "COM3", want: "____"},
{name: "COM4", filename: "COM4", want: "____"},
{name: "COM5", filename: "COM5", want: "____"},
{name: "COM6", filename: "COM6", want: "____"},
{name: "COM7", filename: "COM7", want: "____"},
{name: "COM8", filename: "COM8", want: "____"},
{name: "COM9", filename: "COM9", want: "____"},
{name: "LPT1", filename: "LPT1", want: "____"},
{name: "LPT2", filename: "LPT2", want: "____"},
{name: "LPT3", filename: "LPT3", want: "____"},
{name: "LPT4", filename: "LPT4", want: "____"},
{name: "LPT5", filename: "LPT5", want: "____"},
{name: "LPT6", filename: "LPT6", want: "____"},
{name: "LPT7", filename: "LPT7", want: "____"},
{name: "LPT8", filename: "LPT8", want: "____"},
{name: "LPT9", filename: "LPT9", want: "____"},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got := sanitizeFilename(tt.filename)
assert.Equal(t, tt.want, got)
})
}
}