118 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			118 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
| #!/usr/bin/env bash
 | |
| 
 | |
| try() {
 | |
|   output=$(mktemp -d)
 | |
|   PATH="$fake_path:$PATH" "$@" > "$output/stdout" 2> "$output/stderr"
 | |
|   EXIT_CODE=$?
 | |
|   STDOUT=$(<"$output/stdout")
 | |
|   STDERR=$(<"$output/stderr")
 | |
|   export EXIT_CODE STDOUT STDERR
 | |
|   rm -rf "$output"
 | |
| }
 | |
| 
 | |
| setUp() {
 | |
|   export TMPDIR="$PWD/.generated"
 | |
|   export-repo-root
 | |
|   move-to-working-directory
 | |
|   create-fake-path
 | |
| }
 | |
| 
 | |
| tearDown() {
 | |
|   [ "${_shunit_test_:=}" = '' ] && return 0
 | |
| 
 | |
|   clean-up-working-directory
 | |
|   clean-up-fake-path
 | |
| 
 | |
|   if [ "${__shunit_testSuccess:?}" != 0 ]; then
 | |
|     output-outputs
 | |
|   fi
 | |
| }
 | |
| 
 | |
| export-repo-root() {
 | |
|   export REPO_ROOT="$PWD"
 | |
|   while ! [[ -d $REPO_ROOT/.git ]]; do
 | |
|     export REPO_ROOT=$(dirname $REPO_ROOT)
 | |
|   done
 | |
| }
 | |
| 
 | |
| move-to-working-directory() {
 | |
|   original_dir="$PWD"
 | |
|   working_dir=$(mktemp -d)
 | |
|   cd $working_dir
 | |
| }
 | |
| 
 | |
| create-fake-path() {
 | |
|   fake_path=$(mktemp -d)
 | |
|   invokations=$(mktemp -d)
 | |
| }
 | |
| 
 | |
| clean-up-working-directory() {
 | |
|   cd $original_dir
 | |
|   rm -rf $working_dir
 | |
| }
 | |
| 
 | |
| clean-up-fake-path() {
 | |
|   rm -rf $fake_path $invokations
 | |
| }
 | |
| 
 | |
| output-outputs() {
 | |
|   (
 | |
|   bold '*******Test failed********'
 | |
|   echo "$(bold EXIT_CODE =) $EXIT_CODE"
 | |
|   bold STDOUT    :
 | |
|   echo "$STDOUT"
 | |
|   bold STDERR    :
 | |
|   echo "$STDERR"
 | |
|   ) >&2
 | |
| }
 | |
| 
 | |
| bold() {
 | |
|   echo -ne "\033[1m"
 | |
|   echo -ne "$@"
 | |
|   echo -e "\033[0m"
 | |
| }
 | |
| 
 | |
| mock() {
 | |
|   command="$1"; shift
 | |
|   [[ -n "$1" ]] && output="$1"; shift
 | |
| 
 | |
|   if ! [[ -f $fake_path/$command ]]; then
 | |
|     echo 'echo "$@" >> '$invokations/$command > $fake_path/$command
 | |
|     chmod +x $fake_path/$command
 | |
|   fi
 | |
| 
 | |
|   if [[ -n "$output" ]]; then
 | |
|     echo "echo '$output'" >> $fake_path/$command
 | |
|   fi
 | |
| }
 | |
| 
 | |
| assertCalledWithArguments() {
 | |
|   if ! [[ -f $invokations/$1 ]]; then
 | |
|     fail "$1 never invoked"
 | |
|     return 1
 | |
|   fi
 | |
|   if ! assertContains "$1 not invoked with expected arguments:" "$(<$invokations/$1)" "$2"; then
 | |
|     bold Actual invokations:
 | |
|     cat "$invokations/$1"
 | |
|     return 1
 | |
|   fi
 | |
| }
 | |
| 
 | |
| assertNotCalled() {
 | |
|   if [[ -f $invokations/$1 ]]; then
 | |
|     fail "$1 has been invoked"
 | |
|     return 1
 | |
|   fi
 | |
| }
 | |
| 
 | |
| SHUNIT_PATH=./.generated/shunit2-2.1.8/shunit2
 | |
| if [ ! -f $SHUNIT_PATH ]; then (
 | |
|   mkdir -p .generated
 | |
|   cd .generated
 | |
|   curl -LO https://github.com/kward/shunit2/archive/v2.1.8.zip
 | |
|   unzip v2.1.8.zip
 | |
| )
 | |
| fi
 | |
| 
 | |
| source $SHUNIT_PATH
 |