github.com/tilt-dev/tilt@v0.33.15-0.20240515162809-0a22ed45d8a0/internal/tiltfile/value/string_test.go (about) 1 package value 2 3 import ( 4 "testing" 5 6 "github.com/stretchr/testify/require" 7 "go.starlark.net/starlark" 8 ) 9 10 func TestAsStringOrStringList_String(t *testing.T) { 11 var v StringOrStringList 12 err := v.Unpack(starlark.String("foo")) 13 14 require.NoError(t, err) 15 require.Equal(t, []string{"foo"}, v.Values) 16 } 17 18 func TestAsStringOrStringList_ListOfStrings(t *testing.T) { 19 var v StringOrStringList 20 err := v.Unpack(starlark.NewList([]starlark.Value{ 21 starlark.String("foo"), 22 starlark.String("bar"), 23 starlark.String("baz"), 24 })) 25 26 require.NoError(t, err) 27 require.Equal(t, []string{"foo", "bar", "baz"}, v.Values) 28 } 29 30 func TestAsStringOrStringList_NonStringOrList(t *testing.T) { 31 var v StringOrStringList 32 err := v.Unpack(starlark.Bool(true)) 33 require.Error(t, err) 34 require.Contains(t, err.Error(), "value should be a string or List or Tuple of strings, but is of type bool") 35 } 36 37 func TestAsStringOrStringList_ListWithNonStringElement(t *testing.T) { 38 var v StringOrStringList 39 err := v.Unpack(starlark.NewList([]starlark.Value{starlark.String("foo"), starlark.Bool(true)})) 40 require.Error(t, err) 41 require.Contains(t, err.Error(), "list should contain only strings, but element \"True\" was of type bool") 42 } 43 44 // https://github.com/tilt-dev/tilt/issues/3570 45 func TestAsStringOrStringList_Map(t *testing.T) { 46 m := starlark.NewDict(2) 47 err := m.SetKey(starlark.String("foo"), starlark.String("1")) 48 require.NoError(t, err) 49 err = m.SetKey(starlark.String("bar"), starlark.String("2")) 50 require.NoError(t, err) 51 52 var v StringOrStringList 53 err = v.Unpack(m) 54 require.Error(t, err) 55 require.Contains(t, err.Error(), "value should be a string or List or Tuple of strings, but is of type dict") 56 }