diff --git a/Package.swift b/Package.swift index b678c40..38498b7 100644 --- a/Package.swift +++ b/Package.swift @@ -7,8 +7,11 @@ let package = Package( products: [ .library(name: "SwiftTestReporter", targets: ["SwiftTestReporter"]), ], + dependencies: [ + .package(url: "https://github.com/alexaubry/HTMLString.git", .upToNextMajor(from: "4.0.2")), + ], targets: [ - .target(name: "SwiftTestReporter"), + .target(name: "SwiftTestReporter", dependencies: [ "HTMLString" ]), .testTarget(name: "SwiftTestReporterTests", dependencies: ["SwiftTestReporter"]), ] ) diff --git a/Sources/SwiftTestReporter/Reporters/JUnit/JUnitElement.swift b/Sources/SwiftTestReporter/Reporters/JUnit/JUnitElement.swift index 3d1890a..bb78891 100644 --- a/Sources/SwiftTestReporter/Reporters/JUnit/JUnitElement.swift +++ b/Sources/SwiftTestReporter/Reporters/JUnit/JUnitElement.swift @@ -1,4 +1,5 @@ import Foundation +import HTMLString /// Describes all elements needed to build valid XML. indirect enum JUnitElement: CustomStringConvertible { @@ -41,10 +42,10 @@ indirect enum JUnitElement: CustomStringConvertible { return testCaseElement case .failure(let message): - return "\n\t\t\t\n\t\t" + return "\n\t\t\t\n\t\t" case .error(let message): - return "\n\t\t\t\n\t\t" + return "\n\t\t\t\n\t\t" } } } diff --git a/Tests/SwiftTestReporterTests/JUnitReporterTests.swift b/Tests/SwiftTestReporterTests/JUnitReporterTests.swift index 7edc4da..e28cc5e 100644 --- a/Tests/SwiftTestReporterTests/JUnitReporterTests.swift +++ b/Tests/SwiftTestReporterTests/JUnitReporterTests.swift @@ -51,9 +51,35 @@ class JUnitReporterTests: XCTestCase { XCTAssertEqual(content.replacingTabsWithSpaces(), expected.replacingTabsWithSpaces()) } } + + func testProperEscapingOfErrorMessages() { + #if os(Linux) + let className = "SwiftTestReporterTests.JUnitReporterTests" + let testName = "testProperEscapingOfErrorMessages" + #else + let className = "-[JUnitReporterTests testProperEscapingOfErrorMessages]" + let testName = "-[JUnitReporterTests testProperEscapingOfErrorMessages]" + #endif + let testCase = Test(self).setFailure(Failure(message: "\"test\" \"failed\"")) + let testSuite = makeTestCaseStub(name: "TestFoo", testCases: ["test": testCase]) + let expected = """ + + + + + + + + + """ + JUnitReporter().report(for: [testSuite]) { content in + XCTAssertEqual(content.replacingTabsWithSpaces(), expected.replacingTabsWithSpaces()) + } + } static var allTests = [ ("testReporterShouldReturnXMLForEmptySuite", testReporterShouldReturnXMLForEmptySuite), - ("testReporterShouldReturnXMLForFailedTest", testReporterShouldReturnXMLForFailedTest) + ("testReporterShouldReturnXMLForFailedTest", testReporterShouldReturnXMLForFailedTest), + ("testProperEscapingOfErrorMessages", testProperEscapingOfErrorMessages), ] }