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)
|
|
}
|
|
})
|
|
}
|
|
}
|