moby/pkg/stringutils/stringutils_test.go
Sebastiaan van Stijn 51dc35cf23
Implement stringutils.Ellipsis()
This patch implements an Ellipsis utility to
append an ellipsis (...)  when truncating
strings in output.

It also fixes the existing Truncate() utility
to be compatible with unicode/multibyte characters.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2016-08-11 14:14:06 +02:00

121 lines
3 KiB
Go

package stringutils
import "testing"
func testLengthHelper(generator func(int) string, t *testing.T) {
expectedLength := 20
s := generator(expectedLength)
if len(s) != expectedLength {
t.Fatalf("Length of %s was %d but expected length %d", s, len(s), expectedLength)
}
}
func testUniquenessHelper(generator func(int) string, t *testing.T) {
repeats := 25
set := make(map[string]struct{}, repeats)
for i := 0; i < repeats; i = i + 1 {
str := generator(64)
if len(str) != 64 {
t.Fatalf("Id returned is incorrect: %s", str)
}
if _, ok := set[str]; ok {
t.Fatalf("Random number is repeated")
}
set[str] = struct{}{}
}
}
func isASCII(s string) bool {
for _, c := range s {
if c > 127 {
return false
}
}
return true
}
func TestGenerateRandomAlphaOnlyStringLength(t *testing.T) {
testLengthHelper(GenerateRandomAlphaOnlyString, t)
}
func TestGenerateRandomAlphaOnlyStringUniqueness(t *testing.T) {
testUniquenessHelper(GenerateRandomAlphaOnlyString, t)
}
func TestGenerateRandomAsciiStringLength(t *testing.T) {
testLengthHelper(GenerateRandomASCIIString, t)
}
func TestGenerateRandomAsciiStringUniqueness(t *testing.T) {
testUniquenessHelper(GenerateRandomASCIIString, t)
}
func TestGenerateRandomAsciiStringIsAscii(t *testing.T) {
str := GenerateRandomASCIIString(64)
if !isASCII(str) {
t.Fatalf("%s contained non-ascii characters", str)
}
}
func TestEllipsis(t *testing.T) {
str := "t🐳ststring"
newstr := Ellipsis(str, 3)
if newstr != "t🐳s" {
t.Fatalf("Expected t🐳s, got %s", newstr)
}
newstr = Ellipsis(str, 8)
if newstr != "t🐳sts..." {
t.Fatalf("Expected tests..., got %s", newstr)
}
newstr = Ellipsis(str, 20)
if newstr != "t🐳ststring" {
t.Fatalf("Expected t🐳ststring, got %s", newstr)
}
}
func TestTruncate(t *testing.T) {
str := "t🐳ststring"
newstr := Truncate(str, 4)
if newstr != "t🐳st" {
t.Fatalf("Expected t🐳st, got %s", newstr)
}
newstr = Truncate(str, 20)
if newstr != "t🐳ststring" {
t.Fatalf("Expected t🐳ststring, got %s", newstr)
}
}
func TestInSlice(t *testing.T) {
slice := []string{"t🐳st", "in", "slice"}
test := InSlice(slice, "t🐳st")
if !test {
t.Fatalf("Expected string t🐳st to be in slice")
}
test = InSlice(slice, "SLICE")
if !test {
t.Fatalf("Expected string SLICE to be in slice")
}
test = InSlice(slice, "notinslice")
if test {
t.Fatalf("Expected string notinslice not to be in slice")
}
}
func TestShellQuoteArgumentsEmpty(t *testing.T) {
actual := ShellQuoteArguments([]string{})
expected := ""
if actual != expected {
t.Fatalf("Expected an empty string")
}
}
func TestShellQuoteArguments(t *testing.T) {
simpleString := "simpleString"
complexString := "This is a 'more' complex $tring with some special char *"
actual := ShellQuoteArguments([]string{simpleString, complexString})
expected := "simpleString 'This is a '\\''more'\\'' complex $tring with some special char *'"
if actual != expected {
t.Fatalf("Expected \"%v\", got \"%v\"", expected, actual)
}
}