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>
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
}