github.com/beauknowssoftware/makehcl@v0.0.0-20200322000747-1b9bb1e1c008/internal/functions/concat_test.go (about) 1 package functions_test 2 3 import ( 4 "testing" 5 6 "github.com/beauknowssoftware/makehcl/internal/functions" 7 "github.com/pkg/errors" 8 "github.com/zclconf/go-cty/cty" 9 ) 10 11 func concat(t *testing.T, args []cty.Value, retType cty.Type) cty.Value { 12 v, err := functions.Concat(args, retType) 13 if err != nil { 14 err = errors.Wrap(err, "failed to concat") 15 t.Fatal(err) 16 } 17 18 return v 19 } 20 21 func TestConcat(t *testing.T) { 22 tests := map[string]struct { 23 args []cty.Value 24 retType cty.Type 25 expected cty.Value 26 }{ 27 "empty": { 28 expected: cty.ListValEmpty(cty.List(cty.String)), 29 }, 30 "single tuple": { 31 args: []cty.Value{ 32 cty.TupleVal([]cty.Value{ 33 cty.StringVal("a"), 34 cty.StringVal("b"), 35 cty.StringVal("c"), 36 }), 37 }, 38 expected: cty.ListVal([]cty.Value{ 39 cty.StringVal("a"), 40 cty.StringVal("b"), 41 cty.StringVal("c"), 42 }), 43 }, 44 "multiple tuples": { 45 args: []cty.Value{ 46 cty.TupleVal([]cty.Value{ 47 cty.StringVal("a"), 48 cty.StringVal("b"), 49 cty.StringVal("c"), 50 }), 51 cty.TupleVal([]cty.Value{ 52 cty.StringVal("d"), 53 cty.StringVal("e"), 54 cty.StringVal("f"), 55 }), 56 }, 57 expected: cty.ListVal([]cty.Value{ 58 cty.StringVal("a"), 59 cty.StringVal("b"), 60 cty.StringVal("c"), 61 cty.StringVal("d"), 62 cty.StringVal("e"), 63 cty.StringVal("f"), 64 }), 65 }, 66 "single list": { 67 args: []cty.Value{ 68 cty.ListVal([]cty.Value{ 69 cty.StringVal("a"), 70 cty.StringVal("b"), 71 cty.StringVal("c"), 72 }), 73 }, 74 expected: cty.ListVal([]cty.Value{ 75 cty.StringVal("a"), 76 cty.StringVal("b"), 77 cty.StringVal("c"), 78 }), 79 }, 80 "single string": { 81 args: []cty.Value{ 82 cty.StringVal("a"), 83 }, 84 expected: cty.ListVal([]cty.Value{ 85 cty.StringVal("a"), 86 }), 87 }, 88 "multiple strings": { 89 args: []cty.Value{ 90 cty.StringVal("a"), 91 cty.StringVal("b"), 92 cty.StringVal("c"), 93 }, 94 expected: cty.ListVal([]cty.Value{ 95 cty.StringVal("a"), 96 cty.StringVal("b"), 97 cty.StringVal("c"), 98 }), 99 }, 100 "mixed": { 101 args: []cty.Value{ 102 cty.StringVal("a"), 103 cty.ListVal([]cty.Value{ 104 cty.StringVal("b"), 105 cty.StringVal("c"), 106 }), 107 cty.StringVal("d"), 108 cty.TupleVal([]cty.Value{ 109 cty.StringVal("e"), 110 }), 111 cty.StringVal("f"), 112 }, 113 expected: cty.ListVal([]cty.Value{ 114 cty.StringVal("a"), 115 cty.StringVal("b"), 116 cty.StringVal("c"), 117 cty.StringVal("d"), 118 cty.StringVal("e"), 119 cty.StringVal("f"), 120 }), 121 }, 122 "multiple lists": { 123 args: []cty.Value{ 124 cty.ListVal([]cty.Value{ 125 cty.StringVal("a"), 126 cty.StringVal("b"), 127 cty.StringVal("c"), 128 }), 129 cty.ListVal([]cty.Value{ 130 cty.StringVal("d"), 131 cty.StringVal("e"), 132 cty.StringVal("f"), 133 }), 134 }, 135 expected: cty.ListVal([]cty.Value{ 136 cty.StringVal("a"), 137 cty.StringVal("b"), 138 cty.StringVal("c"), 139 cty.StringVal("d"), 140 cty.StringVal("e"), 141 cty.StringVal("f"), 142 }), 143 }, 144 } 145 146 for name, test := range tests { 147 t.Run(name, func(t *testing.T) { 148 actual := concat(t, test.args, test.retType) 149 150 if !test.expected.RawEquals(actual) { 151 t.Fatalf("\nexpected %v\ngot %v", test.expected.GoString(), actual.GoString()) 152 } 153 }) 154 } 155 }