commit 7f063b445c365935735e8851204bdd86616bbc69
parent e9702c608f86c9ee6dd97b2b41c1ed584f2432a4
Author: dwrz <dwrz@dwrz.net>
Date: Fri, 28 Jun 2019 08:24:57 +0000
Add bash/error-handling
Diffstat:
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, " ]
+}