Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions lib/internal/test_runner/reporter/junit.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,11 @@ const inspectOptions = { __proto__: null, colors: false, breakLength: Infinity }
const HOSTNAME = hostname();

function escapeAttribute(s = '') {
return escapeContent(RegExpPrototypeSymbolReplace(/"/g, RegExpPrototypeSymbolReplace(/\n/g, s, ''), '"'));
return escapeContent(RegExpPrototypeSymbolReplace(/"/g, RegExpPrototypeSymbolReplace(/\n/g, s, '
'), '"'));
}

function escapeContent(s = '') {
return RegExpPrototypeSymbolReplace(/</g, RegExpPrototypeSymbolReplace(/&/g, s, '&amp;'), '&lt;');
return RegExpPrototypeSymbolReplace(/</g, RegExpPrototypeSymbolReplace(/(&)(?!#\d{1,7};)/g, s, '&amp;'), '&lt;');
}

function escapeComment(s = '') {
Expand Down Expand Up @@ -137,7 +137,7 @@ module.exports = async function* junitReporter(source) {
__proto__: null,
nesting: event.data.nesting + 1,
tag: 'failure',
attrs: { __proto__: null, type: error?.failureType || error?.code, message: error?.message ?? '' },
attrs: { __proto__: null, type: error?.failureType || error?.code, message: error?.message.trim() ?? '' },
children: [inspectWithNoCustomRetry(error, inspectOptions)],
});
currentTest.failures = 1;
Expand Down
12 changes: 6 additions & 6 deletions test/fixtures/test-runner/output/junit_reporter.snapshot
Original file line number Diff line number Diff line change
Expand Up @@ -101,8 +101,8 @@
}
</failure>
</testcase>
<testcase name="async assertion fail" time="*" classname="test" file="*" failure="Expected values to be strictly equal:true !== false">
<failure type="testCodeFailure" message="Expected values to be strictly equal:true !== false">
<testcase name="async assertion fail" time="*" classname="test" file="*" failure="Expected values to be strictly equal:&#10;&#10;true !== false&#10;">
<failure type="testCodeFailure" message="Expected values to be strictly equal:&#10;&#10;true !== false">
[Error [ERR_TEST_FAILURE]: Expected values to be strictly equal:

true !== false
Expand Down Expand Up @@ -316,8 +316,8 @@ Error [ERR_TEST_FAILURE]: thrown from callback async throw
[Error [ERR_TEST_FAILURE]: customized] { code: 'ERR_TEST_FAILURE', failureType: 'testCodeFailure', cause: customized }
</failure>
</testcase>
<testcase name="custom inspect symbol that throws fail" time="*" classname="test" file="*" failure="{ foo: 1, Symbol(nodejs.util.inspect.custom): [Function: [nodejs.util.inspect.custom]]}">
<failure type="testCodeFailure" message="{ foo: 1, Symbol(nodejs.util.inspect.custom): [Function: [nodejs.util.inspect.custom]]}">
<testcase name="custom inspect symbol that throws fail" time="*" classname="test" file="*" failure="{&#10; foo: 1,&#10; Symbol(nodejs.util.inspect.custom): [Function: [nodejs.util.inspect.custom]]&#10;}">
<failure type="testCodeFailure" message="{&#10; foo: 1,&#10; Symbol(nodejs.util.inspect.custom): [Function: [nodejs.util.inspect.custom]]&#10;}">
[Error [ERR_TEST_FAILURE]: {
foo: 1,
Symbol(nodejs.util.inspect.custom): [Function: [nodejs.util.inspect.custom]]
Expand Down Expand Up @@ -413,8 +413,8 @@ Error [ERR_TEST_FAILURE]: bar
}
</failure>
</testcase>
<testcase name="assertion errors display actual and expected properly" time="*" classname="test" file="*" failure="Expected values to be loosely deep-equal:{ bar: 1, baz: { date: 1970-01-01T00:00:00.000Z, null: null, number: 1, string: 'Hello', undefined: undefined }, boo: [ 1 ], foo: 1}should loosely deep-equal{ baz: { date: 1970-01-01T00:00:00.000Z, null: null, number: 1, string: 'Hello', undefined: undefined }, boo: [ 1 ], circular: &lt;ref *1> { bar: 2, c: [Circular *1] }}">
<failure type="testCodeFailure" message="Expected values to be loosely deep-equal:{ bar: 1, baz: { date: 1970-01-01T00:00:00.000Z, null: null, number: 1, string: 'Hello', undefined: undefined }, boo: [ 1 ], foo: 1}should loosely deep-equal{ baz: { date: 1970-01-01T00:00:00.000Z, null: null, number: 1, string: 'Hello', undefined: undefined }, boo: [ 1 ], circular: &lt;ref *1> { bar: 2, c: [Circular *1] }}">
<testcase name="assertion errors display actual and expected properly" time="*" classname="test" file="*" failure="Expected values to be loosely deep-equal:&#10;&#10;{&#10; bar: 1,&#10; baz: {&#10; date: 1970-01-01T00:00:00.000Z,&#10; null: null,&#10; number: 1,&#10; string: 'Hello',&#10; undefined: undefined&#10; },&#10; boo: [&#10; 1&#10; ],&#10; foo: 1&#10;}&#10;&#10;should loosely deep-equal&#10;&#10;{&#10; baz: {&#10; date: 1970-01-01T00:00:00.000Z,&#10; null: null,&#10; number: 1,&#10; string: 'Hello',&#10; undefined: undefined&#10; },&#10; boo: [&#10; 1&#10; ],&#10; circular: &lt;ref *1> {&#10; bar: 2,&#10; c: [Circular *1]&#10; }&#10;}">
<failure type="testCodeFailure" message="Expected values to be loosely deep-equal:&#10;&#10;{&#10; bar: 1,&#10; baz: {&#10; date: 1970-01-01T00:00:00.000Z,&#10; null: null,&#10; number: 1,&#10; string: 'Hello',&#10; undefined: undefined&#10; },&#10; boo: [&#10; 1&#10; ],&#10; foo: 1&#10;}&#10;&#10;should loosely deep-equal&#10;&#10;{&#10; baz: {&#10; date: 1970-01-01T00:00:00.000Z,&#10; null: null,&#10; number: 1,&#10; string: 'Hello',&#10; undefined: undefined&#10; },&#10; boo: [&#10; 1&#10; ],&#10; circular: &lt;ref *1> {&#10; bar: 2,&#10; c: [Circular *1]&#10; }&#10;}">
[Error [ERR_TEST_FAILURE]: Expected values to be loosely deep-equal:

{
Expand Down
Loading