github.com/hashicorp/packer@v1.14.3/hcl2template/function/alltrue_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 TestAllTrue(t *testing.T) {
    14  	tests := []struct {
    15  		Collection cty.Value
    16  		Want       cty.Value
    17  		Err        bool
    18  	}{
    19  		{
    20  			cty.ListValEmpty(cty.Bool),
    21  			cty.True,
    22  			false,
    23  		},
    24  		{
    25  			cty.ListVal([]cty.Value{cty.True}),
    26  			cty.True,
    27  			false,
    28  		},
    29  		{
    30  			cty.ListVal([]cty.Value{cty.False}),
    31  			cty.False,
    32  			false,
    33  		},
    34  		{
    35  			cty.ListVal([]cty.Value{cty.True, cty.False}),
    36  			cty.False,
    37  			false,
    38  		},
    39  		{
    40  			cty.ListVal([]cty.Value{cty.False, cty.True}),
    41  			cty.False,
    42  			false,
    43  		},
    44  		{
    45  			cty.ListVal([]cty.Value{cty.True, cty.NullVal(cty.Bool)}),
    46  			cty.False,
    47  			false,
    48  		},
    49  		{
    50  			cty.ListVal([]cty.Value{cty.UnknownVal(cty.Bool)}),
    51  			cty.UnknownVal(cty.Bool).RefineNotNull(),
    52  			false,
    53  		},
    54  		{
    55  			cty.ListVal([]cty.Value{
    56  				cty.UnknownVal(cty.Bool),
    57  				cty.UnknownVal(cty.Bool),
    58  			}),
    59  			cty.UnknownVal(cty.Bool).RefineNotNull(),
    60  			false,
    61  		},
    62  		{
    63  			cty.UnknownVal(cty.List(cty.Bool)),
    64  			cty.UnknownVal(cty.Bool).RefineNotNull(),
    65  			false,
    66  		},
    67  		{
    68  			cty.NullVal(cty.List(cty.Bool)),
    69  			cty.NilVal,
    70  			true,
    71  		},
    72  	}
    73  
    74  	for _, tc := range tests {
    75  		t.Run(fmt.Sprintf("alltrue(%#v)", tc.Collection), func(t *testing.T) {
    76  			got, err := AllTrue.Call([]cty.Value{tc.Collection})
    77  
    78  			if tc.Err && err == nil {
    79  				t.Fatal("succeeded; want error")
    80  			}
    81  			if !tc.Err && err != nil {
    82  				t.Fatalf("unexpected error: %s", err)
    83  			}
    84  			if !got.RawEquals(tc.Want) {
    85  				t.Errorf("wrong result\ngot:  %#v\nwant: %#v", got, tc.Want)
    86  			}
    87  		})
    88  	}
    89  }