84 lines
1.6 KiB
Go
84 lines
1.6 KiB
Go
|
package arguments
|
||
|
|
||
|
import (
|
||
|
"testing"
|
||
|
|
||
|
"github.com/apparentlymart/go-shquot/shquot"
|
||
|
"github.com/google/go-cmp/cmp"
|
||
|
"github.com/hashicorp/terraform/tfdiags"
|
||
|
)
|
||
|
|
||
|
func TestParseTest(t *testing.T) {
|
||
|
tests := []struct {
|
||
|
Input []string
|
||
|
Want Test
|
||
|
WantError string
|
||
|
}{
|
||
|
{
|
||
|
nil,
|
||
|
Test{
|
||
|
Output: TestOutput{
|
||
|
JUnitXMLFile: "",
|
||
|
},
|
||
|
},
|
||
|
``,
|
||
|
},
|
||
|
{
|
||
|
[]string{"-invalid"},
|
||
|
Test{
|
||
|
Output: TestOutput{
|
||
|
JUnitXMLFile: "",
|
||
|
},
|
||
|
},
|
||
|
`flag provided but not defined: -invalid`,
|
||
|
},
|
||
|
{
|
||
|
[]string{"-junit-xml=result.xml"},
|
||
|
Test{
|
||
|
Output: TestOutput{
|
||
|
JUnitXMLFile: "result.xml",
|
||
|
},
|
||
|
},
|
||
|
``,
|
||
|
},
|
||
|
{
|
||
|
[]string{"baz"},
|
||
|
Test{
|
||
|
Output: TestOutput{
|
||
|
JUnitXMLFile: "",
|
||
|
},
|
||
|
},
|
||
|
`Invalid command arguments`,
|
||
|
},
|
||
|
}
|
||
|
|
||
|
baseCmdline := []string{"terraform", "test"}
|
||
|
for _, test := range tests {
|
||
|
name := shquot.POSIXShell(append(baseCmdline, test.Input...))
|
||
|
t.Run(name, func(t *testing.T) {
|
||
|
t.Log(name)
|
||
|
got, diags := ParseTest(test.Input)
|
||
|
|
||
|
if test.WantError != "" {
|
||
|
if len(diags) != 1 {
|
||
|
t.Fatalf("got %d diagnostics; want exactly 1\n%s", len(diags), diags.Err().Error())
|
||
|
}
|
||
|
if diags[0].Severity() != tfdiags.Error {
|
||
|
t.Fatalf("got a warning; want an error\n%s", diags.Err().Error())
|
||
|
}
|
||
|
if desc := diags[0].Description(); desc.Summary != test.WantError {
|
||
|
t.Fatalf("wrong error\ngot: %s\nwant: %s", desc.Summary, test.WantError)
|
||
|
}
|
||
|
} else {
|
||
|
if len(diags) != 0 {
|
||
|
t.Fatalf("got %d diagnostics; want none\n%s", len(diags), diags.Err().Error())
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if diff := cmp.Diff(test.Want, got); diff != "" {
|
||
|
t.Errorf("wrong result\n%s", diff)
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
}
|