diff options
Diffstat (limited to 'ops_test.go')
| -rw-r--r-- | ops_test.go | 109 |
1 files changed, 108 insertions, 1 deletions
diff --git a/ops_test.go b/ops_test.go index 7aabd7a..b7b35ca 100644 --- a/ops_test.go +++ b/ops_test.go @@ -249,6 +249,113 @@ func TestApplyPath(t *testing.T) { cty.NilVal, `Attempt to get attribute from null value: This value is null, so it does not have any attributes.`, }, + + // Marks should be retained during index and getattr ops, even when + // types and values are unknown. This reflects the same behavior when + // using cty to directly call GetAttr and Index methods. + { + cty.DynamicVal.Mark("marked"), + (cty.Path)(nil).GetAttr("foo"), + cty.DynamicVal.Mark("marked"), + ``, + }, + { + cty.ObjectVal(map[string]cty.Value{ + "foo": cty.StringVal("should be marked"), + }).Mark("marked"), + (cty.Path)(nil).GetAttr("foo"), + cty.StringVal("should be marked").Mark("marked"), + ``, + }, + { + cty.UnknownVal(cty.Object(map[string]cty.Type{ + "foo": cty.DynamicPseudoType, + })).Mark("marked"), + (cty.Path)(nil).GetAttr("foo"), + cty.DynamicVal.Mark("marked"), + ``, + }, + { + cty.DynamicVal.Mark("marked"), + (cty.Path)(nil).Index(cty.StringVal("foo")), + cty.DynamicVal.Mark("marked"), + ``, + }, + { + cty.ObjectVal(map[string]cty.Value{ + "foo": cty.StringVal("should be marked"), + }).Mark("marked"), + (cty.Path)(nil).Index(cty.StringVal("foo")), + cty.StringVal("should be marked").Mark("marked"), + ``, + }, + { + cty.UnknownVal(cty.Object(map[string]cty.Type{ + "foo": cty.DynamicPseudoType, + })).Mark("marked"), + (cty.Path)(nil).Index(cty.StringVal("foo")), + cty.DynamicVal.Mark("marked"), + ``, + }, + { + cty.DynamicVal.Mark("marked"), + (cty.Path)(nil).Index(cty.NumberIntVal(0)), + cty.DynamicVal.Mark("marked"), + ``, + }, + { + cty.ListVal([]cty.Value{cty.StringVal("should be marked")}).Mark("marked"), + (cty.Path)(nil).Index(cty.NumberIntVal(0)), + cty.StringVal("should be marked").Mark("marked"), + ``, + }, + { + cty.UnknownVal(cty.List(cty.String)).Mark("marked"), + (cty.Path)(nil).Index(cty.NumberIntVal(0)), + cty.UnknownVal(cty.String).Mark("marked"), + ``, + }, + + { + cty.DynamicVal.Mark("marked"), + (cty.Path)(nil).Index(cty.UnknownVal(cty.String)), + cty.DynamicVal.Mark("marked"), + ``, + }, + { + cty.ObjectVal(map[string]cty.Value{ + "foo": cty.StringVal("should be marked"), + }).Mark("marked"), + (cty.Path)(nil).Index(cty.UnknownVal(cty.String)), + cty.DynamicVal.Mark("marked"), + ``, + }, + { + cty.UnknownVal(cty.Object(map[string]cty.Type{ + "foo": cty.DynamicPseudoType, + })).Mark("marked"), + (cty.Path)(nil).Index(cty.UnknownVal(cty.String)), + cty.DynamicVal.Mark("marked"), + ``, + }, + { + cty.DynamicVal.Mark("marked"), + (cty.Path)(nil).Index(cty.UnknownVal(cty.Number)), + cty.DynamicVal.Mark("marked"), + ``, + }, + { + cty.ListVal([]cty.Value{cty.StringVal("should be marked")}).Mark("marked"), + (cty.Path)(nil).Index(cty.UnknownVal(cty.Number)), + cty.UnknownVal(cty.String).Mark("marked"), + ``, + }, + { + cty.UnknownVal(cty.List(cty.String)).Mark("marked"), + (cty.Path)(nil).Index(cty.UnknownVal(cty.Number)), + cty.UnknownVal(cty.String).Mark("marked"), + ``, + }, } for _, test := range tests { @@ -257,7 +364,7 @@ func TestApplyPath(t *testing.T) { t.Logf("testing ApplyPath\nstart: %#v\npath: %#v", test.Start, test.Path) for _, diag := range diags { - t.Logf(diag.Error()) + t.Log(diag.Error()) } if test.WantErr != "" { |
