From 3e906a8be133d982097b829563710b44bab60579 Mon Sep 17 00:00:00 2001 From: Jim Infield Date: Fri, 30 Jul 2021 15:29:17 -0500 Subject: [PATCH] initial commit --- .exercism/metadata.json | 1 + README.md | 53 +++++++++++++++++++++++++++++++++++++++++ error_handling.sh | 5 ++++ error_handling_test.sh | 43 +++++++++++++++++++++++++++++++++ 4 files changed, 102 insertions(+) create mode 100644 .exercism/metadata.json create mode 100644 README.md create mode 100644 error_handling.sh create mode 100644 error_handling_test.sh diff --git a/.exercism/metadata.json b/.exercism/metadata.json new file mode 100644 index 0000000..8965286 --- /dev/null +++ b/.exercism/metadata.json @@ -0,0 +1 @@ +{"track":"bash","exercise":"error-handling","id":"1e691c64aa904034a0999b63b8f58bd8","url":"https://exercism.io/my/solutions/1e691c64aa904034a0999b63b8f58bd8","handle":"jinfield","is_requester":true,"auto_approve":false} \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..3c3e8ce --- /dev/null +++ b/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/error_handling.sh b/error_handling.sh new file mode 100644 index 0000000..dc9b63d --- /dev/null +++ b/error_handling.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +[[ $# = 0 || ( $# > 1 && $2 != "and" ) ]] && echo "Usage: $0 " && exit 1 + +echo "Hello, $*" diff --git a/error_handling_test.sh b/error_handling_test.sh new file mode 100644 index 0000000..867769a --- /dev/null +++ b/error_handling_test.sh @@ -0,0 +1,43 @@ +#!/usr/bin/env bash + +# local version: 0.0.1 + +@test "correct arguments" { + #[[ $BATS_RUN_SKIPPED == "true" ]] || skip + run bash error_handling.sh Alice + + (( status == 0 )) + [[ $output == "Hello, Alice" ]] +} + +@test "one long argument" { + [[ $BATS_RUN_SKIPPED == "true" ]] || skip + run bash error_handling.sh "Alice and Bob" + + (( status == 0 )) + [[ $output == "Hello, Alice and Bob" ]] +} + +@test "incorrect arguments" { + [[ $BATS_RUN_SKIPPED == "true" ]] || skip + run bash error_handling.sh Alice Bob + + (( status == 1 )) + [[ $output == "Usage: error_handling.sh " ]] +} + +@test "print usage banner with no value given" { + [[ $BATS_RUN_SKIPPED == "true" ]] || skip + run bash error_handling.sh + + (( status == 1 )) + [[ $output == "Usage: error_handling.sh " ]] +} + +@test "empty argument" { + [[ $BATS_RUN_SKIPPED == "true" ]] || skip + run bash error_handling.sh "" + + (( status == 0 )) + [[ $output == "Hello, " ]] +}