summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordavidovski <david@davidovski.xyz>2022-03-03 18:38:37 +0000
committerdavidovski <david@davidovski.xyz>2022-03-03 18:38:37 +0000
commitd9091aea868392a181317a0609870273adf2c094 (patch)
tree671eb4b33036ff095978030bef62b40fb09f1733
parente989ac4788a3f947ce0097effdccaabd62c5a8ff (diff)
fixed everything to work with posix shellv1.0.2
-rwxr-xr-xMakefile1
-rwxr-xr-xsrc/parseconf.sh41
-rw-r--r--src/shtests.sh22
-rwxr-xr-xtest/hbar.sh2
-rwxr-xr-xtest/parseconf.sh21
-rw-r--r--test/test.conf21
6 files changed, 65 insertions, 43 deletions
diff --git a/Makefile b/Makefile
index a73c92b..8cba2c4 100755
--- a/Makefile
+++ b/Makefile
@@ -33,7 +33,6 @@ install-glyphs: src/glyphs.sh
check-parseconf:
shtests ./test/parseconf.sh
-
build-hbar: src/hbar.c install-colors
mkdir -pv bin
${CC} src/hbar.c -o bin/hbar ${FLAGS}
diff --git a/src/parseconf.sh b/src/parseconf.sh
index f92bf0e..929ce05 100755
--- a/src/parseconf.sh
+++ b/src/parseconf.sh
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/bin/sh
usage () {
printf "Usage $0 "
@@ -13,15 +13,10 @@ Arguments:
EOF
}
-getlevel() {
- for i in $*; do
- printf $i
- printf '.'
- done
-}
-
+# parse a single config file line
+#
parse_line() {
- [ $# == "0" ] && return
+ [ $# = "0" ] && return
local line="$@"
local key=$1
@@ -29,21 +24,21 @@ parse_line() {
local value="$@"
[ "$key" = "include" ] && cat $value | parse && return
- [ "$key" = "]" ] && unset list[-1] && printf "\n" && return
- [ "$key" = "}" ] && unset level[-1] && return
+ [ "$key" = "]" ] && unset list=${list%.*} && printf "\n" && return
+ [ "$key" = "}" ] && unset level=${level%.*} && return
- case ${value: -1} in
+ case ${value##* } in
"{")
- level+=("$key")
+ level="${level}${key}."
;;
"[")
- list+=("$key")
- printf "$(getlevel ${level[@]})$key:"
+ list="${list}${list:+.}${key}"
+ printf "$level$key:"
;;
*)
- [ "${#list[@]}" == "0" ] &&
- printf "$(getlevel ${level[@]})$key:$value\n" ||
+ [ "${#list}" = "0" ] &&
+ printf "$level$key:$value\n" ||
printf "$line "
;;
esac
@@ -54,10 +49,9 @@ parse_line() {
parse () {
local file="$1"
- export level=()
- export list=()
+ export level=""
+ export list=""
while IFS= read -r line; do
- # strip whitespace
parse_line $line
done < "/dev/stdin"
}
@@ -91,10 +85,13 @@ shift $((OPTIND-1))
[ $# = 0 ] &&
pattern=".*" ||
- pattern=$(sed "s/\*/[^:]*/g" <<< "$@")
+ pattern=$(echo $@ | sed "s/\*/[^:]*/g")
$print_keys &&
pattern="s/^($pattern:.+)/\1/p;${count}" ||
pattern="s/^$pattern:(.+)/\1/p;${count}"
-sed "s/^#.*$\|\s(\s\+)\|^\s\|\s^\|;*$//g" $CONF_FILE | parse $@ | sed -rn $pattern
+# strip whitespace
+sed "s/^#.*$\|\s(\s\+)\|^\s\|\s^\|;*$//g" $CONF_FILE |
+ parse $@ |
+ sed -rn $pattern
diff --git a/src/shtests.sh b/src/shtests.sh
index 9994d7b..70dc21b 100644
--- a/src/shtests.sh
+++ b/src/shtests.sh
@@ -14,29 +14,35 @@
PASS="${BLUE}[ ${GREEN}PASS${BLUE} ]${RESET}"
FAIL="${BLUE}[ ${RED}FAIL${BLUE} ]${RESET}"
+V=false
+
runtest () {
- test_name=$(sed "s/_/ /g" <<< "$1")
+ test_name=$(echo $1 | sed "s/_/ /g")
test_func="$2"
- printf "${BLUE}[ ] ${RESET}$test_name\r";
+ printf "${BLUE}[ ] ${RESET}$test_name ";
if "$test_func" ; then
- printf "$PASS\n"
+ printf "\r$PASS\n"
return 0
else
- printf "$FAIL\n"
+ printf "\r$FAIL\n"
return 1
fi
}
+# TODO use getopt for this
+if [ "$1" = "-v" ]; then
+ shift
+ V=true
+fi
+
if [ $# = "0" ]; then
printf "${RED}No tests file has been provided\n"
exit 1;
else
- source $@
+ . $@
fi
-
-tests=$(declare -F | sed -rn "s/declare -f test_(.+)/\1/p")
-
+tests=$(sed -n "s/^test_\(.*\)\s*()\s*{/\1/p" $@)
total=$(echo $tests | wc -w)
passed=0
failed=0
diff --git a/test/hbar.sh b/test/hbar.sh
index e7f43ef..9daf606 100755
--- a/test/hbar.sh
+++ b/test/hbar.sh
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/bin/sh
HBAR=./bin/hbar
TEXT="Hello there"
diff --git a/test/parseconf.sh b/test/parseconf.sh
index 69dd78c..0a87188 100755
--- a/test/parseconf.sh
+++ b/test/parseconf.sh
@@ -1,7 +1,6 @@
#!/bin/sh
PARSECONF="./src/parseconf.sh"
-
SIMPLECONF="./test/simple.conf"
test_simple_loading () {
@@ -12,7 +11,7 @@ test_simple_parsing () {
config="
key value
"
- retval=$(${PARSECONF} key <<< "$config")
+ retval=$(printf "$config" | ${PARSECONF} key)
[ "$retval" = "key:value" ]
}
@@ -20,7 +19,7 @@ test_bad_formatting () {
config="
key value
"
- retval=$(${PARSECONF} key <<< "$config")
+ retval=$(printf "$config" | ${PARSECONF} key)
[ "$retval" = "key:value" ]
}
@@ -28,7 +27,7 @@ test_unecessary_semicolons () {
config="
key value;
"
- retval=$(${PARSECONF} key <<< "$config")
+ retval=$(printf "$config" | ${PARSECONF} key)
[ "$retval" = "key:value" ]
}
@@ -36,7 +35,7 @@ test_extra_unecessary_semicolons () {
config="
key value;;;;;
"
- retval=$(${PARSECONF} key <<< "$config")
+ retval=$(printf "$config" | ${PARSECONF} key)
[ "$retval" = "key:value" ]
}
@@ -47,7 +46,7 @@ key2 value2
key3 value3
key4 value4
"
- retval=$(${PARSECONF} key2 <<< "$config")
+ retval=$(printf "$config" | ${PARSECONF} key2)
[ "$retval" = "key2:value2" ]
}
@@ -62,7 +61,7 @@ list [
e
]
"
- retval=$(${PARSECONF} list <<< "$config")
+ retval=$(printf "$config" | ${PARSECONF} list)
[ "$retval" = "list:a b c d e " ]
}
@@ -76,7 +75,7 @@ dict {
e 5
}
"
- retval=$(${PARSECONF} dict.a <<< "$config")
+ retval=$(printf "$config" | ${PARSECONF} dict.a)
[ "$retval" = "dict.a:1" ]
}
@@ -89,7 +88,7 @@ test_include () {
config="
include test/simple.conf
"
- retval=$(${PARSECONF} key2 <<< "$config")
+ retval=$(printf "$config" | ${PARSECONF} key2)
[ "$retval" = "key2:value2" ]
}
@@ -102,7 +101,7 @@ dict {
d 4
}
"
- retval=$(${PARSECONF} "dict.*" <<< "$config" | wc -l)
+ retval=$(printf "$config" | ${PARSECONF} "dict.*" | wc -l)
[ "$retval" = "4" ]
}
@@ -115,7 +114,7 @@ dict {
d 4
}
"
- retval=$(${PARSECONF} -c 1 "dict.*" <<< "$config")
+ retval=$(printf "$config" | ${PARSECONF} -c 1 "dict.*")
[ "$retval" = "dict.a:1" ]
}
diff --git a/test/test.conf b/test/test.conf
index 8ac673f..8c660e3 100644
--- a/test/test.conf
+++ b/test/test.conf
@@ -41,3 +41,24 @@ other_dict {
}
}
+
+
+k [
+ 1 2 3 4
+]
+values after
+and then
+another {
+ dict here
+ for me
+ to try
+ with {
+ more sub
+ dicts {
+ and even
+ more {
+ dicts here
+ }
+ }
+ }
+}