#!/bin/bash
set -eux
# By default, run tests with pytest-forked plugin,
# disable in terminal for debugging, you may add --forked
flag_forked="--forked"
if [[ -z "${CONTINUOUS_INTEGRATION-}" ]] && [[ -t 1 ]] ; then
	flag_forked=""
fi
test_flags=(
	$@
	$flag_forked
	tests/
)

main() {
	cd "$( dirname "${BASH_SOURCE[0]}" )/.."
	if [[ -n "${CONTINUOUS_INTEGRATION-}" ]] ; then
		case "${test_group-}" in
		pep8)
			if [[ "${TRAVIS_PYTHON_VERSION}" = "2.7" ]] ; then
				flake8 python2/
			else
				flake8 python3/ tests/
			fi
			;;
		package)
			# TODO: sdist bdist_wheel
			# but wheels don't roll well with our 2/3 split code base
			python setup.py sdist
			install_check_version "pip"
			;;
		*)
			pip install -e .
			httplib2_test_still_run_skipped=1 pytest --fulltrace -k test_303 $@ tests/ || true
			httplib2_test_still_run_skipped=1 pytest --fulltrace -k test_head_301 $@ tests/ || true
			pytest --fulltrace ${test_flags[@]}
			;;
		esac
	else
		if [[ ! -d ./venv-27 ]] ; then
			virtualenv --python=python2.7 ./venv-27
		fi
		if [[ ! -d ./venv-36 ]] ; then
			virtualenv --python=python3.6 ./venv-36
		fi

		./venv-27/bin/pip install -e . -r requirements-test.txt
		./venv-27/bin/pytest ${test_flags[@]}
		./venv-36/bin/pip install -e . -r requirements-test.txt
		./venv-36/bin/pytest ${test_flags[@]}

		# FIXME: too many errors
		# ./venv-27/bin/flake8 python2/
		# ./venv-36/bin/flake8 python3/ tests/

		# TODO: sdist bdist_wheel
		# but wheels don't roll well with our 2/3 split code base
		./venv-36/bin/python setup.py sdist
		install_check_version "./venv-27/bin/pip"
		install_check_version "./venv-36/bin/pip"
	fi
	rm -rf ./_httplib2_test_cache
}

install_check_version() {
	local pip="$1"
	$pip install dist/httplib2*
	version_source=$(cd python3 ; python3 -Es -c 'import httplib2;print(httplib2.__version__)')
	version_installed=$($pip show httplib2 |fgrep Version |cut -d' ' -f2)
	if [[ "$version_source" != "$version_installed" ]] ; then
		echo "error: installed package version=$version_installed does not match source=$version_source" >&2
		exit 1
	fi
}

main "$@"