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 `&#x0a;`, 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>

Johannes Schindelin committed May 21, 2022 at 22:18 UTC 270ccd2a677766b7a7e22fdc16d6bb310eeda65b
1 file changed +10 -4
t/test-lib-junit.sh
+10 -4
@@ -50,7 +50,7 @@ finalize_test_case_output () {
50 ;;
51 failure)
52 junit_insert="<failure message=\"not ok $test_count -"
53 - junit_insert="$junit_insert $(xml_attr_encode "$1")\">"
53 + junit_insert="$junit_insert $(xml_attr_encode --no-lf "$1")\">"
54 junit_insert="$junit_insert $(xml_attr_encode \
55 "$(if test -n "$GIT_TEST_TEE_OUTPUT_FILE"
56 then
@@ -74,12 +74,12 @@ finalize_test_case_output () {
74 set "$* (known breakage)"
75 ;;
76 skip)
77 - message="$(xml_attr_encode "$skipped_reason")"
77 + message="$(xml_attr_encode --no-lf "$skipped_reason")"
78 set "$1" " <skipped message=\"$message\" />"
79 ;;
80 esac
81
82 - junit_attrs="name=\"$(xml_attr_encode "$this_test.$test_count $1")\""
82 + junit_attrs="name=\"$(xml_attr_encode --no-lf "$this_test.$test_count $1")\""
83 shift
84 junit_attrs="$junit_attrs classname=\"$this_test\""
85 junit_attrs="$junit_attrs time=\"$(test-tool \
@@ -122,5 +122,11 @@ write_junit_xml () {
122 }
123
124 xml_attr_encode () {
125 - printf '%s\n' "$@" | test-tool xml-encode
125 + if test "x$1" = "x--no-lf"
126 + then
127 + shift
128 + printf '%s' "$*" | test-tool xml-encode
129 + else
130 + printf '%s\n' "$@" | test-tool xml-encode
131 + fi
132 }