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)
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|