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),
]
}