Add test for --source flag and pull request suggestions

Add a demo/sourcing.vars file to be used by the associated demo
script.

Modified mo argument parsing so that --help and --source=file do not need
to be the first arguments for mo. And can in fact appear after or in the
middle of filenames.
This commit is contained in:
Alexandre-Silva 2016-07-21 15:11:11 +01:00
parent 4f7fd392b0
commit 45475ec77e
7 changed files with 53 additions and 18 deletions

1
.gitignore vendored
View File

@ -4,4 +4,3 @@ diagnostic.test
tests/*.diff tests/*.diff
spec/ spec/
spec-runner/ spec-runner/
demo/sourcing.vars

View File

@ -4,11 +4,6 @@
cd "$(dirname "$0")" # Go to the script's directory cd "$(dirname "$0")" # Go to the script's directory
cat <<EOF >sourcing.vars
export NAME="Alex"
export ARRAY=( AAA BBB CCC )
EOF
cat <<EOF | ../mo --source=sourcing.vars cat <<EOF | ../mo --source=sourcing.vars
Hello, my name is {{NAME}}. Hello, my name is {{NAME}}.
And this is ARRAY's conntents: And this is ARRAY's conntents:

2
demo/sourcing.vars Normal file
View File

@ -0,0 +1,2 @@
export NAME="Alex"
export ARRAY=( AAA BBB CCC )

37
mo
View File

@ -29,25 +29,38 @@
mo() ( mo() (
# This function executes in a subshell so IFS is reset. # This function executes in a subshell so IFS is reset.
# Namespace this variable so we don't conflict with desired values. # Namespace this variable so we don't conflict with desired values.
local moContent local moContent files=()
IFS=$' \n\t' IFS=$' \n\t'
if [[ $# -gt 0 ]]; then if [[ $# -gt 0 ]]; then
case "$1" in for arg in "$@"; do
-h|--h|--he|--hel|--help) case "$arg" in
moUsage "$0" -h|--h|--he|--hel|--help)
exit 0 moUsage "$0"
;; exit 0
;;
--source=*) --source=*)
. "${1#--source=}" local f2source="${1#--source=}"
shift 1 if [[ -f "$f2source" ]]; then
;; . "$f2source"
esac continue
else
printf "%s: %s: %s\n"\
"$0" "$f2source" "No such file" >&2
exit 1
fi
;;
*) # Every arg that is not a flag or a option should be a file
files+=("$arg")
;;
esac
done
fi fi
moGetContent moContent "$@" moGetContent moContent "${files[@]}"
moParse "$moContent" "" true moParse "$moContent" "" true
) )

5
tests/source.expected Normal file
View File

@ -0,0 +1,5 @@
value
* 1
* 2
* 3
AAA BBB

17
tests/source.sh Executable file
View File

@ -0,0 +1,17 @@
#!/usr/bin/env bash
cd "${0%/*}"
cat <<EOF | ../mo --source=source.vars
{{VAR}}
{{#ARR}}
* {{.}}
{{/ARR}}
{{ASSOC_ARR.a}} {{ASSOC_ARR.b}}
EOF
# Prints the string should mo NOT fail. Meaning that the output will not match
# tests/source.expected and therefore the test will fail.
../mo --source=a/non/existent/file files >/dev/null 2>&1
[[ "$?" -ne 1 ]] && echo "mo accepted a non existent file"

4
tests/source.vars Normal file
View File

@ -0,0 +1,4 @@
export VAR=value
export ARR=(1 2 3)
declare -A ASSOC_ARR
export ASSOC_ARR=([a]=AAA [b]=BBB)