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