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  }