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  }