From 5b365c642df195f065c73bb30595770a1b6b65ce Mon Sep 17 00:00:00 2001 From: John Estropia Date: Fri, 8 Feb 2019 18:42:19 +0900 Subject: [PATCH] add tests for expressio evaluations --- CoreStoreTests/DynamicModelTests.swift | 7 +- CoreStoreTests/WhereTests.swift | 359 ++++++++++++++++--------- 2 files changed, 231 insertions(+), 135 deletions(-) diff --git a/CoreStoreTests/DynamicModelTests.swift b/CoreStoreTests/DynamicModelTests.swift index 6ba5a13..43a1273 100644 --- a/CoreStoreTests/DynamicModelTests.swift +++ b/CoreStoreTests/DynamicModelTests.swift @@ -71,8 +71,13 @@ class Person: CoreStoreObject { customGetter: Person.getDisplayName(_:), affectedByKeyPaths: Person.keyPathsAffectingDisplayName() ) + + let spouse = Relationship.ToOne("spouse") let pets = Relationship.ToManyUnordered("pets", inverse: { $0.master }) + + private let _spouse = Relationship.ToOne("_spouseInverse", inverse: { $0.spouse }) + private static func setTitle(_ partialObject: PartialObject, _ newValue: String) { @@ -127,7 +132,7 @@ class DynamicModelTests: BaseTestDataTestCase { versionLock: [ "Animal": [0x1b59d511019695cf, 0xdeb97e86c5eff179, 0x1cfd80745646cb3, 0x4ff99416175b5b9a], "Dog": [0xe3f0afeb109b283a, 0x29998d292938eb61, 0x6aab788333cfc2a3, 0x492ff1d295910ea7], - "Person": [0x66d8bbfd8b21561f, 0xcecec69ecae3570f, 0xc4b73d71256214ef, 0x89b99bfe3e013e8b] + "Person": [0x2831cf046084d96d, 0xbe19b13ace54641, 0x635a082728b0f6f0, 0x3d4ef2dd4b74a87c] ] ) ) diff --git a/CoreStoreTests/WhereTests.swift b/CoreStoreTests/WhereTests.swift index b0e2b5f..e386bbf 100644 --- a/CoreStoreTests/WhereTests.swift +++ b/CoreStoreTests/WhereTests.swift @@ -64,138 +64,153 @@ final class WhereTests: XCTestCase { do { - XCTAssertEqual( - #keyPath(TestEntity1.testToOne.testEntityID), - (\TestEntity1.testToOne ~ \.testEntityID).description, - String(keyPath: \TestEntity1.testToOne ~ \.testEntityID) - ) - XCTAssertEqual( - #keyPath(TestEntity1.testToOne.testToOne.testToManyUnordered), - (\TestEntity1.testToOne ~ \.testToOne ~ \.testToManyUnordered).description, - String(keyPath: \TestEntity1.testToOne ~ \.testToOne ~ \.testToManyUnordered) - ) - XCTAssertEqual( - #keyPath(TestEntity2.testToOne.testToOne.testToManyOrdered), - (\TestEntity2.testToOne ~ \.testToOne ~ \.testToManyOrdered).description, - String(keyPath: \TestEntity2.testToOne ~ \.testToOne ~ \.testToManyOrdered) - ) + do { + + XCTAssertEqual( + #keyPath(TestEntity1.testToOne.testEntityID), + (\TestEntity1.testToOne ~ \.testEntityID).description, + String(keyPath: \TestEntity1.testToOne ~ \.testEntityID) + ) + XCTAssertEqual( + #keyPath(TestEntity1.testToOne.testToOne.testToManyUnordered), + (\TestEntity1.testToOne ~ \.testToOne ~ \.testToManyUnordered).description, + String(keyPath: \TestEntity1.testToOne ~ \.testToOne ~ \.testToManyUnordered) + ) + XCTAssertEqual( + #keyPath(TestEntity2.testToOne.testToOne.testToManyOrdered), + (\TestEntity2.testToOne ~ \.testToOne ~ \.testToManyOrdered).description, + String(keyPath: \TestEntity2.testToOne ~ \.testToOne ~ \.testToManyOrdered) + ) + } + do { + + XCTAssertEqual( + "master.pets", + (\Animal.master ~ \.pets).description, + String(keyPath: \Animal.master ~ \.pets) + ) + XCTAssertEqual( + "master.pets.species", + (\Animal.master ~ \.pets ~ \.species).description, + String(keyPath: \Animal.master ~ \.pets ~ \.species) + ) + XCTAssertEqual( + "master.pets.master", + (\Animal.master ~ \.pets ~ \.master).description, + String(keyPath: \Animal.master ~ \.pets ~ \.master) + ) + } } do { - XCTAssertEqual( - "master.pets", - (\Animal.master ~ \.pets).description, - String(keyPath: \Animal.master ~ \.pets) - ) - XCTAssertEqual( - "master.pets.species", - (\Animal.master ~ \.pets ~ \.species).description, - String(keyPath: \Animal.master ~ \.pets ~ \.species) - ) - XCTAssertEqual( - "master.pets.master", - (\Animal.master ~ \.pets ~ \.master).description, - String(keyPath: \Animal.master ~ \.pets ~ \.master) - ) + do { + + XCTAssertEqual( + #keyPath(TestEntity1.testToOne.testToManyUnordered) + ".@count", + (\TestEntity1.testToOne ~ \.testToManyUnordered).count().description, + String(keyPath: (\TestEntity1.testToOne ~ \.testToManyUnordered).count()) + ) + XCTAssertEqual( + #keyPath(TestEntity2.testToOne.testToOne.testToManyOrdered) + ".@count", + (\TestEntity2.testToOne ~ \.testToOne ~ \.testToManyOrdered).count().description, + String(keyPath: (\TestEntity2.testToOne ~ \.testToOne ~ \.testToManyOrdered).count()) + ) + } + do { + + XCTAssertEqual( + "master.pets.@count", + (\Animal.master ~ \.pets).count().description, + String(keyPath: (\Animal.master ~ \.pets).count()) + ) + } } do { - XCTAssertEqual( - #keyPath(TestEntity1.testToOne.testToManyUnordered) + ".@count", - (\TestEntity1.testToOne ~ \.testToManyUnordered).count().description, - String(keyPath: (\TestEntity1.testToOne ~ \.testToManyUnordered).count()) - ) - XCTAssertEqual( - #keyPath(TestEntity2.testToOne.testToOne.testToManyOrdered) + ".@count", - (\TestEntity2.testToOne ~ \.testToOne ~ \.testToManyOrdered).count().description, - String(keyPath: (\TestEntity2.testToOne ~ \.testToOne ~ \.testToManyOrdered).count()) - ) + do { + + XCTAssertEqual( + "ANY " + #keyPath(TestEntity1.testToOne.testToManyUnordered), + (\TestEntity1.testToOne ~ \.testToManyUnordered).any().description, + String(keyPath: (\TestEntity1.testToOne ~ \.testToManyUnordered).any()) + ) + XCTAssertEqual( + "ANY " + #keyPath(TestEntity2.testToOne.testToOne.testToManyOrdered), + (\TestEntity2.testToOne ~ \.testToOne ~ \.testToManyOrdered).any().description, + String(keyPath: (\TestEntity2.testToOne ~ \.testToOne ~ \.testToManyOrdered).any()) + ) + } + do { + + XCTAssertEqual( + "ANY master.pets", + (\Animal.master ~ \.pets).any().description, + String(keyPath: (\Animal.master ~ \.pets).any()) + ) + XCTAssertEqual( + "ANY master.pets.species", + (\Animal.master ~ \.pets ~ \.species).any().description, + String(keyPath: (\Animal.master ~ \.pets ~ \.species).any()) + ) + } } do { - XCTAssertEqual( - "master.pets.@count", - (\Animal.master ~ \.pets).count().description, - String(keyPath: (\Animal.master ~ \.pets).count()) - ) + do { + + XCTAssertEqual( + "ALL " + #keyPath(TestEntity1.testToOne.testToManyUnordered), + (\TestEntity1.testToOne ~ \.testToManyUnordered).all().description, + String(keyPath: (\TestEntity1.testToOne ~ \.testToManyUnordered).all()) + ) + XCTAssertEqual( + "ALL " + #keyPath(TestEntity2.testToOne.testToOne.testToManyOrdered), + (\TestEntity2.testToOne ~ \.testToOne ~ \.testToManyOrdered).all().description, + String(keyPath: (\TestEntity2.testToOne ~ \.testToOne ~ \.testToManyOrdered).all()) + ) + } + do { + + XCTAssertEqual( + "ALL master.pets", + (\Animal.master ~ \.pets).all().description, + String(keyPath: (\Animal.master ~ \.pets).all()) + ) + XCTAssertEqual( + "ALL master.pets.species", + (\Animal.master ~ \.pets ~ \.species).all().description, + String(keyPath: (\Animal.master ~ \.pets ~ \.species).all()) + ) + } } do { - XCTAssertEqual( - "ANY " + #keyPath(TestEntity1.testToOne.testToManyUnordered), - (\TestEntity1.testToOne ~ \.testToManyUnordered).any().description, - String(keyPath: (\TestEntity1.testToOne ~ \.testToManyUnordered).any()) - ) - XCTAssertEqual( - "ANY " + #keyPath(TestEntity2.testToOne.testToOne.testToManyOrdered), - (\TestEntity2.testToOne ~ \.testToOne ~ \.testToManyOrdered).any().description, - String(keyPath: (\TestEntity2.testToOne ~ \.testToOne ~ \.testToManyOrdered).any()) - ) - } - do { + do { - XCTAssertEqual( - "ANY master.pets", - (\Animal.master ~ \.pets).any().description, - String(keyPath: (\Animal.master ~ \.pets).any()) - ) - XCTAssertEqual( - "ANY master.pets.species", - (\Animal.master ~ \.pets ~ \.species).any().description, - String(keyPath: (\Animal.master ~ \.pets ~ \.species).any()) - ) - } - do { + XCTAssertEqual( + "NONE " + #keyPath(TestEntity1.testToOne.testToManyUnordered), + (\TestEntity1.testToOne ~ \.testToManyUnordered).none().description, + String(keyPath: (\TestEntity1.testToOne ~ \.testToManyUnordered).none()) + ) + XCTAssertEqual( + "NONE " + #keyPath(TestEntity2.testToOne.testToOne.testToManyOrdered), + (\TestEntity2.testToOne ~ \.testToOne ~ \.testToManyOrdered).none().description, + String(keyPath: (\TestEntity2.testToOne ~ \.testToOne ~ \.testToManyOrdered).none()) + ) + } + do { - XCTAssertEqual( - "ALL " + #keyPath(TestEntity1.testToOne.testToManyUnordered), - (\TestEntity1.testToOne ~ \.testToManyUnordered).all().description, - String(keyPath: (\TestEntity1.testToOne ~ \.testToManyUnordered).all()) - ) - XCTAssertEqual( - "ALL " + #keyPath(TestEntity2.testToOne.testToOne.testToManyOrdered), - (\TestEntity2.testToOne ~ \.testToOne ~ \.testToManyOrdered).all().description, - String(keyPath: (\TestEntity2.testToOne ~ \.testToOne ~ \.testToManyOrdered).all()) - ) - } - do { - - XCTAssertEqual( - "ALL master.pets", - (\Animal.master ~ \.pets).all().description, - String(keyPath: (\Animal.master ~ \.pets).all()) - ) - XCTAssertEqual( - "ALL master.pets.species", - (\Animal.master ~ \.pets ~ \.species).all().description, - String(keyPath: (\Animal.master ~ \.pets ~ \.species).all()) - ) - } - do { - - XCTAssertEqual( - "NONE " + #keyPath(TestEntity1.testToOne.testToManyUnordered), - (\TestEntity1.testToOne ~ \.testToManyUnordered).none().description, - String(keyPath: (\TestEntity1.testToOne ~ \.testToManyUnordered).none()) - ) - XCTAssertEqual( - "NONE " + #keyPath(TestEntity2.testToOne.testToOne.testToManyOrdered), - (\TestEntity2.testToOne ~ \.testToOne ~ \.testToManyOrdered).none().description, - String(keyPath: (\TestEntity2.testToOne ~ \.testToOne ~ \.testToManyOrdered).none()) - ) - } - do { - - XCTAssertEqual( - "NONE master.pets", - (\Animal.master ~ \.pets).none().description, - String(keyPath: (\Animal.master ~ \.pets).none()) - ) - XCTAssertEqual( - "NONE master.pets.species", - (\Animal.master ~ \.pets ~ \.species).none().description, - String(keyPath: (\Animal.master ~ \.pets ~ \.species).none()) - ) + XCTAssertEqual( + "NONE master.pets", + (\Animal.master ~ \.pets).none().description, + String(keyPath: (\Animal.master ~ \.pets).none()) + ) + XCTAssertEqual( + "NONE master.pets.species", + (\Animal.master ~ \.pets ~ \.species).none().description, + String(keyPath: (\Animal.master ~ \.pets ~ \.species).none()) + ) + } } } @@ -205,34 +220,110 @@ final class WhereTests: XCTestCase { do { let dummy = "dummy" - let whereClause: Where = (\.testToOne ~ \.testString) == dummy - let predicate = NSPredicate(format: "\(#keyPath(TestEntity1.testToOne.testString)) == %@", dummy) - XCTAssertEqual(whereClause, Where(predicate)) - XCTAssertEqual(whereClause.predicate, predicate) + do { + + let whereClause: Where = (\.testToOne ~ \.testString) == dummy + let predicate = NSPredicate(format: "\(#keyPath(TestEntity1.testToOne.testString)) == %@", dummy) + XCTAssertEqual(whereClause, Where(predicate)) + XCTAssertEqual(whereClause.predicate, predicate) + } + do { + + let whereClause: Where = (\.master ~ \.name) == dummy + let predicate = NSPredicate(format: "master.name == %@", dummy) + XCTAssertEqual(whereClause, Where(predicate)) + XCTAssertEqual(whereClause.predicate, predicate) + } } do { let dummy = "dummy" - let whereClause: Where = (\.testToOne ~ \.testToOne ~ \.testString) == dummy - let predicate = NSPredicate(format: "\(#keyPath(TestEntity1.testToOne.testToOne.testString)) == %@", dummy) - XCTAssertEqual(whereClause, Where(predicate)) - XCTAssertEqual(whereClause.predicate, predicate) + do { + + let whereClause: Where = (\.testToOne ~ \.testToOne ~ \.testString) == dummy + let predicate = NSPredicate(format: "\(#keyPath(TestEntity1.testToOne.testToOne.testString)) == %@", dummy) + XCTAssertEqual(whereClause, Where(predicate)) + XCTAssertEqual(whereClause.predicate, predicate) + } + do { + + let whereClause: Where = (\.master ~ \.spouse ~ \.name) == dummy + let predicate = NSPredicate(format: "master.spouse.name == %@", dummy) + XCTAssertEqual(whereClause, Where(predicate)) + XCTAssertEqual(whereClause.predicate, predicate) + } } do { let count = 3 - let whereClause: Where = (\.testToOne ~ \.testToManyUnordered).count() == count - let predicate = NSPredicate(format: "\(#keyPath(TestEntity1.testToOne.testToManyUnordered)).@count == %d", count) - XCTAssertEqual(whereClause, Where(predicate)) - XCTAssertEqual(whereClause.predicate, predicate) + do { + + let whereClause: Where = (\.testToOne ~ \.testToManyUnordered).count() == count + let predicate = NSPredicate(format: "\(#keyPath(TestEntity1.testToOne.testToManyUnordered)).@count == %d", count) + XCTAssertEqual(whereClause, Where(predicate)) + XCTAssertEqual(whereClause.predicate, predicate) + } + do { + + let whereClause: Where = (\.master ~ \.pets).count() == count + let predicate = NSPredicate(format: "master.pets.@count == %d", count) + XCTAssertEqual(whereClause, Where(predicate)) + XCTAssertEqual(whereClause.predicate, predicate) + } } do { let dummy = "dummy" - let whereClause: Where = (\.testToOne ~ \.testToManyUnordered ~ \TestEntity1.testString).any() == dummy - let predicate = NSPredicate(format: "ANY \(#keyPath(TestEntity1.testToOne.testToManyUnordered)).\(#keyPath(TestEntity1.testString)) == %@", dummy) - XCTAssertEqual(whereClause, Where(predicate)) - XCTAssertEqual(whereClause.predicate, predicate) + do { + + let whereClause: Where = (\.testToOne ~ \.testToManyUnordered ~ \TestEntity1.testString).any() == dummy + let predicate = NSPredicate(format: "ANY \(#keyPath(TestEntity1.testToOne.testToManyUnordered)).\(#keyPath(TestEntity1.testString)) == %@", dummy) + XCTAssertEqual(whereClause, Where(predicate)) + XCTAssertEqual(whereClause.predicate, predicate) + } + do { + + let whereClause: Where = (\.master ~ \.pets ~ \.species).any() == dummy + let predicate = NSPredicate(format: "ANY master.pets.species == %@", dummy) + XCTAssertEqual(whereClause, Where(predicate)) + XCTAssertEqual(whereClause.predicate, predicate) + } + } + do { + + let dummy = "dummy" + do { + + let whereClause: Where = (\.testToOne ~ \.testToManyUnordered ~ \TestEntity1.testString).all() == dummy + let predicate = NSPredicate(format: "ALL \(#keyPath(TestEntity1.testToOne.testToManyUnordered)).\(#keyPath(TestEntity1.testString)) == %@", dummy) + XCTAssertEqual(whereClause, Where(predicate)) + XCTAssertEqual(whereClause.predicate, predicate) + } + do { + + let whereClause: Where = (\.master ~ \.pets ~ \.species).all() == dummy + let predicate = NSPredicate(format: "ALL master.pets.species == %@", dummy) + XCTAssertEqual(whereClause, Where(predicate)) + XCTAssertEqual(whereClause.predicate, predicate) + } + } + do { + + let dummy = "dummy" + do { + + let whereClause: Where = (\.testToOne ~ \.testToManyUnordered ~ \TestEntity1.testString).none() == dummy + let predicate = NSPredicate(format: "NONE \(#keyPath(TestEntity1.testToOne.testToManyUnordered)).\(#keyPath(TestEntity1.testString)) == %@", dummy) + XCTAssertEqual(whereClause, Where(predicate)) + XCTAssertEqual(whereClause.predicate, predicate) + } + do { + + let whereClause: Where = (\.master ~ \.pets ~ \.species).none() == dummy + let predicate = NSPredicate(format: "NONE master.pets.species == %@", dummy) + XCTAssertEqual(whereClause, Where(predicate)) + XCTAssertEqual(whereClause.predicate, predicate) + } } }