https://github.com/odb/shunt
Simple Shell Unit Testing Framework
https://github.com/odb/shunt
Last synced: about 1 year ago
JSON representation
Simple Shell Unit Testing Framework
- Host: GitHub
- URL: https://github.com/odb/shunt
- Owner: odb
- License: mit
- Created: 2013-10-06T19:08:51.000Z (over 12 years ago)
- Default Branch: master
- Last Pushed: 2015-11-14T00:49:38.000Z (over 10 years ago)
- Last Synced: 2025-04-01T14:12:57.987Z (about 1 year ago)
- Language: Shell
- Homepage:
- Size: 1.07 MB
- Stars: 21
- Watchers: 3
- Forks: 2
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# [shunt](https://github.com/odb/shunt)
##### Simple Shell Testing Pseudo-Framework
[](https://raw.githubusercontent.com/odb/shunt/master/screenshots/shunt.png)
### What!? Why?
For a recent project, I wanted a very simple way to run some simple tests against my script output.
I know there are a number of these kinds of things out there, but most of the ones I looked at were more complex then I wanted.
To start, I created a basic shell script to test my scripts, but as I began to add to it, and want more from it, I decided to take
a few minutes and build a pseudo-framework out of it.
I call it a "pseudo-framework" because it's really more of a helper, which gives you a handfull of assertions to run against
bash commands. Well, that and it doesn't really have a name.
### How?
##### Install
Note, in shunt `latest` means latest stable version.
curl -L https://raw.githubusercontent.com/odb/shunt/master/install.sh | bash
# installs latest to ~/.bin/shunt
curl -L https://raw.githubusercontent.com/odb/shunt/master/install.sh | bash -s master
# installs master to ~/.bin/shunt
curl -L https://raw.githubusercontent.com/odb/shunt/master/install.sh | bash -s global
# installs latest to /usr/local/bin/shunt
curl -L https://raw.githubusercontent.com/odb/shunt/master/install.sh | bash -s master local
# installs master to ./shunt.sh
##### Basic Usage
A basic test file looks like this:
# file: tests.sh
function run_tests {
####################################################
# Tests go here.
####################################################
COMMAND="/path/to/your/command"
assert_grep "$COMMAND" "Usage" \
"deplay usage without params"
assert_grep "$COMMAND --help" "Usage" \
"deplay usage with help"
assert_grep "$COMMAND --arg2 foobar" "Usage" \
"deplay usage without required arg"
refute_grep "$COMMAND --arg1 foobar" "Usage" \
"work with required arg"
####################################################
}
Run like this:
$ ./shunt.sh ./tests.sh
Usage:
``` bash
Usage: ./shunt.sh
Options:
--plain Disable colors and icons.
--quiet Do not print error messages.
--verbose Display success messages.
--version Display version information.
--help Display this message.
```
> See `test/testOne.sh` for more examples.
##### Before / After Hooks
In addition to assertion, shunt also supports before and after hooks. Simply define a `before` or `after` function.
function before {
./some_setup_script.sh
echo "Running before shunt assertions.
}
function after {
./some_cleanup_script.sh
echo "Running after shunt assertions.
}
##### Assertions
Here's a full list of assertions at the time of this writing:
* `assert "CMD" "FAIL MESSAGE"`
* `refute "CMD" "FAIL MESSAGE"`
* `assert_equal "FIRST" "SECOND" "FAIL MESSAGE"`
* `refute_equal "FIRST" "SECOND" "FAIL MESSAGE"`
* `assert_numeq "FIRST" "SECOND" "FAIL MESSAGE"`
* `refute_numeq "FIRST" "SECOND" "FAIL MESSAGE"`
* `assert_grep "CMD" "GREP" "FAIL MESSAGE"`
* `refute_grep "CMD" "GREP" "FAIL MESSAGE"`
* `assert_file "FILE" "FAIL MESSAGE"`
* `refute_file "FILE" "FAIL MESSAGE"`
* `assert_dir "DIR" "FAIL MESSAGE"`
* `refute_dir "DIR" "FAIL MESSAGE"`
### Development
* To run tests use: `make test`
### Additional Screenshots
[](https://raw.githubusercontent.com/odb/shunt/master/screenshots/shunt_verbose.png)
[](https://raw.githubusercontent.com/odb/shunt/master/screenshots/shunt_quiet.png)
[](https://raw.githubusercontent.com/odb/shunt/master/screenshots/shunt_plain.png)