Skip to content

Commit c63b02a

Browse files
authored
Merge pull request #2231 from bnbarham/improve-test-error
Update assertions so that the mutation is more clear
2 parents 441354f + 2a0dc11 commit c63b02a

File tree

2 files changed

+30
-25
lines changed

2 files changed

+30
-25
lines changed

Sources/_SwiftSyntaxTestSupport/AssertEqualWithDiff.swift

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,8 @@ public func failStringsEqualWithDiff(
8888
file: StaticString = #file,
8989
line: UInt = #line
9090
) {
91+
let stringComparison: String
92+
9193
// Use `CollectionDifference` on supported platforms to get `diff`-like line-based output. On
9294
// older platforms, fall back to simple string comparison.
9395
if #available(macOS 10.15, *) {
@@ -127,19 +129,27 @@ public func failStringsEqualWithDiff(
127129
}
128130
}
129131

130-
let failureMessage = "Actual output (+) differed from expected output (-):\n\(result)"
131-
var fullMessage = message.isEmpty ? failureMessage : "\(message) - \(failureMessage)"
132-
if let additionalInfo = additionalInfo() {
133-
fullMessage = """
134-
\(fullMessage)
135-
\(additionalInfo)
136-
"""
137-
}
138-
XCTFail(fullMessage, file: file, line: line)
132+
stringComparison = result
139133
} else {
140134
// Fall back to simple message on platforms that don't support CollectionDifference.
141-
let failureMessage = "Actual output differed from expected output:"
142-
let fullMessage = message.isEmpty ? failureMessage : "\(message) - \(failureMessage)"
143-
XCTFail(fullMessage, file: file, line: line)
135+
stringComparison = """
136+
Expected:
137+
\(expected)
138+
139+
Actual:
140+
\(actual)
141+
"""
142+
}
143+
144+
var fullMessage = """
145+
\(message.isEmpty ? "Actual output does not match the expected" : message)
146+
\(stringComparison)
147+
"""
148+
if let additional = additionalInfo() {
149+
fullMessage = """
150+
\(fullMessage)
151+
\(additional)
152+
"""
144153
}
154+
XCTFail(fullMessage, file: file, line: line)
145155
}

Tests/SwiftParserTest/Assertions.swift

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -531,7 +531,7 @@ public struct AssertParseOptions: OptionSet {
531531
extension ParserTestCase {
532532
/// After a test case has been mutated, assert that the mutated source
533533
/// round-trips and doesn’t hit any assertion failures in the parser.
534-
fileprivate func assertRoundTrip<S: SyntaxProtocol>(
534+
fileprivate func assertMutationRoundTrip<S: SyntaxProtocol>(
535535
source: [UInt8],
536536
_ parse: (inout Parser) -> S,
537537
experimentalFeatures: Parser.ExperimentalFeatures,
@@ -549,13 +549,9 @@ extension ParserTestCase {
549549
assertStringsEqualWithDiff(
550550
"\(mutatedTree)",
551551
mutatedSource,
552+
"A mutation of the original test case failed to round-trip",
552553
additionalInfo: """
553-
Mutated source failed to round-trip.
554-
555-
Mutated source:
556-
\(mutatedSource)
557-
558-
Actual syntax tree:
554+
Parsed syntax tree of mutation:
559555
\(mutatedTree.debugDescription)
560556
""",
561557
file: file,
@@ -617,10 +613,9 @@ extension ParserTestCase {
617613
assertStringsEqualWithDiff(
618614
"\(tree)",
619615
source,
616+
"Test case failed to round-trip",
620617
additionalInfo: """
621-
Source failed to round-trip.
622-
623-
Actual syntax tree:
618+
Parsed syntax tree:
624619
\(tree.debugDescription)
625620
""",
626621
file: file,
@@ -682,7 +677,7 @@ extension ParserTestCase {
682677
}
683678

684679
if expectedDiagnostics.allSatisfy({ $0.fixIts.isEmpty }) && expectedFixedSource != nil {
685-
XCTFail("A fixed source was provided but the test case produces no diagnostics with Fix-Its", file: file, line: line)
680+
XCTFail("Fixed source was provided but the test case produces no diagnostics with Fix-Its", file: file, line: line)
686681
}
687682

688683
if expectedDiagnostics.isEmpty && diags.isEmpty {
@@ -693,7 +688,7 @@ extension ParserTestCase {
693688
DispatchQueue.concurrentPerform(iterations: Array(tree.tokens(viewMode: .all)).count) { tokenIndex in
694689
let flippedTokenTree = TokenPresenceFlipper(flipTokenAtIndex: tokenIndex).rewrite(Syntax(tree))
695690
_ = ParseDiagnosticsGenerator.diagnostics(for: flippedTokenTree)
696-
assertRoundTrip(source: flippedTokenTree.syntaxTextBytes, parse, experimentalFeatures: experimentalFeatures, file: file, line: line)
691+
assertMutationRoundTrip(source: flippedTokenTree.syntaxTextBytes, parse, experimentalFeatures: experimentalFeatures, file: file, line: line)
697692
}
698693

699694
#if SWIFTPARSER_ENABLE_ALTERNATE_TOKEN_INTROSPECTION
@@ -703,7 +698,7 @@ extension ParserTestCase {
703698
DispatchQueue.concurrentPerform(iterations: mutations.count) { index in
704699
let mutation = mutations[index]
705700
let alternateSource = MutatedTreePrinter.print(tree: Syntax(tree), mutations: [mutation.offset: mutation.replacement])
706-
assertRoundTrip(source: alternateSource, parse, experimentalFeatures: experimentalFeatures, file: file, line: line)
701+
assertMutationRoundTrip(source: alternateSource, parse, experimentalFeatures: experimentalFeatures, file: file, line: line)
707702
}
708703
#endif
709704
}

0 commit comments

Comments
 (0)