mirror of
https://github.com/opentofu/opentofu.git
synced 2025-02-25 18:45:20 -06:00
tfdiags: Restructure tests into subtests
This commit is contained in:
parent
2a6ad820bb
commit
547006d943
@ -1,6 +1,7 @@
|
|||||||
package tfdiags
|
package tfdiags
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"reflect"
|
"reflect"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
@ -33,109 +34,124 @@ baz "b" {
|
|||||||
t.Fatal(parseDiags)
|
t.Fatal(parseDiags)
|
||||||
}
|
}
|
||||||
|
|
||||||
body := f.Body
|
testCases := []struct {
|
||||||
var diags Diagnostics
|
Diag Diagnostic
|
||||||
diags = diags.Append(AttributeValue(
|
ExpectedRange *SourceRange
|
||||||
Error,
|
}{
|
||||||
"foo[0].bar",
|
{
|
||||||
"detail",
|
AttributeValue(
|
||||||
cty.Path{
|
Error,
|
||||||
cty.GetAttrStep{Name: "foo"},
|
"foo[0].bar",
|
||||||
cty.IndexStep{Key: cty.NumberIntVal(0)},
|
"detail",
|
||||||
cty.GetAttrStep{Name: "bar"},
|
cty.Path{
|
||||||
|
cty.GetAttrStep{Name: "foo"},
|
||||||
|
cty.IndexStep{Key: cty.NumberIntVal(0)},
|
||||||
|
cty.GetAttrStep{Name: "bar"},
|
||||||
|
},
|
||||||
|
),
|
||||||
|
&SourceRange{
|
||||||
|
Filename: "test.tf",
|
||||||
|
Start: SourcePos{Line: 3, Column: 9, Byte: 15},
|
||||||
|
End: SourcePos{Line: 3, Column: 13, Byte: 19},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
))
|
{
|
||||||
diags = diags.Append(AttributeValue(
|
AttributeValue(
|
||||||
Error,
|
Error,
|
||||||
"foo[1].bar",
|
"foo[1].bar",
|
||||||
"detail",
|
"detail",
|
||||||
cty.Path{
|
cty.Path{
|
||||||
cty.GetAttrStep{Name: "foo"},
|
cty.GetAttrStep{Name: "foo"},
|
||||||
cty.IndexStep{Key: cty.NumberIntVal(1)},
|
cty.IndexStep{Key: cty.NumberIntVal(1)},
|
||||||
cty.GetAttrStep{Name: "bar"},
|
cty.GetAttrStep{Name: "bar"},
|
||||||
|
},
|
||||||
|
),
|
||||||
|
&SourceRange{
|
||||||
|
Filename: "test.tf",
|
||||||
|
Start: SourcePos{Line: 6, Column: 9, Byte: 36},
|
||||||
|
End: SourcePos{Line: 6, Column: 14, Byte: 41},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
))
|
{
|
||||||
diags = diags.Append(AttributeValue(
|
AttributeValue(
|
||||||
Error,
|
Error,
|
||||||
"bar.bar",
|
"bar.bar",
|
||||||
"detail",
|
"detail",
|
||||||
cty.Path{
|
cty.Path{
|
||||||
cty.GetAttrStep{Name: "bar"},
|
cty.GetAttrStep{Name: "bar"},
|
||||||
cty.GetAttrStep{Name: "bar"},
|
cty.GetAttrStep{Name: "bar"},
|
||||||
|
},
|
||||||
|
),
|
||||||
|
&SourceRange{
|
||||||
|
Filename: "test.tf",
|
||||||
|
Start: SourcePos{Line: 9, Column: 9, Byte: 58},
|
||||||
|
End: SourcePos{Line: 9, Column: 15, Byte: 64},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
))
|
{
|
||||||
diags = diags.Append(AttributeValue(
|
AttributeValue(
|
||||||
Error,
|
Error,
|
||||||
`baz["a"].bar`,
|
`baz["a"].bar`,
|
||||||
"detail",
|
"detail",
|
||||||
cty.Path{
|
cty.Path{
|
||||||
cty.GetAttrStep{Name: "baz"},
|
cty.GetAttrStep{Name: "baz"},
|
||||||
cty.IndexStep{Key: cty.StringVal("a")},
|
cty.IndexStep{Key: cty.StringVal("a")},
|
||||||
cty.GetAttrStep{Name: "bar"},
|
cty.GetAttrStep{Name: "bar"},
|
||||||
|
},
|
||||||
|
),
|
||||||
|
&SourceRange{
|
||||||
|
Filename: "test.tf",
|
||||||
|
Start: SourcePos{Line: 12, Column: 9, Byte: 85},
|
||||||
|
End: SourcePos{Line: 12, Column: 15, Byte: 91},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
))
|
{
|
||||||
diags = diags.Append(AttributeValue(
|
AttributeValue(
|
||||||
Error,
|
Error,
|
||||||
`baz["b"].bar`,
|
`baz["b"].bar`,
|
||||||
"detail",
|
"detail",
|
||||||
cty.Path{
|
cty.Path{
|
||||||
cty.GetAttrStep{Name: "baz"},
|
cty.GetAttrStep{Name: "baz"},
|
||||||
cty.IndexStep{Key: cty.StringVal("b")},
|
cty.IndexStep{Key: cty.StringVal("b")},
|
||||||
cty.GetAttrStep{Name: "bar"},
|
cty.GetAttrStep{Name: "bar"},
|
||||||
|
},
|
||||||
|
),
|
||||||
|
&SourceRange{
|
||||||
|
Filename: "test.tf",
|
||||||
|
Start: SourcePos{Line: 15, Column: 9, Byte: 112},
|
||||||
|
End: SourcePos{Line: 15, Column: 15, Byte: 118},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
))
|
{
|
||||||
// Attribute value with subject already populated should not be disturbed.
|
// Attribute value with subject already populated should not be disturbed.
|
||||||
// (in a real case, this might've been passed through from a deeper function
|
// (in a real case, this might've been passed through from a deeper function
|
||||||
// in the call stack, for example.)
|
// in the call stack, for example.)
|
||||||
diags = diags.Append(&attributeDiagnostic{
|
&attributeDiagnostic{
|
||||||
diagnosticBase: diagnosticBase{
|
diagnosticBase: diagnosticBase{
|
||||||
summary: "preexisting",
|
summary: "preexisting",
|
||||||
detail: "detail",
|
detail: "detail",
|
||||||
},
|
},
|
||||||
subject: &SourceRange{
|
subject: &SourceRange{
|
||||||
Filename: "somewhere_else.tf",
|
Filename: "somewhere_else.tf",
|
||||||
},
|
},
|
||||||
})
|
},
|
||||||
|
&SourceRange{
|
||||||
gotDiags := diags.InConfigBody(body)
|
Filename: "somewhere_else.tf",
|
||||||
|
},
|
||||||
wantRanges := map[string]*SourceRange{
|
|
||||||
`foo[0].bar`: {
|
|
||||||
Filename: "test.tf",
|
|
||||||
Start: SourcePos{Line: 3, Column: 9, Byte: 15},
|
|
||||||
End: SourcePos{Line: 3, Column: 13, Byte: 19},
|
|
||||||
},
|
|
||||||
`foo[1].bar`: {
|
|
||||||
Filename: "test.tf",
|
|
||||||
Start: SourcePos{Line: 6, Column: 9, Byte: 36},
|
|
||||||
End: SourcePos{Line: 6, Column: 14, Byte: 41},
|
|
||||||
},
|
|
||||||
`bar.bar`: {
|
|
||||||
Filename: "test.tf",
|
|
||||||
Start: SourcePos{Line: 9, Column: 9, Byte: 58},
|
|
||||||
End: SourcePos{Line: 9, Column: 15, Byte: 64},
|
|
||||||
},
|
|
||||||
`baz["a"].bar`: {
|
|
||||||
Filename: "test.tf",
|
|
||||||
Start: SourcePos{Line: 12, Column: 9, Byte: 85},
|
|
||||||
End: SourcePos{Line: 12, Column: 15, Byte: 91},
|
|
||||||
},
|
|
||||||
`baz["b"].bar`: {
|
|
||||||
Filename: "test.tf",
|
|
||||||
Start: SourcePos{Line: 15, Column: 9, Byte: 112},
|
|
||||||
End: SourcePos{Line: 15, Column: 15, Byte: 118},
|
|
||||||
},
|
|
||||||
`preexisting`: {
|
|
||||||
Filename: "somewhere_else.tf",
|
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
gotRanges := make(map[string]*SourceRange)
|
|
||||||
for _, diag := range gotDiags {
|
|
||||||
gotRanges[diag.Description().Summary] = diag.Source().Subject
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, problem := range deep.Equal(gotRanges, wantRanges) {
|
for i, tc := range testCases {
|
||||||
t.Error(problem)
|
t.Run(fmt.Sprintf("%d:%s", i, tc.Diag.Description()), func(t *testing.T) {
|
||||||
|
var diags Diagnostics
|
||||||
|
diags = diags.Append(tc.Diag)
|
||||||
|
gotDiags := diags.InConfigBody(f.Body)
|
||||||
|
gotRange := gotDiags[0].Source().Subject
|
||||||
|
|
||||||
|
for _, problem := range deep.Equal(gotRange, tc.ExpectedRange) {
|
||||||
|
t.Error(problem)
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user