@@ -2015,6 +2015,42 @@ func TestEvaluateExpr(t *testing.T) {
20152015 GetFileImpl : fileExists ,
20162016 ErrCheck : neverHappend ,
20172017 },
2018+ {
2019+ Name : "ephemeral" ,
2020+ Expr : hclExpr (`var.foo` ),
2021+ TargetType : reflect .TypeOf ("" ),
2022+ ServerImpl : func (expr hcl.Expression , opts tflint.EvaluateExprOption ) (cty.Value , error ) {
2023+ return evalExpr (expr , & hcl.EvalContext {
2024+ Variables : map [string ]cty.Value {
2025+ "var" : cty .MapVal (map [string ]cty.Value {
2026+ "foo" : cty .StringVal ("bar" ).Mark (marks .Ephemeral ),
2027+ }),
2028+ },
2029+ })
2030+ },
2031+ Want : "" ,
2032+ GetFileImpl : fileExists ,
2033+ ErrCheck : func (err error ) bool {
2034+ return ! errors .Is (err , tflint .ErrEphemeral )
2035+ },
2036+ },
2037+ {
2038+ Name : "ephemeral as cty.Value" ,
2039+ Expr : hclExpr (`var.foo` ),
2040+ TargetType : reflect .TypeOf (cty.Value {}),
2041+ ServerImpl : func (expr hcl.Expression , opts tflint.EvaluateExprOption ) (cty.Value , error ) {
2042+ return evalExpr (expr , & hcl.EvalContext {
2043+ Variables : map [string ]cty.Value {
2044+ "var" : cty .MapVal (map [string ]cty.Value {
2045+ "foo" : cty .StringVal ("bar" ).Mark (marks .Ephemeral ),
2046+ }),
2047+ },
2048+ })
2049+ },
2050+ Want : cty .StringVal ("bar" ).Mark (marks .Ephemeral ),
2051+ GetFileImpl : fileExists ,
2052+ ErrCheck : neverHappend ,
2053+ },
20182054 }
20192055
20202056 for _ , test := range tests {
@@ -2334,6 +2370,32 @@ func TestEvaluateExpr_callback(t *testing.T) {
23342370 return err == nil || err .Error () != `value is cty.StringVal("foo").Mark(marks.Sensitive)`
23352371 },
23362372 },
2373+ {
2374+ name : "callback with ephemeral value as Go value" ,
2375+ expr : hclExpr (`var.foo` ),
2376+ target : func (val string ) error {
2377+ return fmt .Errorf ("value is %s" , val )
2378+ },
2379+ serverImpl : func (expr hcl.Expression , opts tflint.EvaluateExprOption ) (cty.Value , error ) {
2380+ return cty .StringVal ("foo" ).Mark (marks .Ephemeral ), nil
2381+ },
2382+ getFileImpl : fileExists ,
2383+ errCheck : neverHappend ,
2384+ },
2385+ {
2386+ name : "callback with ephemeral value as cty.Value" ,
2387+ expr : hclExpr (`var.foo` ),
2388+ target : func (val cty.Value ) error {
2389+ return fmt .Errorf ("value is %s" , val .GoString ())
2390+ },
2391+ serverImpl : func (expr hcl.Expression , opts tflint.EvaluateExprOption ) (cty.Value , error ) {
2392+ return cty .StringVal ("foo" ).Mark (marks .Ephemeral ), nil
2393+ },
2394+ getFileImpl : fileExists ,
2395+ errCheck : func (err error ) bool {
2396+ return err == nil || err .Error () != `value is cty.StringVal("foo").Mark(marks.Ephemeral)`
2397+ },
2398+ },
23372399 }
23382400
23392401 for _ , test := range tests {
0 commit comments