Files
data-lite-core/Tests/DataLiteCoreTests/Structures/SQLiteRowTests.swift

92 lines
2.6 KiB
Swift

import XCTest
import DataLiteCore
final class SQLiteRowTests: XCTestCase {
func testInitEmptyRow() {
let row = SQLiteRow()
XCTAssertTrue(row.isEmpty)
XCTAssertEqual(row.count, 0)
}
func testUpdateColumnPosition() {
var row = SQLiteRow()
row["name"] = .text("Alice")
row["age"] = .int(30)
row["name"] = .text("Bob")
XCTAssertEqual(row[0].column, "name")
XCTAssertEqual(row[0].value, .text("Bob"))
}
func testSubscriptByColumn() {
var row = SQLiteRow()
row["name"] = .text("Alice")
XCTAssertEqual(row["name"], .text("Alice"))
XCTAssertNil(row["age"])
row["age"] = SQLiteRawValue.int(30)
XCTAssertEqual(row["age"], .int(30))
}
func testSubscriptByIndex() {
var row = SQLiteRow()
row["name"] = .text("Alice")
row["age"] = .int(30)
let firstElement = row[row.startIndex]
XCTAssertEqual(firstElement.column, "name")
XCTAssertEqual(firstElement.value, .text("Alice"))
let secondElement = row[row.index(after: row.startIndex)]
XCTAssertEqual(secondElement.column, "age")
XCTAssertEqual(secondElement.value, .int(30))
}
func testDescription() {
var row = SQLiteRow()
row["name"] = .text("Alice")
row["age"] = .int(30)
let expectedDescription = #"["name": 'Alice', "age": 30]"#
XCTAssertEqual(row.description, expectedDescription)
}
func testCountAndIsEmpty() {
var row = SQLiteRow()
XCTAssertTrue(row.isEmpty)
XCTAssertEqual(row.count, 0)
row["name"] = .text("Alice")
XCTAssertFalse(row.isEmpty)
XCTAssertEqual(row.count, 1)
row["age"] = .int(30)
XCTAssertEqual(row.count, 2)
row["name"] = nil
XCTAssertEqual(row.count, 1)
}
func testIteration() {
var row = SQLiteRow()
row["name"] = .text("Alice")
row["age"] = .int(30)
row["city"] = .text("Wonderland")
var elements: [SQLiteRow.Element] = []
for (column, value) in row {
elements.append((column, value))
}
XCTAssertEqual(elements.count, 3)
XCTAssertEqual(elements[0].column, "name")
XCTAssertEqual(elements[0].value, .text("Alice"))
XCTAssertEqual(elements[1].column, "age")
XCTAssertEqual(elements[1].value, .int(30))
XCTAssertEqual(elements[2].column, "city")
XCTAssertEqual(elements[2].value, .text("Wonderland"))
}
}