exercism

Exercism solutions.
Log | Files | Refs

commit 7f063b445c365935735e8851204bdd86616bbc69
parent e9702c608f86c9ee6dd97b2b41c1ed584f2432a4
Author: dwrz <dwrz@dwrz.net>
Date:   Fri, 28 Jun 2019 08:24:57 +0000

Add bash/error-handling

Diffstat:
Abash/error-handling/README.md | 53+++++++++++++++++++++++++++++++++++++++++++++++++++++
Abash/error-handling/error_handling.sh | 12++++++++++++
Abash/error-handling/error_handling_test.sh | 36++++++++++++++++++++++++++++++++++++
3 files changed, 101 insertions(+), 0 deletions(-)

diff --git a/bash/error-handling/README.md b/bash/error-handling/README.md @@ -0,0 +1,53 @@ +# Error Handling + +Implement various kinds of error handling and resource management. + +An important point of programming is how to handle errors and close +resources even if errors occur. + +This exercise requires you to handle various errors. Because error handling +is rather programming language specific you'll have to refer to the tests +for your track to see what's exactly required. + + +Run the tests with: + +```bash +bats error_handling_test.sh +``` + +After the first test(s) pass, continue by commenting out or removing the +`[[ $BATS_RUN_SKIPPED == true ]] || skip` +annotations prepending other tests. + +To run all tests, including the ones with `skip` annotations, run: + +```bash +BATS_RUN_SKIPPED=true bats error_handling_test.sh +``` + + + +## External utilities +`Bash` is a language to write "scripts" -- programs that can call +external tools, such as +[`sed`](https://www.gnu.org/software/sed/), +[`awk`](https://www.gnu.org/software/gawk/), +[`date`](https://www.gnu.org/software/coreutils/manual/html_node/date-invocation.html) +and even programs written in other programming languages, +like [`Python`](https://www.python.org/). +This track does not restrict the usage of these utilities, and as long +as your solution is portable between systems and does not require +installation of third party applications, feel free to use them to solve +the exercise. + +For an extra challenge, if you would like to have a better understanding +of the language, try to re-implement the solution in pure `Bash`, +without using any external tools. Note that there are some types of +problems that bash cannot solve, such as performing floating point +arithmetic and manipulating dates: for those, you must call out to an +external tool. + +## Submitting Incomplete Solutions +It's possible to submit an incomplete solution so you can see how others +have completed the exercise. diff --git a/bash/error-handling/error_handling.sh b/bash/error-handling/error_handling.sh @@ -0,0 +1,12 @@ +#!/usr/bin/env bash + +main() { + if [ "$#" -ne 1 ]; then + echo "Usage: ./error_handling <greetee>" + exit 1 + fi + + echo "Hello, $1" +} + +main "$@" diff --git a/bash/error-handling/error_handling_test.sh b/bash/error-handling/error_handling_test.sh @@ -0,0 +1,36 @@ +#!/usr/bin/env bash + +@test "correct arguments" { + run bash error_handling.sh Alice + + [ "$status" -eq 0 ] + [ "$output" = "Hello, Alice" ] +} + +@test "one long argument" { + run bash error_handling.sh "Alice and Bob" + + [ "$status" -eq 0 ] + [ "$output" = "Hello, Alice and Bob" ] +} + +@test "incorrect arguments" { + run bash error_handling.sh Alice Bob + + [ "$status" -eq 1 ] + [ "$output" = "Usage: ./error_handling <greetee>" ] +} + +@test "print usage banner with no value given" { + run bash error_handling.sh + + [ "$status" -eq 1 ] + [ "$output" = "Usage: ./error_handling <greetee>" ] +} + +@test "empty argument" { + run bash error_handling.sh "" + + [ "$status" -eq 0 ] + [ "$output" = "Hello, " ] +}