diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..3aefff8
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+test/assert.sh
+test/stub.sh
diff --git a/Makefile b/Makefile
index 7077688..e4608f5 100644
--- a/Makefile
+++ b/Makefile
@@ -1,8 +1,24 @@
+test: build prepare
+ ./test.sh
+
build:
./build.sh
-test: build
- ./test.sh
+prepare: prepare-assert.sh prepare-stub.sh
+
+prepare-assert.sh:
+ test -f "test/assert.sh" || ( \
+ echo "fetching assert.sh..." && \
+ curl -s -L -o test/assert.sh \
+ https://raw.github.com/lehmannro/assert.sh/master/assert.sh \
+ )
+
+prepare-stub.sh:
+ test -f "test/stub.sh" || ( \
+ echo "fetching stub.sh..." && \
+ curl -s -L -o test/stub.sh \
+ https://raw.github.com/jimeh/stub.sh/master/stub.sh \
+ )
.SILENT:
-.PHONY: build test
+.PHONY: build test prepare preare-assert.sh prepare-stub.sh
diff --git a/test/assert.sh b/test/assert.sh
deleted file mode 100644
index f3d03d8..0000000
--- a/test/assert.sh
+++ /dev/null
@@ -1,139 +0,0 @@
-#!/bin/bash
-# assert.sh 1.0 - bash unit testing framework
-# Copyright (C) 2009, 2010, 2011, 2012 Robert Lehmann
-#
-# http://github.com/lehmannro/assert.sh
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public License
-# along with this program. If not, see .
-
-export DISCOVERONLY=${DISCOVERONLY:-}
-export DEBUG=${DEBUG:-}
-export STOP=${STOP:-}
-export INVARIANT=${INVARIANT:-}
-
-args="$(getopt -n "$0" -l verbose,help,stop,discover,invariant vhxdi $*)" \
-|| exit -1
-for arg in $args; do
- case "$arg" in
- -h)
- echo "$0 [-vxid] [--verbose] [--stop] [--invariant] [--discover]"
- echo "`sed 's/./ /g' <<< "$0"` [-h] [--help]"
- exit 0;;
- --help)
- cat < [stdin]
- (( tests_ran++ ))
- [[ -n "$DISCOVERONLY" ]] && return
- # printf required for formatting
- printf -v expected "x${2:-}" # x required to overwrite older results
- result="$(eval 2>/dev/null $1 <<< ${3:-})"
- # Note: $expected is already decorated
- if [[ "x$result" == "$expected" ]]; then
- [[ -n "$DEBUG" ]] && echo -n .
- return
- fi
- [[ -n "$DEBUG" ]] && echo -n X
- result="$(sed -e :a -e '$!N;s/\n/\\n/;ta' <<< "$result")"
- [[ -z "$result" ]] && result="nothing" || result="\"$result\""
- [[ -z "$2" ]] && expected="nothing" || expected="\"$2\""
- failure="expected $expected${_indent}got $result"
- report="test #$tests_ran \"$1${3:+ <<< $3}\" failed:${_indent}$failure"
- tests_errors[$tests_failed]="$report"
- (( tests_failed++ ))
- if [[ -n "$STOP" ]]; then
- [[ -n "$DEBUG" ]] && echo
- echo "$report"
- exit 1
- fi
-}
-
-assert_raises() {
- # assert_raises [stdin]
- (( tests_ran++ ))
- [[ -n "$DISCOVERONLY" ]] && return
- (eval $1 <<< ${3:-}) > /dev/null 2>&1
- status=$?
- expected=${2:-0}
- if [[ "$status" -eq "$expected" ]]; then
- [[ -n "$DEBUG" ]] && echo -n .
- return
- fi
- [[ -n "$DEBUG" ]] && echo -n X
- failure="program terminated with code $status instead of $expected"
- report="test #$tests_ran \"$1${3:+ <<< $3}\" failed:${_indent}$failure"
- tests_errors[$tests_failed]="$report"
- (( tests_failed++ ))
- if [[ -n "$STOP" ]]; then
- [[ -n "$DEBUG" ]] && echo
- echo "$report"
- exit 1
- fi
-}
-
-_assert_reset
diff --git a/test/stub.sh b/test/stub.sh
deleted file mode 100644
index e262fdb..0000000
--- a/test/stub.sh
+++ /dev/null
@@ -1,35 +0,0 @@
-# Stub commands for testing purposes.
-#
-# Arguments:
-# - $1: Name of command to stub.
-# - $2: Output will go to STDERR when $2 is "STDERR".
-#
-stub() {
- local cmd="$1"
- if [ "$2" == "STDERR" ]; then local redirect=" 1>&2"; fi
-
- if [[ "$(type "$cmd" | head -1)" == *"is a function" ]]; then
- local source="$(type "$cmd" | tail -n +2)"
- source="${source/$cmd/non_stubbed_${cmd}}"
- eval "$source"
- fi
- eval "$(echo -e "${1}() {\n echo \"$1 stub: \$@\"$redirect\n}")"
-}
-
-# Restore the original command/function that was stubbed with stub().
-#
-# Arguments:
-# - $1: Name of command to restore.
-#
-restore() {
- local cmd="$1"
- unset -f "$cmd"
- if type "non_stubbed_${cmd}" &>/dev/null; then
- if [[ "$(type "non_stubbed_${cmd}" | head -1)" == *"is a function" ]]; then
- local source="$(type "non_stubbed_$cmd" | tail -n +2)"
- source="${source/non_stubbed_${cmd}/$cmd}"
- eval "$source"
- unset -f "non_stubbed_${cmd}"
- fi
- fi
-}