test(junit): avoid line feeds in XML attributes

In the test case's output, we do want newline characters, but in the XML
attributes we do not want them.

However, the `xml_attr_encode` function always adds a Line Feed at the
end (which are then encoded as `
`, even for XML attributes.

This seems not to faze Azure Pipelines' XML parser, but it still is
incorrect, so let's fix it.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Johannes Schindelin 2022-05-21 22:18:47 +00:00 коммит произвёл Junio C Hamano
Родитель 78d5e4cfb4
Коммит 270ccd2a67
1 изменённых файлов: 10 добавлений и 4 удалений

Просмотреть файл

@ -50,7 +50,7 @@ finalize_test_case_output () {
;;
failure)
junit_insert="<failure message=\"not ok $test_count -"
junit_insert="$junit_insert $(xml_attr_encode "$1")\">"
junit_insert="$junit_insert $(xml_attr_encode --no-lf "$1")\">"
junit_insert="$junit_insert $(xml_attr_encode \
"$(if test -n "$GIT_TEST_TEE_OUTPUT_FILE"
then
@ -74,12 +74,12 @@ finalize_test_case_output () {
set "$* (known breakage)"
;;
skip)
message="$(xml_attr_encode "$skipped_reason")"
message="$(xml_attr_encode --no-lf "$skipped_reason")"
set "$1" " <skipped message=\"$message\" />"
;;
esac
junit_attrs="name=\"$(xml_attr_encode "$this_test.$test_count $1")\""
junit_attrs="name=\"$(xml_attr_encode --no-lf "$this_test.$test_count $1")\""
shift
junit_attrs="$junit_attrs classname=\"$this_test\""
junit_attrs="$junit_attrs time=\"$(test-tool \
@ -122,5 +122,11 @@ write_junit_xml () {
}
xml_attr_encode () {
printf '%s\n' "$@" | test-tool xml-encode
if test "x$1" = "x--no-lf"
then
shift
printf '%s' "$*" | test-tool xml-encode
else
printf '%s\n' "$@" | test-tool xml-encode
fi
}