WIP: prototype for ManagedObjectProtocol

This commit is contained in:
John Estropia
2017-04-05 21:56:19 +09:00
parent 258c237100
commit 8b77e4e5a0
44 changed files with 1244 additions and 823 deletions

View File

@@ -37,7 +37,7 @@ class BaseTestCase: XCTestCase {
@nonobjc
@discardableResult
func prepareStack<T>(configurations: [String?] = [nil], _ closure: (_ dataStack: DataStack) -> T) -> T {
func prepareStack<T>(configurations: [ModelConfiguration] = [nil], _ closure: (_ dataStack: DataStack) -> T) -> T {
let stack = DataStack(
modelName: "Model",

View File

@@ -28,7 +28,7 @@ class BaseTestDataTestCase: BaseTestCase {
}()
@nonobjc
func prepareTestDataForStack(_ stack: DataStack, configurations: [String?] = [nil]) {
func prepareTestDataForStack(_ stack: DataStack, configurations: [ModelConfiguration] = [nil]) {
try! stack.perform(
synchronous: { (transaction) in

View File

@@ -13,7 +13,7 @@ import CoreData
@testable import CoreStore
class Bird: CoreStoreManagedObject {
class Bird: ManagedObject {
let species = Attribute.Required<String>("species", default: "Swift")
}
@@ -28,10 +28,8 @@ class DynamicModelTests: BaseTestDataTestCase {
func testDynamicModels_CanBeDeclaredCorrectly() {
let birdEntity = Entity<Bird>("Bird")
let mascotEntity = Entity<Mascot>("Mascot")
let dataStack = DataStack(
dynamicModel: ModelVersion(
dynamicModel: ObjectModel(
version: "V1",
entities: [
Entity<Bird>("Bird"),
@@ -54,14 +52,14 @@ class DynamicModelTests: BaseTestDataTestCase {
stack.perform(
asynchronous: { (transaction) in
let bird = Bird(transaction.create(Into<NSManagedObject>(birdEntity.dynamicClass)))
let bird = transaction.create(Into<Bird>())
XCTAssertEqual(bird.species*, "Swift")
XCTAssertTrue(type(of: bird.species*) == String.self)
bird.species .= "Sparrow"
XCTAssertEqual(bird.species*, "Sparrow")
let mascot = Mascot(transaction.create(Into<NSManagedObject>(mascotEntity.dynamicClass)))
let mascot = transaction.create(Into<Mascot>())
XCTAssertEqual(mascot.species*, "Swift")
XCTAssertEqual(mascot.nickname*, nil)
@@ -83,20 +81,16 @@ class DynamicModelTests: BaseTestDataTestCase {
let p1 = Bird.where({ $0.species == "Sparrow" })
XCTAssertEqual(p1.predicate, Where("%K == %@", "species", "Sparrow").predicate)
let rawBird = transaction.fetchOne(From<NSManagedObject>(birdEntity.dynamicClass), p1)
XCTAssertNotNil(rawBird)
let bird = Bird(rawBird)
XCTAssertEqual(bird.species*, "Sparrow")
let bird = transaction.fetchOne(From<Bird>())
XCTAssertNotNil(bird)
XCTAssertEqual(bird!.species*, "Sparrow")
let p2 = Mascot.where({ $0.nickname == "Riko" })
XCTAssertEqual(p2.predicate, Where("%K == %@", "nickname", "Riko").predicate)
let rawMascot = transaction.fetchOne(From<NSManagedObject>(mascotEntity.dynamicClass), p2)
XCTAssertNotNil(rawMascot)
let mascot = Mascot(rawMascot)
XCTAssertEqual(mascot.nickname*, "Riko")
let mascot = transaction.fetchOne(From<Mascot>())
XCTAssertNotNil(mascot)
XCTAssertEqual(mascot!.nickname*, "Riko")
let p3 = Mascot.where({ $0.year == 2016 })
XCTAssertEqual(p3.predicate, Where("%K == %@", "year", 2016).predicate)
@@ -116,7 +110,7 @@ class DynamicModelTests: BaseTestDataTestCase {
}
@nonobjc
func prepareStack(_ dataStack: DataStack, configurations: [String?] = [nil], _ closure: (_ dataStack: DataStack) -> Void) {
func prepareStack(_ dataStack: DataStack, configurations: [ModelConfiguration] = [nil], _ closure: (_ dataStack: DataStack) -> Void) {
do {

View File

@@ -36,7 +36,7 @@ final class FetchTests: BaseTestDataTestCase {
@objc
dynamic func test_ThatDataStacksAndTransactions_CanFetchOneExisting() {
let configurations: [String?] = ["Config1"]
let configurations: [ModelConfiguration] = ["Config1"]
self.prepareStack(configurations: configurations) { (stack) in
self.prepareTestDataForStack(stack, configurations: configurations)
@@ -139,7 +139,7 @@ final class FetchTests: BaseTestDataTestCase {
@objc
dynamic func test_ThatDataStacksAndTransactions_CanFetchAllExisting() {
let configurations: [String?] = ["Config1"]
let configurations: [ModelConfiguration] = ["Config1"]
self.prepareStack(configurations: configurations) { (stack) in
self.prepareTestDataForStack(stack, configurations: configurations)
@@ -274,7 +274,7 @@ final class FetchTests: BaseTestDataTestCase {
@objc
dynamic func test_ThatDataStacks_CanFetchOneFromDefaultConfiguration() {
let configurations: [String?] = [nil]
let configurations: [ModelConfiguration] = [nil]
self.prepareStack(configurations: configurations) { (stack) in
self.prepareTestDataForStack(stack, configurations: configurations)
@@ -413,7 +413,7 @@ final class FetchTests: BaseTestDataTestCase {
@objc
dynamic func test_ThatDataStacks_CanFetchOneFromSingleConfiguration() {
let configurations: [String?] = [nil, "Config1", "Config2"]
let configurations: [ModelConfiguration] = [nil, "Config1", "Config2"]
self.prepareStack(configurations: configurations) { (stack) in
self.prepareTestDataForStack(stack, configurations: configurations)
@@ -596,7 +596,7 @@ final class FetchTests: BaseTestDataTestCase {
@objc
dynamic func test_ThatDataStacks_CanFetchOneFromMultipleConfigurations() {
let configurations: [String?] = [nil, "Config1", "Config2"]
let configurations: [ModelConfiguration] = [nil, "Config1", "Config2"]
self.prepareStack(configurations: configurations) { (stack) in
self.prepareTestDataForStack(stack, configurations: configurations)
@@ -739,7 +739,7 @@ final class FetchTests: BaseTestDataTestCase {
@objc
dynamic func test_ThatDataStacks_CanFetchAllFromDefaultConfiguration() {
let configurations: [String?] = [nil]
let configurations: [ModelConfiguration] = [nil]
self.prepareStack(configurations: configurations) { (stack) in
self.prepareTestDataForStack(stack, configurations: configurations)
@@ -948,7 +948,7 @@ final class FetchTests: BaseTestDataTestCase {
@objc
dynamic func test_ThatDataStacks_CanFetchAllFromSingleConfiguration() {
let configurations: [String?] = [nil, "Config1", "Config2"]
let configurations: [ModelConfiguration] = [nil, "Config1", "Config2"]
self.prepareStack(configurations: configurations) { (stack) in
self.prepareTestDataForStack(stack, configurations: configurations)
@@ -1185,7 +1185,7 @@ final class FetchTests: BaseTestDataTestCase {
@objc
dynamic func test_ThatDataStacks_CanFetchAllFromMultipleConfigurations() {
let configurations: [String?] = [nil, "Config1", "Config2"]
let configurations: [ModelConfiguration] = [nil, "Config1", "Config2"]
self.prepareStack(configurations: configurations) { (stack) in
self.prepareTestDataForStack(stack, configurations: configurations)
@@ -1384,7 +1384,7 @@ final class FetchTests: BaseTestDataTestCase {
@objc
dynamic func test_ThatDataStacks_CanFetchCountFromDefaultConfiguration() {
let configurations: [String?] = [nil]
let configurations: [ModelConfiguration] = [nil]
self.prepareStack(configurations: configurations) { (stack) in
self.prepareTestDataForStack(stack, configurations: configurations)
@@ -1507,7 +1507,7 @@ final class FetchTests: BaseTestDataTestCase {
@objc
dynamic func test_ThatDataStacks_CanFetchCountFromSingleConfiguration() {
let configurations: [String?] = [nil, "Config1", "Config2"]
let configurations: [ModelConfiguration] = [nil, "Config1", "Config2"]
self.prepareStack(configurations: configurations) { (stack) in
self.prepareTestDataForStack(stack, configurations: configurations)
@@ -1666,7 +1666,7 @@ final class FetchTests: BaseTestDataTestCase {
@objc
dynamic func test_ThatDataStacks_CanFetchCountFromMultipleConfigurations() {
let configurations: [String?] = [nil, "Config1", "Config2"]
let configurations: [ModelConfiguration] = [nil, "Config1", "Config2"]
self.prepareStack(configurations: configurations) { (stack) in
self.prepareTestDataForStack(stack, configurations: configurations)
@@ -1785,7 +1785,7 @@ final class FetchTests: BaseTestDataTestCase {
@objc
dynamic func test_ThatTransactions_CanFetchOneFromDefaultConfiguration() {
let configurations: [String?] = [nil]
let configurations: [ModelConfiguration] = [nil]
self.prepareStack(configurations: configurations) { (stack) in
self.prepareTestDataForStack(stack, configurations: configurations)
@@ -1932,7 +1932,7 @@ final class FetchTests: BaseTestDataTestCase {
@objc
dynamic func test_ThatTransactions_CanFetchOneFromSingleConfiguration() {
let configurations: [String?] = [nil, "Config1", "Config2"]
let configurations: [ModelConfiguration] = [nil, "Config1", "Config2"]
self.prepareStack(configurations: configurations) { (stack) in
self.prepareTestDataForStack(stack, configurations: configurations)
@@ -2126,7 +2126,7 @@ final class FetchTests: BaseTestDataTestCase {
@objc
dynamic func test_ThatTransactions_CanFetchOneFromMultipleConfigurations() {
let configurations: [String?] = [nil, "Config1", "Config2"]
let configurations: [ModelConfiguration] = [nil, "Config1", "Config2"]
self.prepareStack(configurations: configurations) { (stack) in
self.prepareTestDataForStack(stack, configurations: configurations)
@@ -2277,7 +2277,7 @@ final class FetchTests: BaseTestDataTestCase {
@objc
dynamic func test_ThatTransactions_CanFetchAllFromDefaultConfiguration() {
let configurations: [String?] = [nil]
let configurations: [ModelConfiguration] = [nil]
self.prepareStack(configurations: configurations) { (stack) in
self.prepareTestDataForStack(stack, configurations: configurations)
@@ -2494,7 +2494,7 @@ final class FetchTests: BaseTestDataTestCase {
@objc
dynamic func test_ThatTransactions_CanFetchAllFromSingleConfiguration() {
let configurations: [String?] = [nil, "Config1", "Config2"]
let configurations: [ModelConfiguration] = [nil, "Config1", "Config2"]
self.prepareStack(configurations: configurations) { (stack) in
self.prepareTestDataForStack(stack, configurations: configurations)
@@ -2754,7 +2754,7 @@ final class FetchTests: BaseTestDataTestCase {
@objc
dynamic func test_ThatTransactions_CanFetchAllFromMultipleConfigurations() {
let configurations: [String?] = [nil, "Config1", "Config2"]
let configurations: [ModelConfiguration] = [nil, "Config1", "Config2"]
self.prepareStack(configurations: configurations) { (stack) in
self.prepareTestDataForStack(stack, configurations: configurations)
@@ -2973,7 +2973,7 @@ final class FetchTests: BaseTestDataTestCase {
@objc
dynamic func test_ThatTransactions_CanFetchCountFromDefaultConfiguration() {
let configurations: [String?] = [nil]
let configurations: [ModelConfiguration] = [nil]
self.prepareStack(configurations: configurations) { (stack) in
self.prepareTestDataForStack(stack, configurations: configurations)
@@ -3104,7 +3104,7 @@ final class FetchTests: BaseTestDataTestCase {
@objc
dynamic func test_ThatTransactions_CanFetchCountFromSingleConfiguration() {
let configurations: [String?] = [nil, "Config1", "Config2"]
let configurations: [ModelConfiguration] = [nil, "Config1", "Config2"]
self.prepareStack(configurations: configurations) { (stack) in
self.prepareTestDataForStack(stack, configurations: configurations)
@@ -3274,7 +3274,7 @@ final class FetchTests: BaseTestDataTestCase {
@objc
dynamic func test_ThatTransactions_CanFetchCountFromMultipleConfigurations() {
let configurations: [String?] = [nil, "Config1", "Config2"]
let configurations: [ModelConfiguration] = [nil, "Config1", "Config2"]
self.prepareStack(configurations: configurations) { (stack) in
self.prepareTestDataForStack(stack, configurations: configurations)

View File

@@ -38,7 +38,7 @@ final class FromTests: BaseTestCase {
do {
let from = From()
let from = From<NSManagedObject>()
XCTAssert(from.entityClass === NSManagedObject.self)
XCTAssertNil(from.configurations)
}

View File

@@ -36,7 +36,7 @@ final class IntoTests: XCTestCase {
@objc
dynamic func test_ThatIntoClauseConstants_AreCorrect() {
XCTAssertEqual(Into<NSManagedObject>.defaultConfigurationName, "PF_DEFAULT_CONFIGURATION_NAME")
XCTAssertEqual(DataStack.defaultConfigurationName, "PF_DEFAULT_CONFIGURATION_NAME")
}
@objc
@@ -44,7 +44,7 @@ final class IntoTests: XCTestCase {
do {
let into = Into()
let into = Into<NSManagedObject>()
XCTAssert(into.entityClass === NSManagedObject.self)
XCTAssertNil(into.configuration)
XCTAssertTrue(into.inferStoreIfPossible)
@@ -58,14 +58,7 @@ final class IntoTests: XCTestCase {
}
do {
let into = Into<TestEntity1>()
XCTAssert(into.entityClass === TestEntity1.self)
XCTAssertNil(into.configuration)
XCTAssertTrue(into.inferStoreIfPossible)
}
do {
let into = Into(TestEntity1.self as AnyClass)
let into = Into(TestEntity1.self)
XCTAssert(into.entityClass === TestEntity1.self)
XCTAssertNil(into.configuration)
XCTAssertTrue(into.inferStoreIfPossible)
@@ -84,13 +77,6 @@ final class IntoTests: XCTestCase {
XCTAssertEqual(into.configuration, "Config1")
XCTAssertFalse(into.inferStoreIfPossible)
}
do {
let into = Into(TestEntity1.self as AnyClass, "Config1")
XCTAssert(into.entityClass === TestEntity1.self)
XCTAssertEqual(into.configuration, "Config1")
XCTAssertFalse(into.inferStoreIfPossible)
}
}
@objc
@@ -98,43 +84,30 @@ final class IntoTests: XCTestCase {
do {
let into = Into()
XCTAssertEqual(into, Into())
let into = Into<NSManagedObject>()
XCTAssertEqual(into, Into<NSManagedObject>())
XCTAssertEqual(into, Into(NSManagedObject.self as AnyClass))
XCTAssertFalse(into == Into<TestEntity1>())
XCTAssertEqual(into, Into(NSManagedObject.self))
XCTAssertNotEqual(into, Into<NSManagedObject>(TestEntity1.self))
XCTAssertNotEqual(into, Into<NSManagedObject>("Config1"))
}
do {
let into = Into<TestEntity1>()
XCTAssertEqual(into, Into<TestEntity1>())
XCTAssertEqual(into, Into(TestEntity1.self as AnyClass))
XCTAssertFalse(into == Into<TestEntity2>())
XCTAssertEqual(into, Into(TestEntity1.self))
XCTAssertNotEqual(into, Into<TestEntity1>("Config1"))
}
do {
let into = Into<TestEntity1>()
XCTAssertEqual(into, Into<TestEntity1>())
XCTAssertEqual(into, Into(TestEntity1.self as AnyClass))
XCTAssertFalse(into == Into<TestEntity2>())
XCTAssertNotEqual(into, Into<TestEntity1>("Config1"))
}
do {
let into = Into(TestEntity1.self as AnyClass)
let into = Into(TestEntity1.self)
XCTAssert(into == Into<TestEntity1>())
XCTAssertEqual(into, Into(TestEntity1.self))
XCTAssertFalse(into == Into<TestEntity2>())
XCTAssertFalse(into == Into<TestEntity1>("Config1"))
}
do {
let into = Into<TestEntity1>("Config1")
XCTAssertEqual(into, Into(TestEntity1.self, "Config1"))
XCTAssertEqual(into, Into(TestEntity1.self as AnyClass, "Config1"))
XCTAssertFalse(into == Into<TestEntity2>("Config1"))
XCTAssertNotEqual(into, Into<TestEntity1>("Config2"))
}
do {
@@ -142,16 +115,14 @@ final class IntoTests: XCTestCase {
let into = Into(TestEntity1.self, "Config1")
XCTAssertEqual(into, Into(TestEntity1.self, "Config1"))
XCTAssertEqual(into, Into<TestEntity1>("Config1"))
XCTAssertFalse(into == Into<TestEntity2>("Config1"))
XCTAssertNotEqual(into, Into<TestEntity1>("Config2"))
}
do {
let into = Into(TestEntity1.self as AnyClass, "Config1")
XCTAssert(into == Into<TestEntity1>("Config1"))
let into = Into(TestEntity1.self, "Config1")
XCTAssertEqual(into, Into<TestEntity1>("Config1"))
XCTAssertEqual(into, Into(TestEntity1.self, "Config1"))
XCTAssertFalse(into == Into<TestEntity2>("Config1"))
XCTAssertFalse(into == Into<TestEntity1>("Config2"))
XCTAssertNotEqual(into, Into<TestEntity1>("Config2"))
}
}
@@ -160,45 +131,9 @@ final class IntoTests: XCTestCase {
do {
let into = Into()
let into = Into<NSManagedObject>()
let objcInto = into.bridgeToObjectiveC
XCTAssertEqual(into, objcInto.bridgeToSwift)
}
do {
let into = Into<TestEntity1>()
let objcInto = into.bridgeToObjectiveC
XCTAssertTrue(into == objcInto.bridgeToSwift)
}
do {
let into = Into(TestEntity1.self as AnyClass)
let objcInto = into.bridgeToObjectiveC
XCTAssertEqual(into, objcInto.bridgeToSwift)
}
do {
let into = Into(TestEntity1.self as AnyClass)
let objcInto = into.bridgeToObjectiveC
XCTAssertEqual(into, objcInto.bridgeToSwift)
}
do {
let into = Into<TestEntity1>("Config1")
let objcInto = into.bridgeToObjectiveC
XCTAssertTrue(into == objcInto.bridgeToSwift)
}
do {
let into = Into(TestEntity1.self, "Config1")
let objcInto = into.bridgeToObjectiveC
XCTAssertTrue(into == objcInto.bridgeToSwift)
}
do {
let into = Into(TestEntity1.self as AnyClass, "Config1")
let objcInto = into.bridgeToObjectiveC
XCTAssertTrue(into == objcInto.bridgeToSwift)
}
}
}

View File

@@ -36,7 +36,7 @@ class QueryTests: BaseTestDataTestCase {
@objc
dynamic func test_ThatDataStacks_CanQueryAttributeValue() {
let configurations: [String?] = [nil]
let configurations: [ModelConfiguration] = [nil]
self.prepareStack(configurations: configurations) { (stack) in
self.prepareTestDataForStack(stack, configurations: configurations)
@@ -220,7 +220,7 @@ class QueryTests: BaseTestDataTestCase {
@objc
dynamic func test_ThatDataStacks_CanQueryAverageValue() {
let configurations: [String?] = [nil]
let configurations: [ModelConfiguration] = [nil]
self.prepareStack(configurations: configurations) { (stack) in
self.prepareTestDataForStack(stack, configurations: configurations)
@@ -399,7 +399,7 @@ class QueryTests: BaseTestDataTestCase {
@objc
dynamic func test_ThatDataStacks_CanQueryCountValue() {
let configurations: [String?] = [nil]
let configurations: [ModelConfiguration] = [nil]
self.prepareStack(configurations: configurations) { (stack) in
self.prepareTestDataForStack(stack, configurations: configurations)
@@ -576,7 +576,7 @@ class QueryTests: BaseTestDataTestCase {
@objc
dynamic func test_ThatDataStacks_CanQueryMaximumValue() {
let configurations: [String?] = [nil]
let configurations: [ModelConfiguration] = [nil]
self.prepareStack(configurations: configurations) { (stack) in
self.prepareTestDataForStack(stack, configurations: configurations)
@@ -760,7 +760,7 @@ class QueryTests: BaseTestDataTestCase {
@objc
dynamic func test_ThatDataStacks_CanQueryMinimumValue() {
let configurations: [String?] = [nil]
let configurations: [ModelConfiguration] = [nil]
self.prepareStack(configurations: configurations) { (stack) in
self.prepareTestDataForStack(stack, configurations: configurations)
@@ -944,7 +944,7 @@ class QueryTests: BaseTestDataTestCase {
@objc
dynamic func test_ThatDataStacks_CanQuerySumValue() {
let configurations: [String?] = [nil]
let configurations: [ModelConfiguration] = [nil]
self.prepareStack(configurations: configurations) { (stack) in
self.prepareTestDataForStack(stack, configurations: configurations)
@@ -1122,7 +1122,7 @@ class QueryTests: BaseTestDataTestCase {
@objc
dynamic func test_ThatDataStacks_CanQueryObjectIDValue() {
let configurations: [String?] = [nil]
let configurations: [ModelConfiguration] = [nil]
self.prepareStack(configurations: configurations) { (stack) in
self.prepareTestDataForStack(stack, configurations: configurations)
@@ -1290,7 +1290,7 @@ class QueryTests: BaseTestDataTestCase {
@objc
dynamic func test_ThatDataStacks_CanQueryAttributes() {
let configurations: [String?] = [nil]
let configurations: [ModelConfiguration] = [nil]
self.prepareStack(configurations: configurations) { (stack) in
self.prepareTestDataForStack(stack, configurations: configurations)
@@ -1344,7 +1344,7 @@ class QueryTests: BaseTestDataTestCase {
@objc
dynamic func test_ThatDataStacks_CanQueryAggregates() {
let configurations: [String?] = [nil]
let configurations: [ModelConfiguration] = [nil]
self.prepareStack(configurations: configurations) { (stack) in
self.prepareTestDataForStack(stack, configurations: configurations)