pure-bash-bible/CONTRIBUTING.md

76 lines
1.7 KiB
Markdown
Raw Permalink Normal View History

2018-06-15 02:46:54 +02:00
# Writing the Bible
<!-- vim-markdown-toc GFM -->
* [Adding Code to the Bible.](#adding-code-to-the-bible)
* [Special meanings for code blocks.](#special-meanings-for-code-blocks)
* [Writing tests](#writing-tests)
2020-09-23 12:58:11 +02:00
* [Running tests](#running-tests)
2018-06-15 02:46:54 +02:00
<!-- vim-markdown-toc -->
## Adding Code to the Bible.
- The code must use only `bash` built-ins.
- A fallback to an external program is allowed if the code doesn't
always work.
- Example Fallback: `${HOSTNAME:-$(hostname)}`
- If possible, wrap the code in a function.
- This allows tests to be written.
- It also allows `shellcheck` to properly lint it.
- An added bonus is showing a working use-case.
- Write some examples.
- Show some input and the modified output.
## Special meanings for code blocks.
Use `sh` for functions that should be linted and unit tested.
```sh
# Shellcheck will lint this and the test script will source this.
func() {
# Usage: func "arg"
:
}
```
Use `shell` for code that should be ignored.
```shell
# Shorter file creation syntax.
:>file
```
## Writing tests
The test file is viewable here: https://github.com/dylanaraps/pure-bash-bible/blob/master/test.sh
Example test:
```sh
test_upper() {
result="$(upper "HeLlO")"
assert_equals "$result" "HELLO"
}
```
Steps:
1. Write the test.
- Naming is `test_func_name`
2018-06-15 03:48:01 +02:00
- Store the function output in a variable (`$result` or `${result[@]}`).
2018-06-15 02:46:54 +02:00
- Use `assert_equals` to test equality between the variable and the
expected output.
2018-06-15 03:48:01 +02:00
2. The test script will automatically execute it. :+1:
2018-06-15 02:46:54 +02:00
2020-09-23 12:58:11 +02:00
## Running tests
2018-06-15 02:46:54 +02:00
Running `test.sh` also runs `shellcheck` on the code.
```sh
cd pure-bash-bible
./test.sh
```