mirror of
https://github.com/JohnEstropia/CoreStore.git
synced 2026-03-20 16:44:08 +01:00
fixed migrationchain validation
This commit is contained in:
@@ -115,6 +115,8 @@ public struct MigrationChain: NilLiteralConvertible, StringLiteralConvertible, D
|
|||||||
|
|
||||||
if let _ = versionTree.updateValue(tuple.1, forKey: tuple.0) {
|
if let _ = versionTree.updateValue(tuple.1, forKey: tuple.0) {
|
||||||
|
|
||||||
|
CoreStore.assert(false, "\(typeName(MigrationChain))'s migration chain could not be created due to ambiguous version paths.")
|
||||||
|
|
||||||
valid = false
|
valid = false
|
||||||
}
|
}
|
||||||
return versionTree
|
return versionTree
|
||||||
@@ -133,7 +135,9 @@ public struct MigrationChain: NilLiteralConvertible, StringLiteralConvertible, D
|
|||||||
var version = start
|
var version = start
|
||||||
while let nextVersion = versionTree[version] where nextVersion != version {
|
while let nextVersion = versionTree[version] where nextVersion != version {
|
||||||
|
|
||||||
if checklist.contains(version) {
|
if checklist.contains(nextVersion) {
|
||||||
|
|
||||||
|
CoreStore.assert(false, "\(typeName(MigrationChain))'s migration chain could not be created due to looping version paths.")
|
||||||
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,6 +25,8 @@
|
|||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
import XCTest
|
import XCTest
|
||||||
|
|
||||||
|
@testable
|
||||||
import CoreStore
|
import CoreStore
|
||||||
|
|
||||||
class CoreStoreTests: XCTestCase {
|
class CoreStoreTests: XCTestCase {
|
||||||
@@ -41,6 +43,42 @@ class CoreStoreTests: XCTestCase {
|
|||||||
super.tearDown()
|
super.tearDown()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func testMigrationChains() {
|
||||||
|
|
||||||
|
let emptyChain: MigrationChain = nil
|
||||||
|
XCTAssertTrue(emptyChain.valid, "emptyChain.valid")
|
||||||
|
XCTAssertTrue(emptyChain.empty, "emptyChain.empty")
|
||||||
|
|
||||||
|
let normalChain: MigrationChain = "version1"
|
||||||
|
XCTAssertTrue(normalChain.valid, "normalChain.valid")
|
||||||
|
XCTAssertTrue(normalChain.empty, "normalChain.empty")
|
||||||
|
|
||||||
|
let linearChain: MigrationChain = ["version1", "version2", "version3", "version4"]
|
||||||
|
XCTAssertTrue(linearChain.valid, "linearChain.valid")
|
||||||
|
XCTAssertFalse(linearChain.empty, "linearChain.empty")
|
||||||
|
|
||||||
|
let treeChain: MigrationChain = [
|
||||||
|
"version1": "version4",
|
||||||
|
"version2": "version3",
|
||||||
|
"version3": "version4"
|
||||||
|
]
|
||||||
|
XCTAssertTrue(treeChain.valid, "treeChain.valid")
|
||||||
|
XCTAssertFalse(treeChain.empty, "treeChain.empty")
|
||||||
|
|
||||||
|
// The cases below will trigger assertion failures internally
|
||||||
|
|
||||||
|
// let linearLoopChain: MigrationChain = ["version1", "version2", "version1", "version3", "version4"]
|
||||||
|
// XCTAssertFalse(linearLoopChain.valid, "linearLoopChain.valid")
|
||||||
|
//
|
||||||
|
// let treeAmbiguousChain: MigrationChain = [
|
||||||
|
// "version1": "version4",
|
||||||
|
// "version2": "version3",
|
||||||
|
// "version1": "version2",
|
||||||
|
// "version3": "version4"
|
||||||
|
// ]
|
||||||
|
// XCTAssertFalse(treeAmbiguousChain.valid, "treeAmbiguousChain.valid")
|
||||||
|
}
|
||||||
|
|
||||||
func testExample() {
|
func testExample() {
|
||||||
|
|
||||||
let stack = DataStack(modelName: "Model", bundle: NSBundle(forClass: self.dynamicType))
|
let stack = DataStack(modelName: "Model", bundle: NSBundle(forClass: self.dynamicType))
|
||||||
|
|||||||
Reference in New Issue
Block a user