DIR="${0:a:h}"
ROOT_DIR="$DIR/.."
VENDOR_DIR="$ROOT_DIR/vendor"

# Use stub.sh for stubbing/mocking
source "$VENDOR_DIR/stub.sh/stub.sh"

#--------------------------------------------------------------------#
# Helper Functions                                                   #
#--------------------------------------------------------------------#

# Source the autosuggestions plugin file
source_autosuggestions() {
	source "$ROOT_DIR/zsh-autosuggestions.zsh"
}

# Set history list from stdin
set_history() {
	# Make a tmp file in shunit's tmp dir
	local tmp=$(mktemp "$SHUNIT_TMPDIR/hist.XXX")

	# Write from stdin to the tmp file
	> "$tmp"

	# Write an extra line to simulate history active mode
	# See https://github.com/zsh-users/zsh/blob/ca3bc0d95d7deab4f5381f12b15047de748c0814/Src/hist.c#L69-L82
	echo >> "$tmp"

	# Clear history and re-read from the tmp file
	fc -P; fc -p; fc -R "$tmp"

	rm "$tmp"
}

# Should be called at the bottom of every test suite file
# Pass in the name of the test script ($0) for shunit
run_tests() {
	local test_script="$1"
	shift

	# Required for shunit to work with zsh
	setopt localoptions shwordsplit
	SHUNIT_PARENT="$test_script"

	source "$VENDOR_DIR/shunit2/2.1.6/src/shunit2"
}

#--------------------------------------------------------------------#
# Custom Assertions                                                  #
#--------------------------------------------------------------------#

assertSuggestion() {
	local prefix="$1"
	local expected_suggestion="$2"

	assertEquals \
		"Did not get correct suggestion for prefix:<$prefix> using strategy <$ZSH_AUTOSUGGEST_STRATEGY>" \
		"$expected_suggestion" \
		"$(_zsh_autosuggest_suggestion "$prefix")"
}