137 lines
3.6 KiB
Go
137 lines
3.6 KiB
Go
package makesafe
|
||
|
||
import (
|
||
"testing"
|
||
)
|
||
|
||
func TestRedact(t *testing.T) {
|
||
for i, test := range []struct{ data, expected string }{
|
||
{"", `""`},
|
||
{"one", "one"},
|
||
{"has space.txt", `"has space.txt"`},
|
||
{"has\ttab.txt", `"hasXtab.txt"(redacted)`},
|
||
{"has\nnl.txt", `"hasXnl.txt"(redacted)`},
|
||
{"has\rret.txt", `"hasXret.txt"(redacted)`},
|
||
{"¡que!", `¡que!`},
|
||
{"thé", `thé`},
|
||
{"pound£", `pound£`},
|
||
{"*.go", `*.go`},
|
||
{"rm -rf / ; echo done", `"rm -rf / ; echo done"`},
|
||
{"smile\u263a", `smile☺`},
|
||
{"dub\U0001D4E6", `dub𝓦`},
|
||
{"four\U0010FFFF", `"fourX"(redacted)`},
|
||
} {
|
||
g := Redact(test.data)
|
||
if g == test.expected {
|
||
t.Logf("%03d: PASSED", i)
|
||
} else {
|
||
t.Errorf("%03d: FAILED data=%q got=(%s) wanted=(%s)", i, test.data, g, test.expected)
|
||
}
|
||
}
|
||
}
|
||
|
||
func TestRedactMany(t *testing.T) {
|
||
data := []string{
|
||
"",
|
||
"one",
|
||
"has space.txt",
|
||
"has\ttab.txt",
|
||
}
|
||
g := RedactMany(data)
|
||
if len(g) != 4 || g[0] != `""` || g[1] != `"has space.txt"` || g[2] != `"hasXtab.txt"(redacted)` {
|
||
t.Logf("PASSED")
|
||
} else {
|
||
t.Errorf("FAILED got=(%q)", g)
|
||
}
|
||
}
|
||
|
||
func TestShell(t *testing.T) {
|
||
for i, test := range []struct{ data, expected string }{
|
||
{"", `""`},
|
||
{"one", "one"},
|
||
{"two\n", `$(printf '%q' 'two\n')`},
|
||
{"ta tab", `$(printf '%q' 'ta\ttab')`},
|
||
{"tab\ttab", `$(printf '%q' 'tab\ttab')`},
|
||
{"new\nline", `$(printf '%q' 'new\nline')`},
|
||
{"¡que!", `$(printf '%q' '\302\241que!')`},
|
||
{"thé", `$(printf '%q' 'th\303\251')`},
|
||
{"pound£", `$(printf '%q' 'pound\302\243')`},
|
||
{"*.go", `'*.go'`},
|
||
{"rm -rf / ; echo done", `'rm -rf / ; echo done'`},
|
||
{"smile\u263a", `$(printf '%q' 'smile\342\230\272')`},
|
||
{"dub\U0001D4E6", `$(printf '%q' 'dub\360\235\223\246')`},
|
||
{"four\U0010FFFF", `$(printf '%q' 'four\364\217\277\277')`},
|
||
} {
|
||
g := Shell(test.data)
|
||
if g == test.expected {
|
||
t.Logf("%03d: PASSED", i)
|
||
//t.Logf("%03d: PASSED go(%q) bash: %s", i, test.data, test.expected)
|
||
} else {
|
||
t.Errorf("%03d: FAILED data=%q got=`%s` wanted=`%s`", i, test.data, g, test.expected)
|
||
}
|
||
}
|
||
}
|
||
|
||
func TestEscapeRune(t *testing.T) {
|
||
for i, test := range []struct {
|
||
data rune
|
||
expected string
|
||
}{
|
||
{'a', `\141`},
|
||
{'é', `\303\251`},
|
||
{'☺', `\342\230\272`},
|
||
{'글', `\352\270\200`},
|
||
{'𩸽', `\360\251\270\275`},
|
||
//{"\U0010FEDC", `"'\U0010fedc'"`},
|
||
} {
|
||
g := escapeRune(test.data)
|
||
if g == test.expected {
|
||
t.Logf("%03d: PASSED go=(%q) bash=(%s)", i, test.data, test.expected)
|
||
} else {
|
||
t.Errorf("%03d: FAILED data=%q got=(%s) wanted=(%s)", i, test.data, g, test.expected)
|
||
}
|
||
}
|
||
}
|
||
|
||
func TestShellMany(t *testing.T) {
|
||
data := []string{
|
||
"",
|
||
"one",
|
||
"has space.txt",
|
||
"¡que!",
|
||
}
|
||
g := ShellMany(data)
|
||
if len(g) != 4 || g[0] != `""` || g[1] != "one" || g[2] != `"has space.txt"` || g[3] != `$(printf '%q' '\302\241que!')` {
|
||
t.Logf("PASSED")
|
||
} else {
|
||
t.Errorf("FAILED got=(%q)", g)
|
||
}
|
||
}
|
||
|
||
func TestFirstFewFlag(t *testing.T) {
|
||
for i, test := range []struct {
|
||
data []string
|
||
expectedFlag bool
|
||
expectedString string
|
||
}{
|
||
{[]string{"", "one"}, false, ` one`},
|
||
{[]string{"one"}, false, `one`},
|
||
{[]string{"one", "two", "three", "longlonglong", "longlonglonglong", "manylonglonglog", "morelongonglonglong"}, true, ``},
|
||
} {
|
||
gs, gf := FirstFewFlag(test.data)
|
||
if test.expectedFlag {
|
||
if gf == test.expectedFlag {
|
||
t.Logf("%03d: PASSED", i)
|
||
} else {
|
||
t.Errorf("%03d: FAILED data=%q got=(%q) wanted=(%q)", i, test.data, gs, test.expectedString)
|
||
}
|
||
} else {
|
||
if gf == test.expectedFlag && gs == test.expectedString {
|
||
t.Logf("%03d: PASSED", i)
|
||
} else {
|
||
t.Errorf("%03d: FAILED data=%q got=(%q) wanted=(%q)", i, test.data, gs, test.expectedString)
|
||
}
|
||
}
|
||
}
|
||
}
|