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