-
Notifications
You must be signed in to change notification settings - Fork 87
Expand file tree
/
Copy pathQueryKitTests.swift
More file actions
127 lines (103 loc) · 3.44 KB
/
QueryKitTests.swift
File metadata and controls
127 lines (103 loc) · 3.44 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
//
// QueryKitTests.swift
// QueryKitTests
//
// Created by Kyle Fuller on 19/06/2014.
//
//
import XCTest
import QueryKit
import CoreData
@objc(Person) class Person : NSManagedObject {
@NSManaged var name:String
@NSManaged var company:Company?
class var entityName:String {
return "Person"
}
class var name:Attribute<String> {
return Attribute("name")
}
class var company:Attribute<Company> {
return Attribute("company")
}
}
@objc(Company) class Company : NSManagedObject {
@NSManaged var name:String
class var entityName:String {
return "Company"
}
class var name:Attribute<String> {
return Attribute("name")
}
class func create(_ context:NSManagedObjectContext) -> Company {
return NSEntityDescription.insertNewObject(forEntityName: Company.entityName, into: context) as! Company
}
}
extension Attribute where AttributeType: Company {
var name:Attribute<String> {
return attribute(AttributeType.name)
}
}
extension Person {
class func create(_ context:NSManagedObjectContext) -> Person {
return NSEntityDescription.insertNewObject(forEntityName: Person.entityName, into: context) as! Person
}
}
func managedObjectModel() -> NSManagedObjectModel {
let companyEntity = NSEntityDescription()
companyEntity.name = Company.entityName
companyEntity.managedObjectClassName = "Company"
let personEntity = NSEntityDescription()
personEntity.name = Person.entityName
personEntity.managedObjectClassName = "Person"
let companyNameAttribute = NSAttributeDescription()
companyNameAttribute.name = "name"
companyNameAttribute.attributeType = NSAttributeType.stringAttributeType
companyNameAttribute.isOptional = false
let companyPeopleAttribute = NSRelationshipDescription()
companyPeopleAttribute.name = "members"
companyPeopleAttribute.maxCount = 0
companyPeopleAttribute.destinationEntity = personEntity
let personNameAttribute = NSAttributeDescription()
personNameAttribute.name = "name"
personNameAttribute.attributeType = NSAttributeType.stringAttributeType
personNameAttribute.isOptional = false
let personCompanyRelation = NSRelationshipDescription()
personCompanyRelation.name = "company"
personCompanyRelation.destinationEntity = companyEntity
personCompanyRelation.maxCount = 1
personCompanyRelation.isOptional = true
companyPeopleAttribute.inverseRelationship = personCompanyRelation
personCompanyRelation.inverseRelationship = companyPeopleAttribute
companyEntity.properties = [companyNameAttribute, companyPeopleAttribute]
personEntity.properties = [personNameAttribute, personCompanyRelation]
let model = NSManagedObjectModel()
model.entities = [personEntity, companyEntity]
return model
}
func persistentStoreCoordinator() -> NSPersistentStoreCoordinator {
let model = managedObjectModel()
let persistentStoreCoordinator = NSPersistentStoreCoordinator(managedObjectModel: model)
do {
try persistentStoreCoordinator.addPersistentStore(ofType: NSInMemoryStoreType, configurationName: nil, at: nil, options: nil)
} catch {
print(error)
fatalError()
}
return persistentStoreCoordinator
}
public func AssertNotThrow<R>(_ closure: @autoclosure () throws -> R) -> R? {
var result: R?
AssertNotThrow() {
result = try closure()
}
return result
}
public func AssertNotThrow(_ closure: () throws -> ()) {
do {
try closure()
} catch let error {
XCTFail("Catched error \(error), "
+ "but did not expect any error.")
}
}