github.com/ouraigua/jenkins-library@v0.0.0-20231028010029-fbeaf2f3aa9b/pkg/piperutils/slices_test.go (about) 1 //go:build unit 2 // +build unit 3 4 package piperutils 5 6 import ( 7 "testing" 8 9 "github.com/stretchr/testify/assert" 10 ) 11 12 func TestContainsInt(t *testing.T) { 13 var intList []int 14 assert.Equal(t, false, ContainsInt(intList, 4)) 15 16 intList = append(intList, 1, 2, 3, 4, 5, 6, 20) 17 assert.Equal(t, true, ContainsInt(intList, 20)) 18 assert.Equal(t, true, ContainsInt(intList, 1)) 19 assert.Equal(t, true, ContainsInt(intList, 4)) 20 assert.Equal(t, false, ContainsInt(intList, 13)) 21 } 22 23 func TestContainsString(t *testing.T) { 24 var stringList []string 25 assert.False(t, ContainsString(stringList, "test")) 26 assert.False(t, ContainsString(stringList, "")) 27 28 stringList = append(stringList, "", "foo", "bar", "foo") 29 assert.True(t, ContainsString(stringList, "")) 30 assert.True(t, ContainsString(stringList, "bar")) 31 assert.True(t, ContainsString(stringList, "foo")) 32 assert.False(t, ContainsString(stringList, "baz")) 33 } 34 35 func TestFindString(t *testing.T) { 36 var stringList []string 37 assert.Equal(t, -1, FindString(stringList, "test")) 38 assert.Equal(t, -1, FindString(stringList, "")) 39 40 stringList = append(stringList, "", "foo", "bar", "foo") 41 assert.Equal(t, 0, FindString(stringList, "")) 42 assert.Equal(t, 2, FindString(stringList, "bar")) 43 assert.Equal(t, 1, FindString(stringList, "foo")) 44 assert.Equal(t, -1, FindString(stringList, "baz")) 45 } 46 47 func TestRemoveAll(t *testing.T) { 48 t.Parallel() 49 t.Run("empty array", func(t *testing.T) { 50 result, removed := RemoveAll([]string{}, "A") 51 assert.Len(t, result, 0) 52 assert.False(t, removed) 53 }) 54 t.Run("two As", func(t *testing.T) { 55 result, removed := RemoveAll([]string{"A", "B", "C", "A", "C", "", "D"}, "A") 56 assert.Equal(t, []string{"B", "C", "C", "", "D"}, result) 57 assert.True(t, removed) 58 }) 59 t.Run("one B", func(t *testing.T) { 60 result, removed := RemoveAll([]string{"A", "B", "C", "A", "C", "", "D"}, "B") 61 assert.Equal(t, []string{"A", "C", "A", "C", "", "D"}, result) 62 assert.True(t, removed) 63 }) 64 t.Run("empty e", func(t *testing.T) { 65 result, removed := RemoveAll([]string{"A", "B", "C", "A", "C", "", "D"}, "") 66 assert.Equal(t, []string{"A", "B", "C", "A", "C", "D"}, result) 67 assert.True(t, removed) 68 }) 69 t.Run("one D", func(t *testing.T) { 70 result, removed := RemoveAll([]string{"A", "B", "C", "A", "C", "", "D"}, "D") 71 assert.Equal(t, []string{"A", "B", "C", "A", "C", ""}, result) 72 assert.True(t, removed) 73 }) 74 t.Run("not found", func(t *testing.T) { 75 result, removed := RemoveAll([]string{"A", "B", "C", "A", "C", "", "D"}, "X") 76 assert.Equal(t, []string{"A", "B", "C", "A", "C", "", "D"}, result) 77 assert.False(t, removed) 78 }) 79 } 80 81 func TestPrefix(t *testing.T) { 82 // init 83 s := []string{"tree", "pie", "applejuice"} 84 // test 85 s = Prefix(s, "apple") 86 // assert 87 assert.Contains(t, s, "appletree") 88 assert.Contains(t, s, "applepie") 89 assert.Contains(t, s, "appleapplejuice") 90 } 91 92 func TestPrefixIfNeeded(t *testing.T) { 93 // init 94 s := []string{"tree", "pie", "applejuice"} 95 // test 96 s = PrefixIfNeeded(s, "apple") 97 // assert 98 assert.Contains(t, s, "appletree") 99 assert.Contains(t, s, "applepie") 100 assert.Contains(t, s, "applejuice") 101 } 102 103 func TestTrim(t *testing.T) { 104 // init 105 s := []string{" orange", "banana ", " apple", "mango ", " ", ""} 106 // test 107 s = Trim(s) 108 // assert 109 assert.Equal(t, 4, len(s)) 110 assert.Contains(t, s, "orange") 111 assert.Contains(t, s, "banana") 112 assert.Contains(t, s, "apple") 113 assert.Contains(t, s, "mango") 114 } 115 116 func TestSplitTrimAndDeDup(t *testing.T) { 117 t.Run("Separator is not space", func(t *testing.T) { 118 // init 119 s := []string{" a", "", "-a-b --c ", "d-e", "f", " f", ""} 120 // test 121 s = SplitAndTrim(s, "-") 122 // assert 123 assert.Equal(t, []string{"a", "a", "b", "c", "d", "e", "f", "f"}, s) 124 }) 125 t.Run("Separator is space", func(t *testing.T) { 126 // init 127 s := []string{" a", " a b c ", "d e", "f", "f ", ""} 128 // test 129 s = SplitAndTrim(s, " ") 130 // assert 131 assert.Equal(t, []string{"a", "a", "b", "c", "d", "e", "f", "f"}, s) 132 }) 133 t.Run("Separator is multi-char", func(t *testing.T) { 134 // init 135 s := []string{" a", " a** b**c ", "**d **e", "f**", "f ", ""} 136 // test 137 s = SplitAndTrim(s, "**") 138 // assert 139 assert.Equal(t, []string{"a", "a", "b", "c", "d", "e", "f", "f"}, s) 140 }) 141 t.Run("Separator is empty string", func(t *testing.T) { 142 // init 143 s := []string{" a", " a bc ", "d e", "f", "f ", ""} 144 // test 145 s = SplitAndTrim(s, "") 146 // assert 147 // If "sep" is empty, underlying strings.Split() splits after each UTF-8 char sequence. 148 assert.Equal(t, []string{"a", "a", "b", "c", "d", "e", "f", "f"}, s) 149 }) 150 } 151 152 func TestUniqueStrings(t *testing.T) { 153 154 unique := UniqueStrings([]string{"abc", "xyz", "123", "abc"}) 155 if assert.Len(t, unique, 3) { 156 assert.Subset(t, []string{"123", "abc", "xyz"}, unique) 157 } 158 } 159 160 func TestCopyAtoB(t *testing.T) { 161 src := []string{"abc", "xyz", "123", "abc"} 162 target := make([]string, 4) 163 CopyAtoB(src, target) 164 if assert.Len(t, target, 4) { 165 assert.EqualValues(t, src, target) 166 } 167 }