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
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"reflect"
|
||||
"testing"
|
||||
|
||||
@ -33,9 +34,12 @@ baz "b" {
|
||||
t.Fatal(parseDiags)
|
||||
}
|
||||
|
||||
body := f.Body
|
||||
var diags Diagnostics
|
||||
diags = diags.Append(AttributeValue(
|
||||
testCases := []struct {
|
||||
Diag Diagnostic
|
||||
ExpectedRange *SourceRange
|
||||
}{
|
||||
{
|
||||
AttributeValue(
|
||||
Error,
|
||||
"foo[0].bar",
|
||||
"detail",
|
||||
@ -44,8 +48,15 @@ baz "b" {
|
||||
cty.IndexStep{Key: cty.NumberIntVal(0)},
|
||||
cty.GetAttrStep{Name: "bar"},
|
||||
},
|
||||
))
|
||||
diags = diags.Append(AttributeValue(
|
||||
),
|
||||
&SourceRange{
|
||||
Filename: "test.tf",
|
||||
Start: SourcePos{Line: 3, Column: 9, Byte: 15},
|
||||
End: SourcePos{Line: 3, Column: 13, Byte: 19},
|
||||
},
|
||||
},
|
||||
{
|
||||
AttributeValue(
|
||||
Error,
|
||||
"foo[1].bar",
|
||||
"detail",
|
||||
@ -54,8 +65,15 @@ baz "b" {
|
||||
cty.IndexStep{Key: cty.NumberIntVal(1)},
|
||||
cty.GetAttrStep{Name: "bar"},
|
||||
},
|
||||
))
|
||||
diags = diags.Append(AttributeValue(
|
||||
),
|
||||
&SourceRange{
|
||||
Filename: "test.tf",
|
||||
Start: SourcePos{Line: 6, Column: 9, Byte: 36},
|
||||
End: SourcePos{Line: 6, Column: 14, Byte: 41},
|
||||
},
|
||||
},
|
||||
{
|
||||
AttributeValue(
|
||||
Error,
|
||||
"bar.bar",
|
||||
"detail",
|
||||
@ -63,8 +81,15 @@ baz "b" {
|
||||
cty.GetAttrStep{Name: "bar"},
|
||||
cty.GetAttrStep{Name: "bar"},
|
||||
},
|
||||
))
|
||||
diags = diags.Append(AttributeValue(
|
||||
),
|
||||
&SourceRange{
|
||||
Filename: "test.tf",
|
||||
Start: SourcePos{Line: 9, Column: 9, Byte: 58},
|
||||
End: SourcePos{Line: 9, Column: 15, Byte: 64},
|
||||
},
|
||||
},
|
||||
{
|
||||
AttributeValue(
|
||||
Error,
|
||||
`baz["a"].bar`,
|
||||
"detail",
|
||||
@ -73,8 +98,15 @@ baz "b" {
|
||||
cty.IndexStep{Key: cty.StringVal("a")},
|
||||
cty.GetAttrStep{Name: "bar"},
|
||||
},
|
||||
))
|
||||
diags = diags.Append(AttributeValue(
|
||||
),
|
||||
&SourceRange{
|
||||
Filename: "test.tf",
|
||||
Start: SourcePos{Line: 12, Column: 9, Byte: 85},
|
||||
End: SourcePos{Line: 12, Column: 15, Byte: 91},
|
||||
},
|
||||
},
|
||||
{
|
||||
AttributeValue(
|
||||
Error,
|
||||
`baz["b"].bar`,
|
||||
"detail",
|
||||
@ -83,11 +115,18 @@ baz "b" {
|
||||
cty.IndexStep{Key: cty.StringVal("b")},
|
||||
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.
|
||||
// (in a real case, this might've been passed through from a deeper function
|
||||
// in the call stack, for example.)
|
||||
diags = diags.Append(&attributeDiagnostic{
|
||||
&attributeDiagnostic{
|
||||
diagnosticBase: diagnosticBase{
|
||||
summary: "preexisting",
|
||||
detail: "detail",
|
||||
@ -95,48 +134,25 @@ baz "b" {
|
||||
subject: &SourceRange{
|
||||
Filename: "somewhere_else.tf",
|
||||
},
|
||||
})
|
||||
|
||||
gotDiags := diags.InConfigBody(body)
|
||||
|
||||
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`: {
|
||||
&SourceRange{
|
||||
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.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)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetAttribute(t *testing.T) {
|
||||
|
Loading…
Reference in New Issue
Block a user