add swiftUI code
This commit is contained in:
+87
@@ -0,0 +1,87 @@
|
||||
import XCTest
|
||||
import GRDB
|
||||
|
||||
// A type that adopts DatabaseValueConvertible but does not adopt StatementColumnConvertible
|
||||
private struct IntConvertible: DatabaseValueConvertible {
|
||||
let int: Int
|
||||
init(int: Int) {
|
||||
self.int = int
|
||||
}
|
||||
var databaseValue: DatabaseValue { int.databaseValue }
|
||||
static func fromDatabaseValue(_ dbValue: DatabaseValue) -> IntConvertible? {
|
||||
guard let int = Int.fromDatabaseValue(dbValue) else {
|
||||
return nil
|
||||
}
|
||||
return IntConvertible(int: int)
|
||||
}
|
||||
}
|
||||
|
||||
class DatabaseValueConvertibleCrashTests: GRDBCrashTestCase {
|
||||
|
||||
func testCrashFetchDatabaseValueConvertibleFromStatement() {
|
||||
assertCrash("could not convert NULL to IntConvertible.") {
|
||||
try dbQueue.inDatabase { db in
|
||||
try db.execute(sql: "CREATE TABLE ints (int Int)")
|
||||
try db.execute(sql: "INSERT INTO ints (int) VALUES (1)")
|
||||
try db.execute(sql: "INSERT INTO ints (int) VALUES (NULL)")
|
||||
|
||||
let statement = try db.makeStatement(sql: "SELECT int FROM ints ORDER BY int")
|
||||
let sequence = IntConvertible.fetch(statement)
|
||||
for _ in sequence { }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func testCrashFetchAllDatabaseValueConvertibleFromStatement() {
|
||||
assertCrash("could not convert NULL to IntConvertible.") {
|
||||
try dbQueue.inDatabase { db in
|
||||
try db.execute(sql: "CREATE TABLE ints (int Int)")
|
||||
try db.execute(sql: "INSERT INTO ints (int) VALUES (1)")
|
||||
try db.execute(sql: "INSERT INTO ints (int) VALUES (NULL)")
|
||||
|
||||
let statement = try db.makeStatement(sql: "SELECT int FROM ints ORDER BY int")
|
||||
_ = IntConvertible.fetchAll(statement)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func testCrashFetchDatabaseValueConvertibleFromDatabase() {
|
||||
assertCrash("could not convert NULL to IntConvertible.") {
|
||||
try dbQueue.inDatabase { db in
|
||||
try db.execute(sql: "CREATE TABLE ints (int Int)")
|
||||
try db.execute(sql: "INSERT INTO ints (int) VALUES (1)")
|
||||
try db.execute(sql: "INSERT INTO ints (int) VALUES (NULL)")
|
||||
|
||||
let sequence = IntConvertible.fetch(db, "SELECT int FROM ints ORDER BY int")
|
||||
for _ in sequence { }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func testCrashFetchAllDatabaseValueConvertibleFromDatabase() {
|
||||
assertCrash("could not convert NULL to IntConvertible.") {
|
||||
try dbQueue.inDatabase { db in
|
||||
try db.execute(sql: "CREATE TABLE ints (int Int)")
|
||||
try db.execute(sql: "INSERT INTO ints (int) VALUES (1)")
|
||||
try db.execute(sql: "INSERT INTO ints (int) VALUES (NULL)")
|
||||
|
||||
_ = IntConvertible.fetchAll(db, sql: "SELECT int FROM ints ORDER BY int")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func testCrashDatabaseValueConvertibleInvalidConversionFromNULL() {
|
||||
assertCrash("could not convert NULL to IntConvertible.") {
|
||||
let row = Row(["int": nil])
|
||||
_ = row["int"] as IntConvertible
|
||||
}
|
||||
}
|
||||
|
||||
func testCrashDatabaseValueConvertibleInvalidConversionFromInvalidType() {
|
||||
assertCrash("could not convert \"foo\" to IntConvertible") {
|
||||
let row = Row(["int": "foo"])
|
||||
_ = row["int"] as IntConvertible
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user