Mike Gerwitz

Activist for User Freedom

aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMike Gerwitz <mike@mikegerwitz.com>2011-08-24 23:35:02 -0400
committerMike Gerwitz <mike@mikegerwitz.com>2011-08-24 23:35:02 -0400
commit23f3a04ef79b2ec90bdd00bab44a17a33e25f0e9 (patch)
tree8fa7ab530ea98f660bdf9a94889ff3545807a88c
parent520723e1845af6ebaa18cc2d66bab8724b6046ea (diff)
downloadgsgp-23f3a04ef79b2ec90bdd00bab44a17a33e25f0e9.tar.gz
gsgp-23f3a04ef79b2ec90bdd00bab44a17a33e25f0e9.tar.bz2
gsgp-23f3a04ef79b2ec90bdd00bab44a17a33e25f0e9.zip
process-input script now simply returns commands to be executed
-rwxr-xr-xtest/test-process-input51
-rwxr-xr-xutil/process-input51
2 files changed, 22 insertions, 80 deletions
diff --git a/test/test-process-input b/test/test-process-input
index 707900c..2e54150 100755
--- a/test/test-process-input
+++ b/test/test-process-input
@@ -29,22 +29,24 @@ process-input "foo bar" 2>/dev/null <<< "" && {
# test data
scene_opendoor="opendoor"
doorspeak="Yo. I'm a door."
+
+multiactions="
+ MSG foo
+ WAIT
+ GO somewhereelse
+"
+
testscene="
TYPE input
OBJECT door
DEFAULT MSG What about the door?
- ACTION invalid
ACTION open
GO $scene_opendoor
ACTION unknown
UNKNOWNCMD foo
- ACTION badgo
- GO
- ACTION talk
- MSG $doorspeak
- ACTION badtalk
- MSG
+ ACTION multi
+ $multiactions
STORY
This is a test scene.
@@ -65,38 +67,19 @@ assert-equal "$( tryinput "open door" )" "GO $scene_opendoor" || {
fail "Should be able to perform known actions on known objects"
}
-# should not allow actions on unknown objects
-assert-equal "$( tryinput "open idkwhat" )" "MSG Cannot open idkwhat" || {
+# actions on unknown objects should simply output an empty string
+assert-equal "$( tryinput "open idkwhat" )" "" || {
simplefail "Should not be able to perform actions on unknown objects"
}
-# should not allow unknown actions on known objects
-assert-equal "$( tryinput "fondle door" )" "MSG Cannot fondle door" || {
+# unknown actions on known objects should simply output an empty string
+assert-equal "$( tryinput "fondle door" )" "" || {
simplefail "Should not be able to perform unknown actions on known objects"
}
-# action requires associated command
-assert-equal "$( tryinput "invalid door" )" "MSG Cannot invalid door" || {
- simplefail "ACTION directive should require valid command"
-}
-
-# should fail on unknown command
-tryinput "unknown door" 2>/dev/null && {
- simplefail "ACTION directive should fail on unknwon command"
-}
-
-# GO should require a scene
-tryinput "badgo door" 2>/dev/null && {
- simplefail "GO command should require a target scene"
-}
-
-# MSG should return a message
-assert-equal "$( tryinput "talk door" )" "MSG $doorspeak" || {
- fail "MSG command should return a message"
-}
-
-# MSG command should require an argument
-tryinput "badtalk door" 2>/dev/null && {
- simplefail "MSG should require output text"
+# all commands associated with an action should be returned (left trimmed)
+expected=$( sed 's/ \+//' <<< "$multiactions" )
+assert-equal "$( tryinput "multi door" )" "$expected" || {
+ fail "All commands for a multi-line action should be returned"
}
diff --git a/util/process-input b/util/process-input
index b62bd7a..4a2689f 100755
--- a/util/process-input
+++ b/util/process-input
@@ -1,11 +1,8 @@
#!/bin/bash
#
-# Processes input text and outputs result
+# Processes input text and outputs commands to be executed as a result
#
-# This script will return one of two commands with an associated argument, which
-# should be interpreted as follows:
-# - MSG - Output the provided message
-# - GO - Go to the scene matching the provided id
+# This script does not actually execute the commands or further validate them.
#
# Copyright (C) 2011 Mike Gerwitz
#
@@ -45,8 +42,9 @@ fi
action=$( cut -d' ' -f1 <<< "$words" )
object=$( cut -d' ' -f2 <<< "$words" )
-# check for am action on a known object
-action_data=$( awk "
+# check for am action on a known object and output the associated commands, left
+# trimmed
+awk "
/OBJECT $object/,/^$/ {
found = 1
}
@@ -62,43 +60,4 @@ action_data=$( awk "
}
" <<< "$data" \
| sed 's/^[ \t]\+//'
-)
-
-# if we were unable to find the associated object/action, then let the user know
-# that they've performed an invalid action
-if [ ! "$action_data" ]; then
- echo "MSG Cannot $words"
- exit 0
-fi
-
-# what type of command should we execute?
-cmd=$( cut -d' ' -f1 <<< "$action_data" )
-arg=$( cut -s -d' ' -f2- <<< "$action_data" )
-
-case "$cmd" in
- GO)
- if [ ! "$arg" ]; then
- echo "ERROR: GO command requires target scene" >&2
- exit 4
- fi
-
- # the action will be to go to the target scene
- echo "GO $arg"
- ;;
-
- MSG)
- if [ ! "$arg" ]; then
- echo "ERROR: MSG requires an output string" >&2
- exit 4
- fi
-
- # the MSG action will indicate that a message should be output
- echo "MSG $arg"
- ;;
-
- *)
- echo "ERROR: Unknown command '$cmd' for action: $words" >&2
- exit 4
- ;;
-esac