@@ -1474,6 +1474,26 @@ func TestEvaluateExpr(t *testing.T) {
1474
1474
GetFileImpl : fileExists ,
1475
1475
ErrCheck : neverHappend ,
1476
1476
},
1477
+ {
1478
+ Name : "bool variable" ,
1479
+ Expr : hclExpr (`var.foo` ),
1480
+ TargetType : reflect .TypeOf (true ),
1481
+ ServerImpl : func (expr hcl.Expression , opts tflint.EvaluateExprOption ) (cty.Value , error ) {
1482
+ if * opts .WantType != cty .Bool {
1483
+ return cty.Value {}, errors .New ("wantType should be bool" )
1484
+ }
1485
+ return evalExpr (expr , & hcl.EvalContext {
1486
+ Variables : map [string ]cty.Value {
1487
+ "var" : cty .MapVal (map [string ]cty.Value {
1488
+ "foo" : cty .BoolVal (true ),
1489
+ }),
1490
+ },
1491
+ })
1492
+ },
1493
+ Want : true ,
1494
+ GetFileImpl : fileExists ,
1495
+ ErrCheck : neverHappend ,
1496
+ },
1477
1497
{
1478
1498
Name : "string list variable" ,
1479
1499
Expr : hclExpr (`var.foo` ),
@@ -1514,6 +1534,26 @@ func TestEvaluateExpr(t *testing.T) {
1514
1534
GetFileImpl : fileExists ,
1515
1535
ErrCheck : neverHappend ,
1516
1536
},
1537
+ {
1538
+ Name : "bool list variable" ,
1539
+ Expr : hclExpr (`var.foo` ),
1540
+ TargetType : reflect .TypeOf ([]bool {}),
1541
+ ServerImpl : func (expr hcl.Expression , opts tflint.EvaluateExprOption ) (cty.Value , error ) {
1542
+ if * opts .WantType != cty .List (cty .Bool ) {
1543
+ return cty.Value {}, errors .New ("wantType should be bool list" )
1544
+ }
1545
+ return evalExpr (expr , & hcl.EvalContext {
1546
+ Variables : map [string ]cty.Value {
1547
+ "var" : cty .MapVal (map [string ]cty.Value {
1548
+ "foo" : cty .ListVal ([]cty.Value {cty .BoolVal (true ), cty .BoolVal (false )}),
1549
+ }),
1550
+ },
1551
+ })
1552
+ },
1553
+ Want : []bool {true , false },
1554
+ GetFileImpl : fileExists ,
1555
+ ErrCheck : neverHappend ,
1556
+ },
1517
1557
{
1518
1558
Name : "string map variable" ,
1519
1559
Expr : hclExpr (`var.foo` ),
@@ -1554,6 +1594,26 @@ func TestEvaluateExpr(t *testing.T) {
1554
1594
GetFileImpl : fileExists ,
1555
1595
ErrCheck : neverHappend ,
1556
1596
},
1597
+ {
1598
+ Name : "bool map variable" ,
1599
+ Expr : hclExpr (`var.foo` ),
1600
+ TargetType : reflect .TypeOf (map [string ]bool {}),
1601
+ ServerImpl : func (expr hcl.Expression , opts tflint.EvaluateExprOption ) (cty.Value , error ) {
1602
+ if * opts .WantType != cty .Map (cty .Bool ) {
1603
+ return cty.Value {}, errors .New ("wantType should be bool map" )
1604
+ }
1605
+ return evalExpr (expr , & hcl.EvalContext {
1606
+ Variables : map [string ]cty.Value {
1607
+ "var" : cty .MapVal (map [string ]cty.Value {
1608
+ "foo" : cty .MapVal (map [string ]cty.Value {"foo" : cty .BoolVal (true ), "bar" : cty .BoolVal (false )}),
1609
+ }),
1610
+ },
1611
+ })
1612
+ },
1613
+ Want : map [string ]bool {"foo" : true , "bar" : false },
1614
+ GetFileImpl : fileExists ,
1615
+ ErrCheck : neverHappend ,
1616
+ },
1557
1617
{
1558
1618
Name : "object variable" ,
1559
1619
Expr : hclExpr (`var.foo` ),
@@ -2046,6 +2106,20 @@ func TestEvaluateExpr_callback(t *testing.T) {
2046
2106
return err == nil || err .Error () != "value is 1"
2047
2107
},
2048
2108
},
2109
+ {
2110
+ name : "callback with bool" ,
2111
+ expr : hclExpr (`true` ),
2112
+ target : func (val bool ) error {
2113
+ return fmt .Errorf ("value is %t" , val )
2114
+ },
2115
+ serverImpl : func (expr hcl.Expression , opts tflint.EvaluateExprOption ) (cty.Value , error ) {
2116
+ return cty .BoolVal (true ), nil
2117
+ },
2118
+ getFileImpl : fileExists ,
2119
+ errCheck : func (err error ) bool {
2120
+ return err == nil || err .Error () != "value is true"
2121
+ },
2122
+ },
2049
2123
{
2050
2124
name : "callback with []string" ,
2051
2125
expr : hclExpr (`["foo", "bar"]` ),
@@ -2074,6 +2148,20 @@ func TestEvaluateExpr_callback(t *testing.T) {
2074
2148
return err == nil || err .Error () != `value is []int{1, 2}`
2075
2149
},
2076
2150
},
2151
+ {
2152
+ name : "callback with []bool" ,
2153
+ expr : hclExpr (`[true, false]` ),
2154
+ target : func (val []bool ) error {
2155
+ return fmt .Errorf ("value is %#v" , val )
2156
+ },
2157
+ serverImpl : func (expr hcl.Expression , opts tflint.EvaluateExprOption ) (cty.Value , error ) {
2158
+ return cty .ListVal ([]cty.Value {cty .BoolVal (true ), cty .BoolVal (false )}), nil
2159
+ },
2160
+ getFileImpl : fileExists ,
2161
+ errCheck : func (err error ) bool {
2162
+ return err == nil || err .Error () != `value is []bool{true, false}`
2163
+ },
2164
+ },
2077
2165
{
2078
2166
name : "callback with map[string]string" ,
2079
2167
expr : hclExpr (`{ "foo" = "bar", "baz" = "qux" }` ),
@@ -2108,6 +2196,23 @@ func TestEvaluateExpr_callback(t *testing.T) {
2108
2196
return err == nil || err .Error () != `foo is 1, baz is 2`
2109
2197
},
2110
2198
},
2199
+ {
2200
+ name : "callback with map[string]bool" ,
2201
+ expr : hclExpr (`{ "foo" = true, "baz" = false }` ),
2202
+ target : func (val map [string ]bool ) error {
2203
+ return fmt .Errorf ("foo is %t, baz is %t" , val ["foo" ], val ["baz" ])
2204
+ },
2205
+ serverImpl : func (expr hcl.Expression , opts tflint.EvaluateExprOption ) (cty.Value , error ) {
2206
+ return cty .MapVal (map [string ]cty.Value {
2207
+ "foo" : cty .BoolVal (true ),
2208
+ "baz" : cty .BoolVal (false ),
2209
+ }), nil
2210
+ },
2211
+ getFileImpl : fileExists ,
2212
+ errCheck : func (err error ) bool {
2213
+ return err == nil || err .Error () != `foo is true, baz is false`
2214
+ },
2215
+ },
2111
2216
{
2112
2217
name : "callback with cty.Value" ,
2113
2218
expr : hclExpr (`var.foo` ),
0 commit comments