Gromacs
2024.3
|
#include <testutils/include/testutils/cmdlinetest.h>
Helper class for tests that need to construct command lines.
This class helps in writing tests for command-line handling. The constructor method takes an array of const char pointers, specifying the command-line arguments, each as one array element. It is also possible to construct the command line by adding individual arguments with append() and addOption(). The argc() and argv() methods can then be used to obtain argc
and argv
(non-const char pointers) arrays for passing into methods that expect these.
Note that although the interface allows passing the argc and argv pointers to methods that modify them (typically as f
(&argc(), argv())), currently the CommandLine object is not in a consistent state internally if the parameters are actually modified. Reading the command line is possible afterwards, but modification is not.
If you need to construct command lines that refer to files on the file system, see CommandLineTestHelper and CommandLineTestBase for additional convenience utilities.
All constructors and methods that modify this class may throw an std::bad_alloc. Const methods and accessors do not throw.
Public Member Functions | |
CommandLine () | |
Initializes an empty command-line object. | |
CommandLine (const ArrayRef< const char *const > &cmdline) | |
Initializes a command-line object from an array. More... | |
CommandLine (const ArrayRef< const std::string > &cmdline) | |
Initializes a command-line object from an array. More... | |
CommandLine (const CommandLine &other) | |
Creates a deep copy of a command-line object. | |
void | initFromArray (const ArrayRef< const char *const > &cmdline) |
Initializes a command-line object in-place from an array. More... | |
void | append (const char *arg) |
Appends an argument to the command line. More... | |
void | append (const std::string &arg) |
Convenience overload taking a std::string. | |
void | addOption (const char *name) |
Adds an option to the command line, typically a boolean. More... | |
void | addOption (const char *name, const char *value) |
Adds an option-value pair to the command line. More... | |
void | addOption (const char *name, const std::string &value) |
Convenience overload taking a std::string. | |
void | addOption (const char *name, int value) |
Overload taking an int. | |
void | addOption (const char *name, double value) |
Overload taking a double. | |
void | merge (const CommandLine &args) |
Appends all arguments from args to the command line. More... | |
int & | argc () |
Returns argc for passing into C-style command-line handling. | |
char ** | argv () |
Returns argv for passing into C-style command-line handling. | |
int | argc () const |
Returns argc for passing into C-style command-line handling. | |
const char *const * | argv () const |
Returns argv for passing into C-style command-line handling. | |
const char * | arg (int i) const |
Returns a single argument. | |
std::string | toString () const |
Returns the command line formatted as a single string. | |
bool | contains (std::string_view name) const |
Whether the command line contains the given option. | |
std::optional< std::string_view > | argumentOf (std::string_view name) const |
The value of the argument following the given option, if found. | |
gmx::test::CommandLine::CommandLine | ( | const ArrayRef< const char *const > & | cmdline | ) |
Initializes a command-line object from an array.
[in] | cmdline | Array of command-line arguments. |
cmdline
should include the binary name as the first element if that is desired in the output.
This constructor is not explicit to make it possible to create a CommandLine object directly from a C array.
gmx::test::CommandLine::CommandLine | ( | const ArrayRef< const std::string > & | cmdline | ) |
Initializes a command-line object from an array.
[in] | cmdline | Array of command-line arguments. |
cmdline
should include the binary name as the first element if that is desired in the output.
This constructor is not explicit to make it possible to create a CommandLine object directly from a C array.
void gmx::test::CommandLine::addOption | ( | const char * | name | ) |
Adds an option to the command line, typically a boolean.
[in] | name | Name of the option to append, which should start with "-". |
void gmx::test::CommandLine::addOption | ( | const char * | name, |
const char * | value | ||
) |
Adds an option-value pair to the command line.
[in] | name | Name of the option to append, which should start with "-". |
[in] | value | Value of the argument to append. |
void gmx::test::CommandLine::append | ( | const char * | arg | ) |
Appends an argument to the command line.
[in] | arg | Argument to append. |
Strong exception safety.
void gmx::test::CommandLine::initFromArray | ( | const ArrayRef< const char *const > & | cmdline | ) |
Initializes a command-line object in-place from an array.
[in] | cmdline | Array of command-line arguments. |
cmdline
should include the binary name as the first element if that is desired in the output.
This function does the same as the constructor that takes a ArrayRef. Any earlier contents of the object are discarded.
Strong exception safety.
void gmx::test::CommandLine::merge | ( | const CommandLine & | args | ) |
Appends all arguments from args
to the command line.
If the first argument of args
does not start with a -
, it is skipped, assuming it is a gmx module name and thus useless.