github.com/tilt-dev/tilt@v0.33.15-0.20240515162809-0a22ed45d8a0/internal/tiltfile/value/map_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 TestStringStringMap(t *testing.T) {
    11  	sv := starlark.NewDict(2)
    12  	err := sv.SetKey(starlark.String("a"), starlark.String("b"))
    13  	require.NoError(t, err)
    14  	err = sv.SetKey(starlark.String("c"), starlark.String("d"))
    15  	require.NoError(t, err)
    16  
    17  	v := StringStringMap{}
    18  
    19  	err = v.Unpack(sv)
    20  	require.NoError(t, err)
    21  
    22  	expected := StringStringMap{"a": "b", "c": "d"}
    23  	require.Equal(t, expected, v)
    24  }
    25  
    26  func TestStringStringMapNotDict(t *testing.T) {
    27  	sv := starlark.NewList([]starlark.Value{starlark.String("a"), starlark.String("b")})
    28  
    29  	v := StringStringMap{}
    30  
    31  	err := v.Unpack(sv)
    32  	require.Error(t, err)
    33  	require.Contains(t, err.Error(), "expected dict, got *starlark.List")
    34  }
    35  
    36  func TestStringStringMapKeyNotString(t *testing.T) {
    37  	sv := starlark.NewDict(1)
    38  	err := sv.SetKey(starlark.MakeInt(1), starlark.String("a"))
    39  	require.NoError(t, err)
    40  
    41  	v := StringStringMap{}
    42  
    43  	err = v.Unpack(sv)
    44  	require.Error(t, err)
    45  	require.Contains(t, err.Error(), "key is not a string: starlark.Int (1)")
    46  }
    47  
    48  func TestStringStringMapValueNotString(t *testing.T) {
    49  	sv := starlark.NewDict(1)
    50  	err := sv.SetKey(starlark.String("a"), starlark.MakeInt(1))
    51  	require.NoError(t, err)
    52  
    53  	v := StringStringMap{}
    54  
    55  	err = v.Unpack(sv)
    56  	require.Error(t, err)
    57  	require.Contains(t, err.Error(), "value is not a string: starlark.Int (1)")
    58  }
    59  
    60  func TestStringStringMapUnpackClearsExistingData(t *testing.T) {
    61  	sv := starlark.NewDict(2)
    62  	err := sv.SetKey(starlark.String("a"), starlark.String("b"))
    63  	require.NoError(t, err)
    64  	err = sv.SetKey(starlark.String("c"), starlark.String("d"))
    65  	require.NoError(t, err)
    66  
    67  	v := StringStringMap{}
    68  
    69  	err = v.Unpack(sv)
    70  	require.NoError(t, err)
    71  
    72  	sv = starlark.NewDict(0)
    73  	err = v.Unpack(sv)
    74  	require.NoError(t, err)
    75  	require.Equal(t, 0, len(v))
    76  }