33
33
34
34
namespace testutil = firebase::firestore::testutil;
35
35
namespace util = firebase::firestore::util;
36
+ using firebase::firestore::core::Query;
36
37
using firebase::firestore::model::DatabaseId;
37
38
using firebase::firestore::model::DocumentComparator;
38
39
using firebase::firestore::model::DocumentState;
39
40
using firebase::firestore::model::FieldPath;
40
41
using firebase::firestore::model::ResourcePath;
41
42
using firebase::firestore::util::ComparisonResult;
42
43
44
+ using testutil::Array;
45
+ using testutil::Field;
46
+ using testutil::Filter;
47
+ using testutil::Map;
43
48
using testutil::Value;
44
49
45
50
NS_ASSUME_NONNULL_BEGIN
@@ -52,7 +57,7 @@ - (FSTQuery *)queryByAddingSortBy:(const absl::string_view)key ascending:(BOOL)a
52
57
@implementation FSTQuery (Tests)
53
58
54
59
- (FSTQuery *)queryByAddingSortBy : (const absl::string_view)key ascending : (BOOL )ascending {
55
- return [self queryByAddingSortOrder: [FSTSortOrder sortOrderWithFieldPath: testutil: : Field (key)
60
+ return [self queryByAddingSortOrder: [FSTSortOrder sortOrderWithFieldPath: Field (key)
56
61
ascending: ascending]];
57
62
}
58
63
@@ -77,9 +82,8 @@ - (void)testConstructor {
77
82
78
83
- (void )testOrderBy {
79
84
FSTQuery *query = FSTTestQuery (" rooms/Firestore/messages" );
80
- query =
81
- [query queryByAddingSortOrder: [FSTSortOrder sortOrderWithFieldPath: testutil: :Field (" length" )
82
- ascending: NO ]];
85
+ query = [query queryByAddingSortOrder: [FSTSortOrder sortOrderWithFieldPath: Field (" length" )
86
+ ascending: NO ]];
83
87
84
88
XCTAssertEqual (query.sortOrders .count , 2 );
85
89
XCTAssertEqual (query.sortOrders [0 ].field .CanonicalString (), " length" );
@@ -130,17 +134,15 @@ - (void)testEmptyFieldsAreAllowedForQueries {
130
134
FSTTestDoc (" rooms/eros/messages/1" , 0 , @{@" text" : @" msg1" }, DocumentState::kSynced );
131
135
FSTDocument *doc2 = FSTTestDoc (" rooms/eros/messages/2" , 0 , @{}, DocumentState::kSynced );
132
136
133
- FSTQuery *query = [ FSTTestQuery ( " rooms/eros/messages " )
134
- queryByAddingFilter: FSTTestFilter (" text" , @ " ==" , @ " msg1" )];
137
+ FSTQuery *query =
138
+ [ FSTTestQuery ( " rooms/eros/messages " ) queryByAddingFilter: Filter (" text" , " ==" , " msg1" )];
135
139
XCTAssertTrue ([query matchesDocument: doc1]);
136
140
XCTAssertFalse ([query matchesDocument: doc2]);
137
141
}
138
142
139
143
- (void )testMatchesPrimitiveValuesForFilters {
140
- FSTQuery *query1 =
141
- [FSTTestQuery (" collection" ) queryByAddingFilter: FSTTestFilter (" sort" , @" >=" , @(2 ))];
142
- FSTQuery *query2 =
143
- [FSTTestQuery (" collection" ) queryByAddingFilter: FSTTestFilter (" sort" , @" <=" , @(2 ))];
144
+ FSTQuery *query1 = [FSTTestQuery (" collection" ) queryByAddingFilter: Filter (" sort" , " >=" , 2 )];
145
+ FSTQuery *query2 = [FSTTestQuery (" collection" ) queryByAddingFilter: Filter (" sort" , " <=" , 2 )];
144
146
145
147
FSTDocument *doc1 = FSTTestDoc (" collection/1" , 0 , @{@" sort" : @1 }, DocumentState::kSynced );
146
148
FSTDocument *doc2 = FSTTestDoc (" collection/2" , 0 , @{@" sort" : @2 }, DocumentState::kSynced );
@@ -165,8 +167,8 @@ - (void)testMatchesPrimitiveValuesForFilters {
165
167
}
166
168
167
169
- (void )testArrayContainsFilter {
168
- FSTQuery *query = [ FSTTestQuery ( " collection " )
169
- queryByAddingFilter: FSTTestFilter (" array" , @ " array_contains" , @ 42 )];
170
+ FSTQuery *query =
171
+ [ FSTTestQuery ( " collection " ) queryByAddingFilter: Filter (" array" , " array_contains" , 42 )];
170
172
171
173
// not an array.
172
174
FSTDocument *doc = FSTTestDoc (" collection/1" , 0 , @{@" array" : @1 }, DocumentState::kSynced );
@@ -192,7 +194,7 @@ - (void)testArrayContainsFilter {
192
194
- (void )testArrayContainsFilterWithObjectValue {
193
195
// Search for arrays containing the object { a: [42] }
194
196
FSTQuery *query = [FSTTestQuery (" collection" )
195
- queryByAddingFilter: FSTTestFilter (" array" , @ " array_contains" , @{ @ " a" : @[ @ 42 ]} )];
197
+ queryByAddingFilter: Filter (" array" , " array_contains" , Map ( " a" , Array ( 42 )) )];
196
198
197
199
// array without element.
198
200
FSTDocument *doc = FSTTestDoc (" collection/1" , 0 , @{
@@ -210,8 +212,7 @@ - (void)testArrayContainsFilterWithObjectValue {
210
212
}
211
213
212
214
- (void )testNullFilter {
213
- FSTQuery *query =
214
- [FSTTestQuery (" collection" ) queryByAddingFilter: FSTTestFilter (" sort" , @" ==" , [NSNull null ])];
215
+ FSTQuery *query = [FSTTestQuery (" collection" ) queryByAddingFilter: Filter (" sort" , " ==" , nullptr )];
215
216
FSTDocument *doc1 =
216
217
FSTTestDoc (" collection/1" , 0 , @{@" sort" : [NSNull null ]}, DocumentState::kSynced );
217
218
FSTDocument *doc2 = FSTTestDoc (" collection/2" , 0 , @{@" sort" : @2 }, DocumentState::kSynced );
@@ -227,8 +228,7 @@ - (void)testNullFilter {
227
228
}
228
229
229
230
- (void )testNanFilter {
230
- FSTQuery *query =
231
- [FSTTestQuery (" collection" ) queryByAddingFilter: FSTTestFilter (" sort" , @" ==" , @(NAN))];
231
+ FSTQuery *query = [FSTTestQuery (" collection" ) queryByAddingFilter: Filter (" sort" , " ==" , NAN)];
232
232
FSTDocument *doc1 = FSTTestDoc (" collection/1" , 0 , @{@" sort" : @(NAN)}, DocumentState::kSynced );
233
233
FSTDocument *doc2 = FSTTestDoc (" collection/2" , 0 , @{@" sort" : @2 }, DocumentState::kSynced );
234
234
FSTDocument *doc3 = FSTTestDoc (" collection/2" , 0 , @{@" sort" : @3.1 }, DocumentState::kSynced );
@@ -243,10 +243,8 @@ - (void)testNanFilter {
243
243
}
244
244
245
245
- (void )testDoesNotMatchComplexObjectsForFilters {
246
- FSTQuery *query1 =
247
- [FSTTestQuery (" collection" ) queryByAddingFilter: FSTTestFilter (" sort" , @" <=" , @(2 ))];
248
- FSTQuery *query2 =
249
- [FSTTestQuery (" collection" ) queryByAddingFilter: FSTTestFilter (" sort" , @" >=" , @(2 ))];
246
+ FSTQuery *query1 = [FSTTestQuery (" collection" ) queryByAddingFilter: Filter (" sort" , " <=" , 2 )];
247
+ FSTQuery *query2 = [FSTTestQuery (" collection" ) queryByAddingFilter: Filter (" sort" , " >=" , 2 )];
250
248
251
249
FSTDocument *doc1 = FSTTestDoc (" collection/1" , 0 , @{@" sort" : @2 }, DocumentState::kSynced );
252
250
FSTDocument *doc2 = FSTTestDoc (" collection/2" , 0 , @{@" sort" : @[]}, DocumentState::kSynced );
@@ -279,8 +277,7 @@ - (void)testDoesNotMatchComplexObjectsForFilters {
279
277
280
278
- (void )testDoesntRemoveComplexObjectsWithOrderBy {
281
279
FSTQuery *query1 = [FSTTestQuery (" collection" )
282
- queryByAddingSortOrder: [FSTSortOrder sortOrderWithFieldPath: testutil: :Field (" sort" )
283
- ascending: YES ]];
280
+ queryByAddingSortOrder: [FSTSortOrder sortOrderWithFieldPath: Field (" sort" ) ascending: YES ]];
284
281
285
282
FSTDocument *doc1 = FSTTestDoc (" collection/1" , 0 , @{@" sort" : @2 }, DocumentState::kSynced );
286
283
FSTDocument *doc2 = FSTTestDoc (" collection/2" , 0 , @{@" sort" : @[]}, DocumentState::kSynced );
@@ -304,19 +301,19 @@ - (void)testFiltersBasedOnArrayValue {
304
301
FSTDocument *doc1 =
305
302
FSTTestDoc (" collection/doc" , 0 , @{@" tags" : @[ @" foo" , @1 , @YES ]}, DocumentState::kSynced );
306
303
307
- NSArray <FSTFilter *> * matchingFilters = @[ FSTTestFilter (" tags" , @ " ==" , @[ @ " foo" , @ 1 , @ YES ]) ] ;
304
+ Query::FilterList matchingFilters = { Filter (" tags" , " ==" , Array ( " foo" , 1 , true ))} ;
308
305
309
- NSArray <FSTFilter *> * nonMatchingFilters = @[
310
- FSTTestFilter (" tags" , @ " ==" , @ " foo" ),
311
- FSTTestFilter (" tags" , @ " ==" , @[ @ " foo" , @ 1 ] ),
312
- FSTTestFilter (" tags" , @ " ==" , @[ @ " foo" , @ YES , @ 1 ] ),
313
- ] ;
306
+ Query::FilterList nonMatchingFilters = {
307
+ Filter (" tags" , " ==" , " foo" ),
308
+ Filter (" tags" , " ==" , Array ( " foo" , 1 ) ),
309
+ Filter (" tags" , " ==" , Array ( " foo" , true , 1 ) ),
310
+ } ;
314
311
315
- for (FSTFilter * filter in matchingFilters) {
312
+ for (const auto & filter : matchingFilters) {
316
313
XCTAssertTrue ([[baseQuery queryByAddingFilter: filter] matchesDocument: doc1]);
317
314
}
318
315
319
- for (FSTFilter * filter in nonMatchingFilters) {
316
+ for (const auto & filter : nonMatchingFilters) {
320
317
XCTAssertFalse ([[baseQuery queryByAddingFilter: filter] matchesDocument: doc1]);
321
318
}
322
319
}
@@ -327,25 +324,19 @@ - (void)testFiltersBasedOnObjectValue {
327
324
" collection/doc" , 0 , @{@" tags" : @{@" foo" : @" foo" , @" a" : @0 , @" b" : @YES , @" c" : @(NAN)}},
328
325
DocumentState::kSynced );
329
326
330
- NSArray <FSTFilter *> *matchingFilters = @[
331
- FSTTestFilter (" tags" , @" ==" , @{@" foo" : @" foo" , @" a" : @0 , @" b" : @YES , @" c" : @(NAN)}),
332
- FSTTestFilter (" tags" , @" ==" , @{@" b" : @YES , @" a" : @0 , @" foo" : @" foo" , @" c" : @(NAN)}),
333
- FSTTestFilter (" tags.foo" , @" ==" , @" foo" )
334
- ];
327
+ Query::FilterList matchingFilters = {
328
+ Filter (" tags" , " ==" , Map (" foo" , " foo" , " a" , 0 , " b" , true , " c" , NAN)),
329
+ Filter (" tags" , " ==" , Map (" b" , true , " a" , 0 , " foo" , " foo" , " c" , NAN)),
330
+ Filter (" tags.foo" , " ==" , " foo" )};
335
331
336
- NSArray <FSTFilter *> *nonMatchingFilters = @[
337
- FSTTestFilter (" tags" , @" ==" , @" foo" ), FSTTestFilter (" tags" , @" ==" , @{
338
- @" foo" : @" foo" ,
339
- @" a" : @0 ,
340
- @" b" : @YES ,
341
- })
342
- ];
332
+ Query::FilterList nonMatchingFilters = {
333
+ Filter (" tags" , " ==" , " foo" ), Filter (" tags" , " ==" , Map (" foo" , " foo" , " a" , 0 , " b" , true ))};
343
334
344
- for (FSTFilter * filter in matchingFilters) {
335
+ for (const auto & filter : matchingFilters) {
345
336
XCTAssertTrue ([[baseQuery queryByAddingFilter: filter] matchesDocument: doc1]);
346
337
}
347
338
348
- for (FSTFilter * filter in nonMatchingFilters) {
339
+ for (const auto & filter : nonMatchingFilters) {
349
340
XCTAssertFalse ([[baseQuery queryByAddingFilter: filter] matchesDocument: doc1]);
350
341
}
351
342
}
@@ -368,7 +359,7 @@ - (void)assertCorrectComparisonsWithArray:(NSArray *)array
368
359
369
360
- (void )testSortsDocumentsInTheCorrectOrder {
370
361
FSTQuery *query = FSTTestQuery (" collection" );
371
- query = [query queryByAddingSortOrder: [FSTSortOrder sortOrderWithFieldPath: testutil: : Field (" sort" )
362
+ query = [query queryByAddingSortOrder: [FSTSortOrder sortOrderWithFieldPath: Field (" sort" )
372
363
ascending: YES ]];
373
364
374
365
// clang-format off
@@ -396,12 +387,10 @@ - (void)testSortsDocumentsInTheCorrectOrder {
396
387
397
388
- (void )testSortsDocumentsUsingMultipleFields {
398
389
FSTQuery *query = FSTTestQuery (" collection" );
399
- query =
400
- [query queryByAddingSortOrder: [FSTSortOrder sortOrderWithFieldPath: testutil: :Field (" sort1" )
401
- ascending: YES ]];
402
- query =
403
- [query queryByAddingSortOrder: [FSTSortOrder sortOrderWithFieldPath: testutil: :Field (" sort2" )
404
- ascending: YES ]];
390
+ query = [query queryByAddingSortOrder: [FSTSortOrder sortOrderWithFieldPath: Field (" sort1" )
391
+ ascending: YES ]];
392
+ query = [query queryByAddingSortOrder: [FSTSortOrder sortOrderWithFieldPath: Field (" sort2" )
393
+ ascending: YES ]];
405
394
406
395
// clang-format off
407
396
NSArray <FSTDocument *> *docs =
@@ -423,12 +412,10 @@ - (void)testSortsDocumentsUsingMultipleFields {
423
412
424
413
- (void )testSortsDocumentsWithDescendingToo {
425
414
FSTQuery *query = FSTTestQuery (" collection" );
426
- query =
427
- [query queryByAddingSortOrder: [FSTSortOrder sortOrderWithFieldPath: testutil: :Field (" sort1" )
428
- ascending: NO ]];
429
- query =
430
- [query queryByAddingSortOrder: [FSTSortOrder sortOrderWithFieldPath: testutil: :Field (" sort2" )
431
- ascending: NO ]];
415
+ query = [query queryByAddingSortOrder: [FSTSortOrder sortOrderWithFieldPath: Field (" sort1" )
416
+ ascending: NO ]];
417
+ query = [query queryByAddingSortOrder: [FSTSortOrder sortOrderWithFieldPath: Field (" sort2" )
418
+ ascending: NO ]];
432
419
433
420
// clang-format off
434
421
NSArray <FSTDocument *> *docs =
@@ -450,11 +437,11 @@ - (void)testSortsDocumentsWithDescendingToo {
450
437
451
438
- (void )testEquality {
452
439
FSTQuery *q11 = FSTTestQuery (" foo" );
453
- q11 = [q11 queryByAddingFilter: FSTTestFilter (" i1" , @ " <" , @( 2 ) )];
454
- q11 = [q11 queryByAddingFilter: FSTTestFilter (" i2" , @ " ==" , @( 3 ) )];
440
+ q11 = [q11 queryByAddingFilter: Filter (" i1" , " <" , 2 )];
441
+ q11 = [q11 queryByAddingFilter: Filter (" i2" , " ==" , 3 )];
455
442
FSTQuery *q12 = FSTTestQuery (" foo" );
456
- q12 = [q12 queryByAddingFilter: FSTTestFilter (" i2" , @ " ==" , @( 3 ) )];
457
- q12 = [q12 queryByAddingFilter: FSTTestFilter (" i1" , @ " <" , @( 2 ) )];
443
+ q12 = [q12 queryByAddingFilter: Filter (" i2" , " ==" , 3 )];
444
+ q12 = [q12 queryByAddingFilter: Filter (" i1" , " <" , 2 )];
458
445
459
446
FSTQuery *q21 = FSTTestQuery (" foo" );
460
447
FSTQuery *q22 = FSTTestQuery (" foo" );
@@ -474,12 +461,12 @@ - (void)testEquality {
474
461
475
462
FSTQuery *q51 = FSTTestQuery (" foo" );
476
463
q51 = [q51 queryByAddingSortBy: " foo" ascending: YES ];
477
- q51 = [q51 queryByAddingFilter: FSTTestFilter (" foo" , @ " >" , @( 2 ) )];
464
+ q51 = [q51 queryByAddingFilter: Filter (" foo" , " >" , 2 )];
478
465
FSTQuery *q52 = FSTTestQuery (" foo" );
479
- q52 = [q52 queryByAddingFilter: FSTTestFilter (" foo" , @ " >" , @( 2 ) )];
466
+ q52 = [q52 queryByAddingFilter: Filter (" foo" , " >" , 2 )];
480
467
q52 = [q52 queryByAddingSortBy: " foo" ascending: YES ];
481
468
FSTQuery *q53Diff = FSTTestQuery (" foo" );
482
- q53Diff = [q53Diff queryByAddingFilter: FSTTestFilter (" bar" , @ " >" , @( 2 ) )];
469
+ q53Diff = [q53Diff queryByAddingFilter: Filter (" bar" , " >" , 2 )];
483
470
q53Diff = [q53Diff queryByAddingSortBy: " bar" ascending: YES ];
484
471
485
472
FSTQuery *q61 = FSTTestQuery (" foo" );
@@ -515,11 +502,11 @@ - (void)testEquality {
515
502
516
503
- (void )testUniqueIds {
517
504
FSTQuery *q11 = FSTTestQuery (" foo" );
518
- q11 = [q11 queryByAddingFilter: FSTTestFilter (" i1" , @ " <" , @( 2 ) )];
519
- q11 = [q11 queryByAddingFilter: FSTTestFilter (" i2" , @ " ==" , @( 3 ) )];
505
+ q11 = [q11 queryByAddingFilter: Filter (" i1" , " <" , 2 )];
506
+ q11 = [q11 queryByAddingFilter: Filter (" i2" , " ==" , 3 )];
520
507
FSTQuery *q12 = FSTTestQuery (" foo" );
521
- q12 = [q12 queryByAddingFilter: FSTTestFilter (" i2" , @ " ==" , @( 3 ) )];
522
- q12 = [q12 queryByAddingFilter: FSTTestFilter (" i1" , @ " <" , @( 2 ) )];
508
+ q12 = [q12 queryByAddingFilter: Filter (" i2" , " ==" , 3 )];
509
+ q12 = [q12 queryByAddingFilter: Filter (" i1" , " <" , 2 )];
523
510
524
511
FSTQuery *q21 = FSTTestQuery (" foo" );
525
512
FSTQuery *q22 = FSTTestQuery (" foo" );
@@ -539,12 +526,12 @@ - (void)testUniqueIds {
539
526
540
527
FSTQuery *q51 = FSTTestQuery (" foo" );
541
528
q51 = [q51 queryByAddingSortBy: " foo" ascending: YES ];
542
- q51 = [q51 queryByAddingFilter: FSTTestFilter (" foo" , @ " >" , @( 2 ) )];
529
+ q51 = [q51 queryByAddingFilter: Filter (" foo" , " >" , 2 )];
543
530
FSTQuery *q52 = FSTTestQuery (" foo" );
544
- q52 = [q52 queryByAddingFilter: FSTTestFilter (" foo" , @ " >" , @( 2 ) )];
531
+ q52 = [q52 queryByAddingFilter: Filter (" foo" , " >" , 2 )];
545
532
q52 = [q52 queryByAddingSortBy: " foo" ascending: YES ];
546
533
FSTQuery *q53Diff = FSTTestQuery (" foo" );
547
- q53Diff = [q53Diff queryByAddingFilter: FSTTestFilter (" bar" , @ " >" , @( 2 ) )];
534
+ q53Diff = [q53Diff queryByAddingFilter: Filter (" bar" , " >" , 2 )];
548
535
q53Diff = [q53Diff queryByAddingSortBy: " bar" ascending: YES ];
549
536
550
537
FSTQuery *q61 = FSTTestQuery (" foo" );
@@ -608,7 +595,7 @@ - (void)testImplicitOrderBy {
608
595
609
596
// Inequality filters add order bys
610
597
XCTAssertEqualObjects (
611
- [baseQuery queryByAddingFilter: FSTTestFilter (" foo" , @ " <" , @ 5 )].sortOrders ,
598
+ [baseQuery queryByAddingFilter: Filter (" foo" , " <" , 5 )].sortOrders ,
612
599
(@[ FSTTestOrderBy (" foo" , @" asc" ), FSTTestOrderBy (FieldPath::kDocumentKeyPath , @" asc" ) ]));
613
600
614
601
// Descending order by applies to implicit key ordering
@@ -649,11 +636,11 @@ - (void)testCanonicalIDs {
649
636
XC_ASSERT_THAT (subcoll, HasCanonicalId (" foo/bar/baz|f:|ob:__name__asc" ));
650
637
651
638
FSTQuery *filters = FSTTestQuery (" coll" );
652
- filters = [filters queryByAddingFilter: FSTTestFilter (" str" , @ " ==" , @ " foo" )];
639
+ filters = [filters queryByAddingFilter: Filter (" str" , " ==" , " foo" )];
653
640
XC_ASSERT_THAT (filters, HasCanonicalId (" coll|f:str==foo|ob:__name__asc" ));
654
641
655
642
// Inequality filters end up in the order by too
656
- filters = [filters queryByAddingFilter: FSTTestFilter (" int" , @ " <" , @ 42 )];
643
+ filters = [filters queryByAddingFilter: Filter (" int" , " <" , 42 )];
657
644
XC_ASSERT_THAT (filters, HasCanonicalId (" coll|f:str==fooint<42|ob:intasc__name__asc" ));
658
645
659
646
FSTQuery *orderBys = FSTTestQuery (" coll" );
0 commit comments