]> git.ipfire.org Git - thirdparty/git.git/commitdiff
test(junit): avoid line feeds in XML attributes
authorJohannes Schindelin <johannes.schindelin@gmx.de>
Sat, 21 May 2022 22:18:47 +0000 (22:18 +0000)
committerJunio C Hamano <gitster@pobox.com>
Sat, 21 May 2022 23:25:55 +0000 (16:25 -0700)
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>
t/test-lib-junit.sh

index 9d55d74d764cfb0d828bc7513e01f1869c375d7e..c959183c7e2c84e699a2dd43ca0bca836988770f 100644 (file)
@@ -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
 }