From cc5779d69c7fd9c683aef6f4298f9fb75397f701 Mon Sep 17 00:00:00 2001 From: Vladimir Date: Mon, 20 Mar 2023 13:52:28 +0100 Subject: [PATCH] fix: escape XML in error stack trace when using junit reporter (#3038) --- packages/vitest/src/node/reporters/junit.ts | 2 +- test/reporters/src/data-for-junit.ts | 1 + test/reporters/tests/__snapshots__/html.test.ts.snap | 2 +- test/reporters/tests/__snapshots__/json.test.ts.snap | 2 +- test/reporters/tests/__snapshots__/reporters.spec.ts.snap | 3 ++- 5 files changed, 6 insertions(+), 4 deletions(-) diff --git a/packages/vitest/src/node/reporters/junit.ts b/packages/vitest/src/node/reporters/junit.ts index 4083c9df9729..a9b918175623 100644 --- a/packages/vitest/src/node/reporters/junit.ts +++ b/packages/vitest/src/node/reporters/junit.ts @@ -131,7 +131,7 @@ export class JUnitReporter implements Reporter { for (const frame of stack) { const path = relative(this.ctx.config.root, frame.file) - await this.baseLog(` ${F_POINTER} ${[frame.method, `${path}:${frame.line}:${frame.column}`].filter(Boolean).join(' ')}`) + await this.baseLog(escapeXML(` ${F_POINTER} ${[frame.method, `${path}:${frame.line}:${frame.column}`].filter(Boolean).join(' ')}`)) // reached at test file, skip the follow stack if (frame.file in this.ctx.state.filesMap) diff --git a/test/reporters/src/data-for-junit.ts b/test/reporters/src/data-for-junit.ts index 0d6e667c8839..6595b3d5252e 100644 --- a/test/reporters/src/data-for-junit.ts +++ b/test/reporters/src/data-for-junit.ts @@ -28,6 +28,7 @@ function createSuiteHavingFailedTestWithXmlInError(): File[] { errorWithXml.stack = 'Error: error message that has XML in it \n' + ' at /vitest/test/core/test/basic.test.ts:8:32\n' + + ' at /vitest/test/core/test/.ts:3:11\n' + ' at etc....' const tasks: Task[] = [ diff --git a/test/reporters/tests/__snapshots__/html.test.ts.snap b/test/reporters/tests/__snapshots__/html.test.ts.snap index 49db8c36242b..43801f9c5937 100644 --- a/test/reporters/tests/__snapshots__/html.test.ts.snap +++ b/test/reporters/tests/__snapshots__/html.test.ts.snap @@ -1,4 +1,4 @@ -// Vitest Snapshot v1 +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html exports[`html reporter > resolves to "failing" status for test file "json-fail" > tests are failing 1`] = ` { diff --git a/test/reporters/tests/__snapshots__/json.test.ts.snap b/test/reporters/tests/__snapshots__/json.test.ts.snap index 565b068bc9b6..db3d630ef28a 100644 --- a/test/reporters/tests/__snapshots__/json.test.ts.snap +++ b/test/reporters/tests/__snapshots__/json.test.ts.snap @@ -1,4 +1,4 @@ -// Vitest Snapshot v1 +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html exports[`json reporter > generates correct report 1`] = ` { diff --git a/test/reporters/tests/__snapshots__/reporters.spec.ts.snap b/test/reporters/tests/__snapshots__/reporters.spec.ts.snap index 6ec2907cdcb3..6e8e5a5f0d90 100644 --- a/test/reporters/tests/__snapshots__/reporters.spec.ts.snap +++ b/test/reporters/tests/__snapshots__/reporters.spec.ts.snap @@ -1,4 +1,4 @@ -// Vitest Snapshot v1 +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html exports[`JUnit reporter (no outputFile entry) 1`] = ` " @@ -249,6 +249,7 @@ exports[`JUnit reporter with outputFile with XML in error message 2`] = ` AssertionError: error message that has XML in it <tag> ❯ test/core/test/basic.test.ts:8:32 + ❯ test/core/test/<bracket-name>.ts:3:11