github.com/hashicorp/packer@v1.14.3/hcl2template/function/index_test.go (about) 1 // Copyright (c) HashiCorp, Inc. 2 // SPDX-License-Identifier: BUSL-1.1 3 4 package function 5 6 import ( 7 "fmt" 8 "testing" 9 10 "github.com/zclconf/go-cty/cty" 11 ) 12 13 func TestIndex(t *testing.T) { 14 tests := []struct { 15 List cty.Value 16 Value cty.Value 17 Want cty.Value 18 Err bool 19 }{ 20 { 21 cty.ListVal([]cty.Value{ 22 cty.StringVal("a"), 23 cty.StringVal("b"), 24 cty.StringVal("c"), 25 }), 26 cty.StringVal("a"), 27 cty.NumberIntVal(0), 28 false, 29 }, 30 { 31 cty.ListVal([]cty.Value{ 32 cty.StringVal("a"), 33 cty.StringVal("b"), 34 cty.UnknownVal(cty.String), 35 }), 36 cty.StringVal("a"), 37 cty.NumberIntVal(0), 38 false, 39 }, 40 { 41 cty.ListVal([]cty.Value{ 42 cty.StringVal("a"), 43 cty.StringVal("b"), 44 cty.StringVal("c"), 45 }), 46 cty.StringVal("b"), 47 cty.NumberIntVal(1), 48 false, 49 }, 50 { 51 cty.ListVal([]cty.Value{ 52 cty.StringVal("a"), 53 cty.StringVal("b"), 54 cty.StringVal("c"), 55 }), 56 cty.StringVal("z"), 57 cty.NilVal, 58 true, 59 }, 60 { 61 cty.ListVal([]cty.Value{ 62 cty.StringVal("1"), 63 cty.StringVal("2"), 64 cty.StringVal("3"), 65 }), 66 cty.NumberIntVal(1), 67 cty.NumberIntVal(0), 68 true, 69 }, 70 { 71 cty.ListVal([]cty.Value{ 72 cty.NumberIntVal(1), 73 cty.NumberIntVal(2), 74 cty.NumberIntVal(3), 75 }), 76 cty.NumberIntVal(2), 77 cty.NumberIntVal(1), 78 false, 79 }, 80 { 81 cty.ListVal([]cty.Value{ 82 cty.NumberIntVal(1), 83 cty.NumberIntVal(2), 84 cty.NumberIntVal(3), 85 }), 86 cty.NumberIntVal(4), 87 cty.NilVal, 88 true, 89 }, 90 { 91 cty.ListVal([]cty.Value{ 92 cty.NumberIntVal(1), 93 cty.NumberIntVal(2), 94 cty.NumberIntVal(3), 95 }), 96 cty.StringVal("1"), 97 cty.NumberIntVal(0), 98 true, 99 }, 100 { 101 cty.TupleVal([]cty.Value{ 102 cty.NumberIntVal(1), 103 cty.NumberIntVal(2), 104 cty.NumberIntVal(3), 105 }), 106 cty.NumberIntVal(1), 107 cty.NumberIntVal(0), 108 false, 109 }, 110 } 111 112 for _, test := range tests { 113 t.Run(fmt.Sprintf("index(%#v, %#v)", test.List, test.Value), func(t *testing.T) { 114 got, err := Index(test.List, test.Value) 115 116 if test.Err { 117 if err == nil { 118 t.Fatal("succeeded; want error") 119 } 120 return 121 } else if err != nil { 122 t.Fatalf("unexpected error: %s", err) 123 } 124 125 if !got.RawEquals(test.Want) { 126 t.Errorf("wrong result\ngot: %#v\nwant: %#v", got, test.Want) 127 } 128 }) 129 } 130 }