This commit is contained in:
zeus
2025-01-22 16:22:33 +08:00
parent 09b9cec8ec
commit 738c373a77
2534 changed files with 0 additions and 486292 deletions
@@ -1,97 +0,0 @@
import XCTest
import GRDB
private class NonDatabaseConvertibleObject: NSObject
{ }
class StatementArgumentsFoundationTests: GRDBTestCase {
override func setup(_ dbWriter: some DatabaseWriter) throws {
var migrator = DatabaseMigrator()
migrator.registerMigration("createPersons") { db in
try db.execute(sql: """
CREATE TABLE persons (
id INTEGER PRIMARY KEY,
creationDate TEXT,
name TEXT NOT NULL,
age INT)
""")
}
try migrator.migrate(dbWriter)
}
func testStatementArgumentsArrayInitializer() throws {
let dbQueue = try makeDatabaseQueue()
try dbQueue.inTransaction { db in
let statement = try db.makeStatement(sql: "INSERT INTO persons (name, age) VALUES (?, ?)")
let persons: [[Any]] = [
["Arthur", 41],
["Barbara", 38],
]
for person in persons {
try statement.execute(arguments: StatementArguments(person)!)
}
return .commit
}
try dbQueue.inDatabase { db in
let rows = try Row.fetchAll(db, sql: "SELECT * FROM persons ORDER BY name")
XCTAssertEqual(rows.count, 2)
XCTAssertEqual(rows[0]["name"] as String, "Arthur")
XCTAssertEqual(rows[0]["age"] as Int, 41)
XCTAssertEqual(rows[1]["name"] as String, "Barbara")
XCTAssertEqual(rows[1]["age"] as Int, 38)
}
}
func testStatementArgumentsInitializerFromInvalidArray() {
do {
let array: [Any] = ["Arthur", NonDatabaseConvertibleObject()]
XCTAssertNil(StatementArguments(array))
}
do {
let array: NSArray = ["Arthur", NonDatabaseConvertibleObject()]
XCTAssertNil(StatementArguments(array as! [Any]))
}
}
func testStatementArgumentsDictionaryInitializer() throws {
let dbQueue = try makeDatabaseQueue()
try dbQueue.inTransaction { db in
let statement = try db.makeStatement(sql: "INSERT INTO persons (name, age) VALUES (:name, :age)")
let persons: [[AnyHashable: Any]] = [
["name": "Arthur", "age": 41],
["name": "Barbara", "age": 38],
]
for person in persons {
try statement.execute(arguments: StatementArguments(person)!)
}
return .commit
}
try dbQueue.inDatabase { db in
let rows = try Row.fetchAll(db, sql: "SELECT * FROM persons ORDER BY name")
XCTAssertEqual(rows.count, 2)
XCTAssertEqual(rows[0]["name"] as String, "Arthur")
XCTAssertEqual(rows[0]["age"] as Int, 41)
XCTAssertEqual(rows[1]["name"] as String, "Barbara")
XCTAssertEqual(rows[1]["age"] as Int, 38)
}
}
func testStatementArgumentsNSDictionaryInitializerFromInvalidNSDictionary() {
let dictionary: [AnyHashable: Any] = ["a": NSObject()]
let arguments = StatementArguments(dictionary)
XCTAssertTrue(arguments == nil)
let dictionaryInvalidKeyType: [AnyHashable: Any] = [NSNumber(value: 1): "bar"]
let arguments2 = StatementArguments(dictionaryInvalidKeyType)
XCTAssertTrue(arguments2 == nil)
}
}