tfdiags: Restructure tests into subtests

This commit is contained in:
Radek Simko 2018-11-14 11:45:04 +00:00
parent 2a6ad820bb
commit 547006d943
No known key found for this signature in database
GPG Key ID: 1F1C84FE689A88D7

View File

@ -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) {