Permalink
Browse files

Merge pull request #94 from inkarkat/fix-shorthelp-custom-config

Fix shorthelp custom config
  • Loading branch information...
2 parents da68336 + 8ff7910 commit e1d6b91fa3016580e91647573c3dec47f23a39ac @ginatrapani ginatrapani committed Aug 30, 2012
Showing with 93 additions and 4 deletions.
  1. +79 −0 tests/t2120-shorthelp.sh
  2. +14 −4 todo.sh
View
@@ -0,0 +1,79 @@
+#!/bin/bash
+#
+
+test_description='shorthelp functionality
+
+This test covers the output of the -h option and the shorthelp action.
+'
+. ./actions-test-lib.sh
+. ./test-lib.sh
+
+# Note: To avoid having to adapt the test whenever the actions change, only
+# check for the section headers.
+test_todo_session '-h output' <<EOF
+>>> todo.sh -h | sed '/^ [A-Z]/!d'
+ Usage: todo.sh [-fhpantvV] [-d todo_config] action [task_number] [task_description]
+ Actions:
+ Actions can be added and overridden using scripts in the actions
+ See "help" for more details.
+EOF
+
+test_todo_session 'shorthelp output' <<EOF
+>>> todo.sh shorthelp | sed '/^ [A-Z]/!d'
+ Usage: todo.sh [-fhpantvV] [-d todo_config] action [task_number] [task_description]
+ Actions:
+ Actions can be added and overridden using scripts in the actions
+ See "help" for more details.
+EOF
+
+make_action "foo"
+test_todo_session 'shorthelp output with custom action' <<EOF
+>>> todo.sh -v shorthelp | sed '/^ [A-Z]/!d'
+ Usage: todo.sh [-fhpantvV] [-d todo_config] action [task_number] [task_description]
+ Actions:
+ Actions can be added and overridden using scripts in the actions
+ Add-on Actions:
+ See "help" for more details.
+EOF
+
+
+# Verify that custom configuration is actually processed (when the -d option
+# precedes the -h option) by specifying a different actions directory and moving
+# our custom action there. The help output should mention the "Add-On Actions".
+set -o pipefail # So that the sed filter doesn't swallow todo.sh's exit code.
+mv todo.cfg custom.cfg
+mv .todo.actions.d custom.actions
+echo 'export TODO_ACTIONS_DIR=$HOME/custom.actions' >> custom.cfg
+
+test_todo_session '-h and fatal error without config' <<EOF
+>>> todo.sh -h | sed '/^ \\{0,2\\}[A-Z]/!d'
+ Usage: todo.sh [-fhpantvV] [-d todo_config] action [task_number] [task_description]
+ Actions:
+ Actions can be added and overridden using scripts in the actions
+ See "help" for more details.
+Fatal Error: Cannot read configuration file $HOME/.todo/config
+=== 1
+EOF
+
+# Config option comes too late; "Add-on Actions" is *not* mentioned here.
+test_todo_session '-h and fatal error with trailing custom config' <<EOF
+>>> todo.sh -h -d custom.cfg | sed '/^ \\{0,2\\}[A-Z]/!d'
+ Usage: todo.sh [-fhpantvV] [-d todo_config] action [task_number] [task_description]
+ Actions:
+ Actions can be added and overridden using scripts in the actions
+ See "help" for more details.
+Fatal Error: Cannot read configuration file $HOME/.todo/config
+=== 1
+EOF
+
+# Config option processed; "Add-on Actions" is mentioned here.
+test_todo_session '-h output with preceding custom config' <<EOF
+>>> todo.sh -d custom.cfg -h | sed '/^ \\{0,2\\}[A-Z]/!d'
+ Usage: todo.sh [-fhpantvV] [-d todo_config] action [task_number] [task_description]
+ Actions:
+ Actions can be added and overridden using scripts in the actions
+ Add-on Actions:
+ See "help" for more details.
+EOF
+
+test_done
View
18 todo.sh
@@ -81,7 +81,6 @@ shorthelp()
See "help" for more details.
EndHelpFooter
- exit 0
}
help()
@@ -327,6 +326,16 @@ actionUsage()
done
}
+dieWithHelp()
+{
+ case "$1" in
+ help) help;;
+ shorthelp) shorthelp;;
+ esac
+ shift
+
+ die "$@"
+}
die()
{
echo "$*"
@@ -514,6 +523,7 @@ do
# Cannot just invoke shorthelp() because we need the configuration
# processed to locate the add-on actions directory.
set -- '-h' 'shorthelp'
+ OPTIND=2
;;
n )
OVR_TODOTXT_PRESERVE_LINE_NUMBERS=0
@@ -654,7 +664,7 @@ fi
}
# === SANITY CHECKS (thanks Karl!) ===
-[ -r "$TODOTXT_CFG_FILE" ] || die "Fatal Error: Cannot read configuration file $TODOTXT_CFG_FILE"
+[ -r "$TODOTXT_CFG_FILE" ] || dieWithHelp "$1" "Fatal Error: Cannot read configuration file $TODOTXT_CFG_FILE"
. "$TODOTXT_CFG_FILE"
@@ -693,8 +703,8 @@ fi
ACTION=${1:-$TODOTXT_DEFAULT_ACTION}
[ -z "$ACTION" ] && usage
-[ -d "$TODO_DIR" ] || die "Fatal Error: $TODO_DIR is not a directory"
-( cd "$TODO_DIR" ) || die "Fatal Error: Unable to cd to $TODO_DIR"
+[ -d "$TODO_DIR" ] || dieWithHelp "$1" "Fatal Error: $TODO_DIR is not a directory"
+( cd "$TODO_DIR" ) || dieWithHelp "$1" "Fatal Error: Unable to cd to $TODO_DIR"
[ -f "$TODO_FILE" ] || cp /dev/null "$TODO_FILE"
[ -f "$DONE_FILE" ] || cp /dev/null "$DONE_FILE"

0 comments on commit e1d6b91

Please sign in to comment.