github.com/tilt-dev/tilt@v0.33.15-0.20240515162809-0a22ed45d8a0/internal/sliceutils/sliceutils_test.go (about)

     1  package sliceutils
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/stretchr/testify/assert"
     7  	"github.com/stretchr/testify/require"
     8  )
     9  
    10  func TestAppendWithoutDupesNoDupes(t *testing.T) {
    11  	a := []string{"a", "b"}
    12  	b := []string{"c", "d"}
    13  	observed := AppendWithoutDupes(a, b...)
    14  	expected := []string{"a", "b", "c", "d"}
    15  	assert.Equal(t, expected, observed)
    16  }
    17  
    18  func TestAppendWithoutDupesHasADupe(t *testing.T) {
    19  	a := []string{"a", "b"}
    20  	b := []string{"c", "b"}
    21  	observed := AppendWithoutDupes(a, b...)
    22  	expected := []string{"a", "b", "c"}
    23  	assert.Equal(t, expected, observed)
    24  }
    25  
    26  func TestAppendWithoutDupesEmptyA(t *testing.T) {
    27  	a := []string{}
    28  	b := []string{"c", "b"}
    29  	observed := AppendWithoutDupes(a, b...)
    30  	expected := []string{"c", "b"}
    31  	assert.Equal(t, expected, observed)
    32  }
    33  
    34  func TestAppendWithoutDupesEmptyB(t *testing.T) {
    35  	a := []string{"a", "b"}
    36  	b := []string{}
    37  	observed := AppendWithoutDupes(a, b...)
    38  	expected := []string{"a", "b"}
    39  	assert.Equal(t, expected, observed)
    40  }
    41  
    42  func TestUnescapeAndSplitNoEscape(t *testing.T) {
    43  	parts, err := UnescapeAndSplit("a:b:c", NewEscapeSplitOptions())
    44  	require.NoError(t, err)
    45  	require.Equal(t, []string{"a", "b", "c"}, parts)
    46  }
    47  
    48  func TestUnescapeAndSplitEscapedDelimiter(t *testing.T) {
    49  	parts, err := UnescapeAndSplit(`a\:d:b:c`, NewEscapeSplitOptions())
    50  	require.NoError(t, err)
    51  	require.Equal(t, []string{"a:d", "b", "c"}, parts)
    52  }
    53  
    54  func TestUnescapeAndSplitEscapedEscapeChar(t *testing.T) {
    55  	parts, err := UnescapeAndSplit(`a\\d:b:c`, NewEscapeSplitOptions())
    56  	require.NoError(t, err)
    57  	require.Equal(t, []string{`a\d`, "b", "c"}, parts)
    58  }
    59  
    60  func TestUnescapeAndSplitInvalidEscape(t *testing.T) {
    61  	_, err := UnescapeAndSplit(`a\d:b:c`, NewEscapeSplitOptions())
    62  	require.Error(t, err)
    63  	require.Contains(t, err.Error(), `invalid escape sequence '\d' in 'a\d:b'`)
    64  }
    65  
    66  func TestEscapeAndJoinNoEscape(t *testing.T) {
    67  	s := EscapeAndJoin([]string{"a", "b", "c"}, NewEscapeSplitOptions())
    68  	require.Equal(t, s, "a:b:c", s)
    69  }
    70  
    71  func TestEscapeAndJoinEscapeDelimiter(t *testing.T) {
    72  	s := EscapeAndJoin([]string{"a:d", "b", "c"}, NewEscapeSplitOptions())
    73  	require.Equal(t, s, `a\:d:b:c`, s)
    74  }
    75  
    76  func TestEscapeAndJoinEscapeEscapeChar(t *testing.T) {
    77  	s := EscapeAndJoin([]string{`a\d`, "b", "c"}, NewEscapeSplitOptions())
    78  	require.Equal(t, s, `a\\d:b:c`, s)
    79  }
    80  
    81  func TestUnescapeAndSplitRoundtrip(t *testing.T) {
    82  	expected := `a\\d:\:b\:::c\:e`
    83  	opts := NewEscapeSplitOptions()
    84  	parts, err := UnescapeAndSplit(expected, opts)
    85  	require.NoError(t, err)
    86  	observed := EscapeAndJoin(parts, opts)
    87  	require.Equal(t, expected, observed)
    88  }