diff b.sh @ 0:ed67ca9ff4c7

initial commit
author Serge A. Zaitsev <zaitsev.serge@gmail.com>
date Thu, 18 Dec 2014 23:49:30 +0200
parents
children 078a17d15fa5
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/b.sh	Thu Dec 18 23:49:30 2014 +0200
@@ -0,0 +1,61 @@
+# eval, shift, unset are guaranteed to be in the POSIX shell
+# No local variables are guaranteed, so we use __prefix for local variables
+# We try to use mktemp, but we actually can use any directory to keep our tests
+# data.
+
+#
+# Create temporary directory to keep intermediate test data
+#
+T=$(mktemp -d)
+[ -z $T ] && T=/tmp/bricolagetmp
+export T
+mkdir -p "$T"
+
+#
+# Test success/failure reporters, can be overridden
+#
+pass() {
+	echo "pass: $*" 
+}
+
+fail() {
+	echo "fail: $*" 
+}
+
+#
+# Command wrapper. Defines function that behaves like a spied command
+#
+spy() {
+	eval "$(cat << EOF
+$1() {
+	echo \$* >> "$T/spy.$1.args"
+	([ -f "$T/spy.$1" ] && cat "$T/spy.$1" || $SHELL -c $1 \$@) >> "$T/spy.$1.stdout"
+	echo \$? >> "$T/spy.$1.exit"
+}
+__spies="$1 \$__spies"
+EOF
+)"
+	rm -f "$T/spy.$1" "$T/spy.$1.stdout" "$T/spy.$1.args"
+}
+
+#
+# Test runner
+#
+bricolage() {
+	eval "$(cat << EOF
+__spies=""
+ok() {
+	if test "\$@" ; then
+		pass "$1: \$*"
+	else
+		fail "$1: \$*"
+	fi
+}
+EOF
+)"
+	$@
+	# eval is needed, because unset breaks in zsh due to a trailing space
+	[ ! -z $__spies ] && eval "unset -f $__spies"
+	unset -f ok
+}
+