diff --git a/README.md b/README.md index 824017b3..acf51332 100644 --- a/README.md +++ b/README.md @@ -295,6 +295,8 @@ process. For more details about how Bats evaluates test files, see [Bats Evaluation Process][bats-eval] on the wiki. +For sample test files, see [examples](/docs/examples). + [bats-eval]: https://github.com/bats-core/bats-core/wiki/Bats-Evaluation-Process ### `run`: Test other commands diff --git a/docs/examples/README.md b/docs/examples/README.md new file mode 100644 index 00000000..c0400999 --- /dev/null +++ b/docs/examples/README.md @@ -0,0 +1,6 @@ +# Examples + +This directory contains example .bats files. +See the [bats-core wiki][examples] for more details. + +[examples]: (/bats-core/bats-core/wiki/Examples) diff --git a/docs/examples/package-tarball b/docs/examples/package-tarball new file mode 100644 index 00000000..b51cffd1 --- /dev/null +++ b/docs/examples/package-tarball @@ -0,0 +1,16 @@ +#!/usr/bin/env bash + +# "unofficial" bash strict mode +# See: http://redsymbol.net/articles/unofficial-bash-strict-mode +set -o errexit # Exit when simple command fails 'set -e' +set -o errtrace # Exit on error inside any functions or subshells. +set -o nounset # Trigger error when expanding unset variables 'set -u' +set -o pipefail # Do not hide errors within pipes 'set -o pipefail' +set -o xtrace # Display expanded command and arguments 'set -x' +IFS=$'\n\t' # Split words on \n\t rather than spaces + +main() { + tar -czf "$dst_tarball" -C "$src_dir" . +} + +main "$@" diff --git a/docs/examples/package-tarball.bats b/docs/examples/package-tarball.bats new file mode 100755 index 00000000..1a9b5ff9 --- /dev/null +++ b/docs/examples/package-tarball.bats @@ -0,0 +1,47 @@ +#!/usr/bin/env bats + +setup() { + export dst_tarball="${BATS_TMPDIR}/dst.tar.gz" + export src_dir="${BATS_TMPDIR}/src_dir" + + rm -rf "${dst_tarball}" "${src_dir}" + mkdir "${src_dir}" + touch "${src_dir}"/{a,b,c} +} + +main() { + bash "${BATS_TEST_DIRNAME}"/package-tarball +} + +@test 'fail when \$src_dir and \$dst_tarball are unbound' { + unset src_dir dst_tarball + + run main + [ "${status}" -ne 0 ] +} + +@test 'fail when \$src_dir is a non-existent directory' { + src_dir='not-a-dir' + + run main + [ "${status}" -ne 0 ] +} + +@test 'pass when \$src_dir directory is empty' { + rm -rf "${src_dir:?}/*" + + run main + echo "$output" + [ "${status}" -eq 0 ] +} + +@test 'files in \$src_dir are added to tar archive' { + run main + [ "${status}" -eq 0 ] + + run tar tf "$dst_tarball" + [ "${status}" -eq 0 ] + [[ "${output}" =~ a ]] + [[ "${output}" =~ b ]] + [[ "${output}" =~ c ]] +}