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 }