src.elv.sh@v0.21.0-dev.0.20240515223629-06979efb9a2a/pkg/eval/vars/element_test.go (about) 1 package vars 2 3 import ( 4 "testing" 5 6 "src.elv.sh/pkg/eval/vals" 7 ) 8 9 var elementTests = []struct { 10 name string 11 oldContainer any 12 indices []any 13 elemValue any 14 newContainer any 15 }{ 16 { 17 "single level", 18 vals.MakeMap("k1", "v1", "k2", "v2"), 19 []any{"k1"}, "new v1", 20 vals.MakeMap("k1", "new v1", "k2", "v2"), 21 }, 22 { 23 "multi level", 24 vals.MakeMap( 25 "k1", vals.MakeMap("k1a", "v1a", "k1b", "v1b"), "k2", "v2"), 26 []any{"k1", "k1a"}, "new v1a", 27 vals.MakeMap( 28 "k1", vals.MakeMap("k1a", "new v1a", "k1b", "v1b"), "k2", "v2"), 29 }, 30 } 31 32 func TestElement(t *testing.T) { 33 for _, test := range elementTests { 34 t.Run(test.name, func(t *testing.T) { 35 m := test.oldContainer 36 37 elemVar, err := MakeElement(FromPtr(&m), test.indices) 38 if err != nil { 39 t.Errorf("MakeElement -> error %v, want nil", err) 40 } 41 42 elemVar.Set(test.elemValue) 43 if !vals.Equal(m, test.newContainer) { 44 t.Errorf("Value after Set is %v, want %v", m, test.newContainer) 45 } 46 47 if elemVar.Get() != test.elemValue { 48 t.Errorf("elemVar.Get() -> %v, want %v", 49 elemVar.Get(), test.elemValue) 50 } 51 }) 52 } 53 } 54 55 var delElementTests = []struct { 56 name string 57 oldContainer any 58 indices []any 59 newContainer any 60 }{ 61 { 62 "single level", 63 vals.MakeMap("k1", "v1", "k2", "v2"), 64 []any{"k1"}, 65 vals.MakeMap("k2", "v2"), 66 }, 67 { 68 "multi level", 69 vals.MakeMap( 70 "k1", vals.MakeMap("k1a", "v1a", "k1b", "v1b"), "k2", "v2"), 71 []any{"k1", "k1a"}, 72 vals.MakeMap("k1", vals.MakeMap("k1b", "v1b"), "k2", "v2"), 73 }, 74 } 75 76 func TestDelElement(t *testing.T) { 77 for _, test := range delElementTests { 78 t.Run(test.name, func(t *testing.T) { 79 m := test.oldContainer 80 81 DelElement(FromPtr(&m), test.indices) 82 if !vals.Equal(m, test.newContainer) { 83 t.Errorf("After deleting, map is %v, want %v", 84 vals.ReprPlain(m), 85 vals.ReprPlain(test.newContainer)) 86 } 87 }) 88 } 89 }