github.com/cdoern/storage@v1.12.13/pkg/stringutils/stringutils_test.go (about) 1 package stringutils 2 3 import "testing" 4 5 func testLengthHelper(generator func(int) string, t *testing.T) { 6 expectedLength := 20 7 s := generator(expectedLength) 8 if len(s) != expectedLength { 9 t.Fatalf("Length of %s was %d but expected length %d", s, len(s), expectedLength) 10 } 11 } 12 13 func testUniquenessHelper(generator func(int) string, t *testing.T) { 14 repeats := 25 15 set := make(map[string]struct{}, repeats) 16 for i := 0; i < repeats; i = i + 1 { 17 str := generator(64) 18 if len(str) != 64 { 19 t.Fatalf("Id returned is incorrect: %s", str) 20 } 21 if _, ok := set[str]; ok { 22 t.Fatalf("Random number is repeated") 23 } 24 set[str] = struct{}{} 25 } 26 } 27 28 func isASCII(s string) bool { 29 for _, c := range s { 30 if c > 127 { 31 return false 32 } 33 } 34 return true 35 } 36 37 func TestGenerateRandomAlphaOnlyStringLength(t *testing.T) { 38 testLengthHelper(GenerateRandomAlphaOnlyString, t) 39 } 40 41 func TestGenerateRandomAlphaOnlyStringUniqueness(t *testing.T) { 42 testUniquenessHelper(GenerateRandomAlphaOnlyString, t) 43 } 44 45 func TestGenerateRandomAsciiStringLength(t *testing.T) { 46 testLengthHelper(GenerateRandomASCIIString, t) 47 } 48 49 func TestGenerateRandomAsciiStringUniqueness(t *testing.T) { 50 testUniquenessHelper(GenerateRandomASCIIString, t) 51 } 52 53 func TestGenerateRandomAsciiStringIsAscii(t *testing.T) { 54 str := GenerateRandomASCIIString(64) 55 if !isASCII(str) { 56 t.Fatalf("%s contained non-ascii characters", str) 57 } 58 } 59 60 func TestEllipsis(t *testing.T) { 61 str := "t🐳ststring" 62 newstr := Ellipsis(str, 3) 63 if newstr != "t🐳s" { 64 t.Fatalf("Expected t🐳s, got %s", newstr) 65 } 66 newstr = Ellipsis(str, 8) 67 if newstr != "t🐳sts..." { 68 t.Fatalf("Expected tests..., got %s", newstr) 69 } 70 newstr = Ellipsis(str, 20) 71 if newstr != "t🐳ststring" { 72 t.Fatalf("Expected t🐳ststring, got %s", newstr) 73 } 74 } 75 76 func TestTruncate(t *testing.T) { 77 str := "t🐳ststring" 78 newstr := Truncate(str, 4) 79 if newstr != "t🐳st" { 80 t.Fatalf("Expected t🐳st, got %s", newstr) 81 } 82 newstr = Truncate(str, 20) 83 if newstr != "t🐳ststring" { 84 t.Fatalf("Expected t🐳ststring, got %s", newstr) 85 } 86 } 87 88 func TestInSlice(t *testing.T) { 89 slice := []string{"t🐳st", "in", "slice"} 90 91 test := InSlice(slice, "t🐳st") 92 if !test { 93 t.Fatalf("Expected string t🐳st to be in slice") 94 } 95 test = InSlice(slice, "SLICE") 96 if !test { 97 t.Fatalf("Expected string SLICE to be in slice") 98 } 99 test = InSlice(slice, "notinslice") 100 if test { 101 t.Fatalf("Expected string notinslice not to be in slice") 102 } 103 } 104 105 func TestShellQuoteArgumentsEmpty(t *testing.T) { 106 actual := ShellQuoteArguments([]string{}) 107 expected := "" 108 if actual != expected { 109 t.Fatalf("Expected an empty string") 110 } 111 } 112 113 func TestShellQuoteArguments(t *testing.T) { 114 simpleString := "simpleString" 115 complexString := "This is a 'more' complex $tring with some special char *" 116 actual := ShellQuoteArguments([]string{simpleString, complexString}) 117 expected := "simpleString 'This is a '\\''more'\\'' complex $tring with some special char *'" 118 if actual != expected { 119 t.Fatalf("Expected \"%v\", got \"%v\"", expected, actual) 120 } 121 }