| package arguments |
| |
| import ( |
| "flag" |
| "io/ioutil" |
| |
| "github.com/hashicorp/terraform/internal/tfdiags" |
| ) |
| |
| // Test represents the command line arguments for the "terraform test" command. |
| type Test struct { |
| Output TestOutput |
| } |
| |
| // TestOutput represents a subset of the arguments for "terraform test" |
| // related to how it presents its results. That is, it's the arguments that |
| // are relevant to the command's view rather than its controller. |
| type TestOutput struct { |
| // If not an empty string, JUnitXMLFile gives a filename where JUnit-style |
| // XML test result output should be written, in addition to the normal |
| // output printed to the standard output and error streams. |
| // (The typical usage pattern for tools that can consume this file format |
| // is to configure them to look for a separate test result file on disk |
| // after running the tests.) |
| JUnitXMLFile string |
| } |
| |
| // ParseTest interprets a slice of raw command line arguments into a |
| // Test value. |
| func ParseTest(args []string) (Test, tfdiags.Diagnostics) { |
| var ret Test |
| var diags tfdiags.Diagnostics |
| |
| // NOTE: ParseTest should still return at least a partial |
| // Test even on error, containing enough information for the |
| // command to report error diagnostics in a suitable way. |
| |
| f := flag.NewFlagSet("test", flag.ContinueOnError) |
| f.SetOutput(ioutil.Discard) |
| f.Usage = func() {} |
| f.StringVar(&ret.Output.JUnitXMLFile, "junit-xml", "", "Write a JUnit XML file describing the results") |
| |
| err := f.Parse(args) |
| if err != nil { |
| diags = diags.Append(err) |
| return ret, diags |
| } |
| |
| // We'll now discard all of the arguments that the flag package handled, |
| // and focus only on the positional arguments for the rest of the function. |
| args = f.Args() |
| |
| if len(args) != 0 { |
| diags = diags.Append(tfdiags.Sourceless( |
| tfdiags.Error, |
| "Invalid command arguments", |
| "The test command doesn't expect any positional command-line arguments.", |
| )) |
| return ret, diags |
| } |
| |
| return ret, diags |
| } |