Skip to content

Commit aef5e6c

Browse files
committed
Migrate D2ScriptParserTests to swift-testing
1 parent 51ce173 commit aef5e6c

File tree

2 files changed

+32
-31
lines changed

2 files changed

+32
-31
lines changed

Diff for: Package.swift

+1
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,7 @@ let package = Package(
175175
name: "D2ScriptTests",
176176
dependencies: [
177177
.product(name: "Utils", package: "swift-utils"),
178+
.target(name: "D2TestUtils"),
178179
.target(name: "D2Script"),
179180
]
180181
),

Diff for: Tests/D2ScriptTests/D2ScriptParserTests.swift

+31-31
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
1-
import XCTest
1+
import Testing
2+
import D2TestUtils
23
@testable import D2Script
34

4-
final class D2ScriptParserTests: XCTestCase {
5-
private let eps = 0.01
5+
struct D2ScriptParserTests {
66
private let parser = D2ScriptParser()
77

8-
func testTokenization() throws {
9-
assertTokensEqual(try parser.tokenize("4.645"), [.numberLiteral(4.645)])
10-
assertTokensEqual(try parser.tokenize("\"\""), [.stringLiteral("")])
11-
assertTokensEqual(try parser.tokenize("(({}, {}), ())"), [
8+
@Test func tokenization() throws {
9+
expectTokensEqual(try parser.tokenize("4.645"), [.numberLiteral(4.645)])
10+
expectTokensEqual(try parser.tokenize("\"\""), [.stringLiteral("")])
11+
expectTokensEqual(try parser.tokenize("(({}, {}), ())"), [
1212
.leftParenthesis, .leftParenthesis, .leftCurlyBracket, .rightCurlyBracket, .comma,
1313
.leftCurlyBracket, .rightCurlyBracket, .rightParenthesis, .comma,
1414
.leftParenthesis, .rightParenthesis, .rightParenthesis
@@ -22,7 +22,7 @@ final class D2ScriptParserTests: XCTestCase {
2222
}
2323
"""
2424
let tokens = try parser.tokenize(simpleProgram)
25-
assertTokensEqual(tokens, [
25+
expectTokensEqual(tokens, [
2626
.keyword("command"), .identifier("test"), .leftCurlyBracket, .linebreak,
2727
.identifier("a"), .anyOperator("="), .numberLiteral(4.3), .linebreak,
2828
.identifier("b"), .anyOperator("="), .stringLiteral("This is a string literal 12345"), .linebreak,
@@ -39,24 +39,24 @@ final class D2ScriptParserTests: XCTestCase {
3939
}
4040
"""
4141
let ast = try parser.parse(simpleProgram1)
42-
XCTAssertEqual(ast.topLevelNodes.count, 1, "Expected exactly one top-level declaration: The command")
42+
#expect(ast.topLevelNodes.count == 1, "Expected exactly one top-level declaration: The command")
4343

4444
let command = ast.topLevelNodes.first as? D2ScriptCommandDeclaration
45-
XCTAssertEqual(command?.commandName, "simpleProgram", "Expected a command labelled 'simpleProgram'")
45+
#expect(command?.commandName == "simpleProgram", "Expected a command labelled 'simpleProgram'")
4646

4747
let statements = command?.statementList.statements
48-
XCTAssertEqual(statements?.count, 2, "Expected two statements")
48+
#expect(statements?.count == 2, "Expected two statements")
4949

5050
let firstPrint = (statements?[0] as? D2ScriptExpressionStatement)?.expression as? D2ScriptFunctionCall
5151
let secondCall = (statements?[1] as? D2ScriptExpressionStatement)?.expression as? D2ScriptFunctionCall
52-
XCTAssertEqual(firstPrint?.functionName, "print")
53-
XCTAssertEqual(secondCall?.functionName, "someFunction")
52+
#expect(firstPrint?.functionName == "print")
53+
#expect(secondCall?.functionName == "someFunction")
5454

55-
assertExpressionsEqual(firstPrint!.arguments, [D2ScriptValue.string("Hello world!")])
56-
assertExpressionsEqual(secondCall!.arguments, [D2ScriptValue.string("Test argument"), D2ScriptValue.string("ABC")])
55+
expectExpressionsEqual(firstPrint!.arguments, [D2ScriptValue.string("Hello world!")])
56+
expectExpressionsEqual(secondCall!.arguments, [D2ScriptValue.string("Test argument"), D2ScriptValue.string("ABC")])
5757
}
5858

59-
func testIdentifierExpressions() throws {
59+
@Test func identifierExpressions() throws {
6060
let simpleProgram2 = """
6161
command simpleProgram {
6262
someVariable = 4.5
@@ -71,31 +71,31 @@ final class D2ScriptParserTests: XCTestCase {
7171

7272
let assignment1 = statements?[0] as? D2ScriptAssignment
7373
let assignment2 = statements?[1] as? D2ScriptAssignment
74-
XCTAssertEqual(assignment1?.identifier, "someVariable")
75-
XCTAssertEqual(assignment2?.identifier, "anotherVariable")
76-
assertExpressionsEqual([assignment2?.expression].compactMap { $0 }, [D2ScriptValue.string("abc")])
74+
#expect(assignment1?.identifier == "someVariable")
75+
#expect(assignment2?.identifier == "anotherVariable")
76+
expectExpressionsEqual([assignment2?.expression].compactMap { $0 }, [D2ScriptValue.string("abc")])
7777

7878
let call1 = (statements?[2] as? D2ScriptExpressionStatement)?.expression as? D2ScriptFunctionCall
7979
let call2 = (statements?[3] as? D2ScriptExpressionStatement)?.expression as? D2ScriptFunctionCall
80-
XCTAssertEqual(call1?.functionName, "someFunction")
81-
XCTAssertEqual(call2?.functionName, "anotherFunction")
82-
assertExpressionsEqual(call1!.arguments, [D2ScriptIdentifierExpression(name: "someVariable")])
83-
assertExpressionsEqual(call2!.arguments, [D2ScriptIdentifierExpression(name: "someVariable"), D2ScriptIdentifierExpression(name: "anotherVariable")])
80+
#expect(call1?.functionName == "someFunction")
81+
#expect(call2?.functionName == "anotherFunction")
82+
expectExpressionsEqual(call1!.arguments, [D2ScriptIdentifierExpression(name: "someVariable")])
83+
expectExpressionsEqual(call2!.arguments, [D2ScriptIdentifierExpression(name: "someVariable"), D2ScriptIdentifierExpression(name: "anotherVariable")])
8484
}
8585

86-
private func assertExpressionsEqual(_ actual: [D2ScriptExpression], _ expected: [D2ScriptExpression]) {
86+
func expectExpressionsEqual(_ actual: [D2ScriptExpression], _ expected: [D2ScriptExpression]) {
8787
guard actual.count == expected.count else {
88-
XCTFail("The actual expression count \(actual.count) (\(format(actual))) does not match the expected token count \(expected.count) (\(format(expected)))")
88+
Issue.record("The actual expression count \(actual.count) (\(format(actual))) does not match the expected token count \(expected.count) (\(format(expected)))")
8989
return
9090
}
9191
for i in 0..<actual.count {
92-
XCTAssert(actual[i].isEqual(to: expected[i]), "Expressions mismatched first at index \(i)")
92+
#expect(actual[i].isEqual(to: expected[i]), "Expressions mismatched first at index \(i)")
9393
}
9494
}
9595

96-
private func assertTokensEqual(_ actual: [D2ScriptToken], _ expected: [D2ScriptToken]) {
96+
private func expectTokensEqual(_ actual: [D2ScriptToken], _ expected: [D2ScriptToken]) {
9797
guard actual.count == expected.count else {
98-
XCTFail("The actual token count \(actual.count) (\(format(actual))) does not match the expected token count \(expected.count) (\(format(expected)))")
98+
Issue.record("The actual token count \(actual.count) (\(format(actual))) does not match the expected token count \(expected.count) (\(format(expected)))")
9999
return
100100
}
101101
let count = actual.count
@@ -105,14 +105,14 @@ final class D2ScriptParserTests: XCTestCase {
105105

106106
if case let .numberLiteral(expectedValue) = expectedToken {
107107
guard case let .numberLiteral(actualValue) = actualToken else {
108-
XCTFail("Expected the number token \(expectedToken), but was \(actualToken)")
108+
Issue.record("Expected the number token \(expectedToken), but was \(actualToken)")
109109
return
110110
}
111111
// Ensure that numeric tokens are not compared directly
112112
// since that could result in floating point inaccuracies
113-
XCTAssertEqual(expectedValue, actualValue, accuracy: eps)
113+
#expect(expectedValue.isApproximatelyEqual(to: actualValue))
114114
} else {
115-
XCTAssertEqual(actualToken, expectedToken)
115+
#expect(actualToken == expectedToken)
116116
}
117117
}
118118
}

0 commit comments

Comments
 (0)