summaryrefslogtreecommitdiff
path: root/test/main
diff options
context:
space:
mode:
Diffstat (limited to 'test/main')
-rwxr-xr-xtest/main98
1 files changed, 98 insertions, 0 deletions
diff --git a/test/main b/test/main
new file mode 100755
index 0000000..c9ea5c6
--- /dev/null
+++ b/test/main
@@ -0,0 +1,98 @@
+#!/usr/bin/env zsh
+setopt err_exit
+typeset envstore=${1-envstore}
+
+trap "print -P '\n%N:%i: %B%F{red}Test faild!%F{default}%b\nrm -rf $testdir'" ZERR
+trap "$envstore clear" INT
+
+cat <<- ente
+ Usage: $0 [path to envstore]
+ Note: this script will remove/overwrite your envstore store file.
+ The envstore script needs to be compatible with the original envstore API,
+ that is, it should implement the commends "clear", "rm", "eval",
+ "save var" and "save var value"
+
+ente
+
+echo "# $envstore clear"
+$envstore clear
+
+echo "# $envstore save var"
+export hello=world
+$envstore save hello
+unset hello
+
+echo "# $envstore eval"
+eval $($envstore eval)
+[[ $hello == world ]]
+unset hello
+
+echo "# $envstore rm"
+$envstore rm hello
+eval $($envstore eval)
+[[ -z $hello ]]
+
+echo "# $envstore save var value"
+$envstore save hello world
+
+echo "# $envstore eval"
+eval $($envstore eval)
+[[ $hello == world ]]
+unset hello
+
+echo "# $envstore clear"
+$envstore clear
+eval $($envstore eval)
+[[ -z $hello ]]
+
+echo "# $envstore save + eval (spaces in value), save var"
+export hello='your mom'
+$envstore save hello
+unset hello
+eval $($envstore eval)
+[[ $hello == 'your mom' ]]
+unset hello
+$envstore clear
+
+echo "# $envstore save + eval (spaces in value), save var value"
+$envstore save hello 'your mom'
+eval $($envstore eval)
+[[ $hello == 'your mom' ]]
+unset hello
+
+echo "# $envstore save (overwrite)"
+$envstore save hello world
+eval $($envstore eval)
+[[ $hello == world ]]
+$envstore clear
+
+echo "# $envstore save (' in value)"
+$envstore save hello "the ' dude"
+eval $($envstore eval)
+[[ $hello == "the ' dude" ]]
+unset hello
+
+echo "# $envstore save (UTF-8)"
+export hello='mÿde Rentner… und so'
+$envstore save hello
+unset hello
+eval $($envstore eval)
+[[ $hello == 'mÿde Rentner… und so' ]]
+unset hello
+$envstore clear
+
+print -P '\n%F{green}Test passed%F{default}\n'
+
+echo "## some benchmarks now..."
+TIMEFMT='%*E real, %*U user, %*S system - %P%% CPU - %J'
+
+echo "# adding 5000 vars (this could take a _long_ time)"
+for i in {0..5000}; {
+ (( i % 500 )) || echo "# $((5000-i)) to go"
+ $envstore save $i $i$i$i
+}
+echo
+
+repeat 2 {time $envstore eval > /dev/null}
+repeat 2 {time $envstore rm 99999 > /dev/null}
+repeat 2 {time $envstore clear}