a golang utility package for testing command line interfaces https://git.lenzplace.org/lenzj/testcli
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
Jason T. Lenz e3fe0f47a1
Major refactoring to use go structs rather than files / folders
2 years ago
cmd Major refactoring to use go structs rather than files / folders 2 years ago
.build.yml Major refactoring to use go structs rather than files / folders 2 years ago
.gitignore Initial release 3 years ago
LICENSE Major refactoring to use go structs rather than files / folders 2 years ago
README.md Major refactoring to use go structs rather than files / folders 2 years ago
go.mod Major refactoring to use go structs rather than files / folders 2 years ago
testcli.go Major refactoring to use go structs rather than files / folders 2 years ago

README.md

testcli

Package testcli is a golang helper utility for testing command line applications (CLI) using the standard go testing framework.

Tests are created by populating a T structure and then passing it to the Run function. The T structure must contain at a minimum the command to be executed. The remaining items within the T structure are optional and have reasonable defaults in typical use cases.

For example within a "foo_test.go" file:

func TestFooVersion(t *testing.T) {
    clt := testcli.T{
        Cmd: exec.Cmd{
            Path: "./foo",
            Args: []string{"foo", "-v"},
        },
        TStdout: `^foo 1.7.2\n$`,
    }
    testcli.Run(t, clt)
}

func TestFooBadOption(t *testing.T) {
    clt := testcli.T{
        Cmd: exec.Cmd{
            Path: "./foo",
            Args: []string{"foo", "-z"},
        },
        TStderr: `(?m)^flag provided but not defined: -z$.*$`,
        TExit:   2,
    }
    testcli.Run(t, clt)
}

A full example demonstrating additional ways to use testcli is contained within the "cmd" folder of this package.

Functions

func Run(t *testing.T, clt T)
    Run executes a single command line test.

Types

type FT struct {
        Path     string // Path to file
        TContent string // Regex to check against file contents
}
    FT defines a file path and regex to check against the file contents.

type T struct {
        Cmd     exec.Cmd // The command line details to execute
        TStdout string   // Regex to check against stdout
        TStderr string   // Regex to check against stderr
        TFiles  []FT     // An optional array of output files to check
        TExit   int      // The expected exit code
}
    T defines an individual command line test case.

Running the full package tests

$ cd cmd
$ make check

Contributing

If you have a bugfix, update, issue or feature enhancement the best way to reach me is by following the instructions in the link below. Thank you!

https://blog.lenzplace.org/contact

Versioning

I follow the SemVer strategy for versioning. The latest version is listed in the releases section.

License

This project is licensed under a BSD two clause license - see the LICENSE file for details.