@@ -54,6 +54,32 @@ - (void)testArrayCanBeInitialized {
54
54
XCTAssertNotNil (self.array , @" expected array to not be nil when initialized" );
55
55
}
56
56
57
+ - (void )testEmptyArrayUpdatesCountOnInsert {
58
+ // Test delegate
59
+ __block BOOL delegateWasCalled = NO ;
60
+ __block BOOL expectedParametersWereCorrect = NO ;
61
+ self.arrayDelegate .didAddObject = ^(FUISortedArray *array, id object, NSUInteger index) {
62
+ // Xcode complains about retain cycles if an XCTAssert is placed in here.
63
+ delegateWasCalled = YES ;
64
+ expectedParametersWereCorrect = (array == self.array &&
65
+ object == self.snap &&
66
+ index == 0 );
67
+ };
68
+
69
+ // Test insert
70
+ self.snap .key = @" snapshot" ;
71
+ [self .observable sendEvent: FIRDataEventTypeChildAdded
72
+ withObject: self .snap
73
+ previousKey: nil
74
+ error: nil ];
75
+ // Array expectations
76
+ XCTAssert (self.array .count == 1 , @" expected empty array to contain one item after insert" );
77
+
78
+ // Delegate expectations
79
+ XCTAssert (delegateWasCalled, @" expected delegate to receive callback for insertion" );
80
+ XCTAssert (expectedParametersWereCorrect, @" unexpected parameter in delegate callback" );
81
+ }
82
+
57
83
- (void )testItSortsItselfOnMiddleInsert {
58
84
[self .observable populateWithCount: 10 ];
59
85
@@ -141,30 +167,52 @@ - (void)testItSortsItselfOnEndInsert {
141
167
XCTAssert (expectedParametersWereCorrect, @" unexpected parameter in delegate callback" );
142
168
}
143
169
144
- - (void )testEmptyArrayUpdatesCountOnInsert {
145
- // Test delegate
146
- __block BOOL delegateWasCalled = NO ;
147
- __block BOOL expectedParametersWereCorrect = NO ;
170
+ - (void )testItSortsItselfWhenChangingObjects {
171
+ [self .observable removeAllObservers ];
172
+ self.array = [[FUISortedArray alloc ] initWithQuery: self .observable
173
+ delegate: self .arrayDelegate
174
+ sortDescriptor: ^NSComparisonResult (FIRDataSnapshot *left,
175
+ FIRDataSnapshot *right) {
176
+ // sort by value, so that changes can cause moves as well
177
+ return [left.value compare: right.value];
178
+ }];
179
+ [self .array observeQuery ];
180
+ [self .observable populateWithCount: 10 ];
181
+
182
+ // Test delegate. Changes in the sorted array are modelled as
183
+ // a remove and an insert, since changes may cause reordering.
184
+ __block BOOL removeWasCalled = NO ;
185
+ __block BOOL insertWasCalled = NO ;
186
+ __block BOOL removeParametersWereCorrect = NO ;
187
+ __block BOOL insertParametersWereCorrect = NO ;
148
188
self.arrayDelegate .didAddObject = ^(FUISortedArray *array, id object, NSUInteger index) {
149
189
// Xcode complains about retain cycles if an XCTAssert is placed in here.
150
- delegateWasCalled = YES ;
151
- expectedParametersWereCorrect = (array == self.array &&
152
- object == self.snap &&
153
- index == 0 );
190
+ insertWasCalled = YES ;
191
+ insertParametersWereCorrect = (array == self.array &&
192
+ object == self.snap &&
193
+ index == 9 );
194
+ NSLog (@" insert: %@ " , insertParametersWereCorrect ? @" YES" : @" NO" );
195
+ };
196
+ self.arrayDelegate .didRemoveObject = ^(FUISortedArray *array, id object, NSUInteger index) {
197
+ removeWasCalled = YES ;
198
+ removeParametersWereCorrect = (array == self.array &&
199
+ index == 2 );
200
+ NSLog (@" remove: %@ " , removeParametersWereCorrect ? @" YES" : @" NO" );
154
201
};
155
202
156
- // Test insert
157
- self.snap .key = @" snapshot" ;
158
- [self .observable sendEvent: FIRDataEventTypeChildAdded
203
+ // Test change
204
+ self.snap .key = @" 2" ;
205
+ self.snap .value = @" a" ;
206
+ [self .observable sendEvent: FIRDataEventTypeChildChanged
159
207
withObject: self .snap
160
- previousKey: nil
208
+ previousKey: @" 1 "
161
209
error: nil ];
162
- // Array expectations
163
- XCTAssert (self.array .count == 1 , @" expected empty array to contain one item after insert" );
164
210
165
211
// Delegate expectations
166
- XCTAssert (delegateWasCalled, @" expected delegate to receive callback for insertion" );
167
- XCTAssert (expectedParametersWereCorrect, @" unexpected parameter in delegate callback" );
212
+ XCTAssert (removeWasCalled, @" expected delegate to receive callback for removal" );
213
+ XCTAssert (insertWasCalled, @" expected delegate to receive callback for insertion" );
214
+ XCTAssert (insertParametersWereCorrect, @" unexpected parameter in delegate callback" );
215
+ XCTAssert (removeParametersWereCorrect, @" unexpected parameter in delegate callback" );
168
216
}
169
217
170
218
@end
0 commit comments