# Library of functions to mark up test scripts' output suitable for
# pretty-printing it in GitHub workflows.
#
# Copyright (c) 2022 Johannes Schindelin
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 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 General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see http://www.gnu.org/licenses/ .
#
# The idea is for `test-lib.sh` to source this file when run in GitHub
# workflows; these functions will then override (empty) functions
# that are are called at the appropriate times during the test runs.

test_skip_test_preamble=t

start_test_output () {
	test -n "$GIT_TEST_TEE_OUTPUT_FILE" ||
	die "--github-workflow-markup requires --verbose-log"
	github_markup_output="${GIT_TEST_TEE_OUTPUT_FILE%.out}.markup"
	>$github_markup_output
	GIT_TEST_TEE_OFFSET=0
}

# No need to override start_test_case_output

finalize_test_case_output () {
	test_case_result=$1
	shift
	case "$test_case_result" in
	failure)
		echo >>$github_markup_output "::error::failed: $this_test.$test_count $1"
		;;
	fixed)
		echo >>$github_markup_output "::notice::fixed: $this_test.$test_count $1"
		;;
	ok)
		# Exit without printing the "ok" tests
		return
		;;
	esac
	echo >>$github_markup_output "::group::$test_case_result: $this_test.$test_count $*"
	test-tool >>$github_markup_output path-utils skip-n-bytes \
		"$GIT_TEST_TEE_OUTPUT_FILE" $GIT_TEST_TEE_OFFSET
	echo >>$github_markup_output "::endgroup::"
}

# No need to override finalize_test_output
