#!/usr/bin/env zsh

script=$1
actualSize=$(wc -c < $script)
testDir=$TMPDIR/dots-partial-dl-test-$UID-$$
if [[ -d $testDir ]]; then
	echo "$testDir exists, is this test already running?" >&2
	echo "Refusing to launch. Remove $testDir manually if necessary." >&2
	exit -1
fi

repeat-char() {
	local char=$1
	local -i count=$2
	(( count )) && printf "$char%.0s" {1..$count}
}

partial-dl-test() {
	local -i showProgress=0 size=0 STATUS=0
	local -F percent=0 progress=0
	local OUT=''
	mkdir $testDir

	# We run the test for every partial filesize up to the actual size - 2,
	# because we expect the script to work properly when the entirety has been
	# downloaded, and it'll also work properly if just the last byte is missing
	# because that last byte is a newline.
	for (( size = 0; size < actualSize - 1; size++ )); do
		percent=$(( size * 100.0 / actualSize ))
		progress=$(( percent / 10 ))
		(( showProgress++ % 100 == 0 || size == actualSize - 2 )) && printf " [%-10s] [%${#actualSize}d/%d]\r" "$(repeat-char = $progress)" $size $actualSize >&2

		OUT=$(head -c$size $script | env -i HOME=$testDir/home zsh 2>&1)
		STATUS=$?

		if (( STATUS == 0 )); then
			# If zsh silently did nothing, that's fine.
			[[ -z $OUT ]] && continue
			# If zsh non-silently reported a success, that's not fine.
			print "dots reported a success with only $size bytes available, producing this output:${(qq)OUT}" >&2
			return $size
		fi

		# There are a few error messages we can get from zsh that we expect to see when doing this kind of test.
		if ! [[ $OUT = 'zsh: parse error'* ||
			$OUT = 'zsh: unmatched '* ||
			$OUT = 'zsh: closing brace expected' ||
			$OUT = 'zsh: condition expected: '* ]]; then
					print "dots produced unexpected output with only $size bytes available and status $STATUS: ${(qq)OUT}" >&2
					return $size
		fi

		if [[ -d $testDir/home ]]; then
			print "dots bootstrapped itself with only $size bytes available, $percent% of its full $actualSize bytes!" >&2
			return $size
		fi
	done
	print "dots safely did nothing for partially downloaded sizes up to $((size-1))/$actualSize bytes!" >&2
}

{
	partial-dl-test
} always {
	rm -rf $testDir
}