Skip to content

Commit 19fa24c

Browse files
authored
C++ migration: port FSTDocumentViewChange (#2388)
1 parent 593774b commit 19fa24c

22 files changed

+614
-475
lines changed

Firestore/Example/Firestore.xcodeproj/project.pbxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,7 @@
204204
B68B1E012213A765008977EF /* to_string_apple_test.mm in Sources */ = {isa = PBXBuildFile; fileRef = B68B1E002213A764008977EF /* to_string_apple_test.mm */; };
205205
B68FC0E521F6848700A7055C /* watch_change_test.mm in Sources */ = {isa = PBXBuildFile; fileRef = B68FC0E421F6848700A7055C /* watch_change_test.mm */; };
206206
B696858E2214B53900271095 /* to_string_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = B696858D2214B53900271095 /* to_string_test.cc */; };
207+
B6968590221770F100271095 /* objc_compatibility_apple_test.mm in Sources */ = {isa = PBXBuildFile; fileRef = B696858F221770F000271095 /* objc_compatibility_apple_test.mm */; };
207208
B6BBE43121262CF400C6A53E /* grpc_stream_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = B6BBE42F21262CF400C6A53E /* grpc_stream_test.cc */; };
208209
B6D1B68520E2AB1B00B35856 /* exponential_backoff_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = B6D1B68420E2AB1A00B35856 /* exponential_backoff_test.cc */; };
209210
B6D9649121544D4F00EB9CFB /* grpc_connection_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = B6D9649021544D4F00EB9CFB /* grpc_connection_test.cc */; };
@@ -527,6 +528,7 @@
527528
B68B1E002213A764008977EF /* to_string_apple_test.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = to_string_apple_test.mm; sourceTree = "<group>"; };
528529
B68FC0E421F6848700A7055C /* watch_change_test.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = watch_change_test.mm; sourceTree = "<group>"; };
529530
B696858D2214B53900271095 /* to_string_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = to_string_test.cc; sourceTree = "<group>"; };
531+
B696858F221770F000271095 /* objc_compatibility_apple_test.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = objc_compatibility_apple_test.mm; sourceTree = "<group>"; };
530532
B69CF05A219B9105004C434D /* FIRFirestore+Testing.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "FIRFirestore+Testing.h"; sourceTree = "<group>"; };
531533
B6BBE42F21262CF400C6A53E /* grpc_stream_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = grpc_stream_test.cc; sourceTree = "<group>"; };
532534
B6D1B68420E2AB1A00B35856 /* exponential_backoff_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = exponential_backoff_test.cc; sourceTree = "<group>"; };
@@ -721,6 +723,7 @@
721723
54740A561FC913EB00713A1A /* util */ = {
722724
isa = PBXGroup;
723725
children = (
726+
B696858F221770F000271095 /* objc_compatibility_apple_test.mm */,
724727
B6FB4680208EA0BE00554BA2 /* async_queue_libdispatch_test.mm */,
725728
B6FB4681208EA0BE00554BA2 /* async_queue_std_test.cc */,
726729
B6FB467B208E9A8200554BA2 /* async_queue_test.cc */,
@@ -1976,6 +1979,7 @@
19761979
5492E058202154AB00B64F25 /* FSTAPIHelpers.mm in Sources */,
19771980
DE2EF0851F3D0B6E003D0CDC /* FSTArraySortedDictionaryTests.m in Sources */,
19781981
5492E0B92021555100B64F25 /* FSTDocumentKeyTests.mm in Sources */,
1982+
B6968590221770F100271095 /* objc_compatibility_apple_test.mm in Sources */,
19791983
5492E0BA2021555100B64F25 /* FSTDocumentSetTests.mm in Sources */,
19801984
5492E0BD2021555100B64F25 /* FSTDocumentTests.mm in Sources */,
19811985
5492E03E2021401F00B64F25 /* FSTEventAccumulator.mm in Sources */,

Firestore/Example/Tests/API/FIRQuerySnapshotTests.mm

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@
1818

1919
#import <XCTest/XCTest.h>
2020

21+
#include <utility>
22+
#include <vector>
23+
2124
#import "Firestore/Example/Tests/API/FSTAPIHelpers.h"
2225
#import "Firestore/Example/Tests/Util/FSTHelpers.h"
2326
#import "Firestore/Source/API/FIRDocumentChange+Internal.h"
@@ -31,7 +34,8 @@
3134
#include "Firestore/core/src/firebase/firestore/util/string_apple.h"
3235

3336
namespace util = firebase::firestore::util;
34-
using firebase::firestore::core::DocumentViewChangeType;
37+
using firebase::firestore::core::DocumentViewChange;
38+
using firebase::firestore::model::DocumentKeySet;
3539

3640
NS_ASSUME_NONNULL_BEGIN
3741

@@ -82,17 +86,17 @@ - (void)testIncludeMetadataChanges {
8286

8387
FSTDocumentSet *oldDocuments = FSTTestDocSet(FSTDocumentComparatorByKey, @[ doc1Old, doc2Old ]);
8488
FSTDocumentSet *newDocuments = FSTTestDocSet(FSTDocumentComparatorByKey, @[ doc2New, doc2New ]);
85-
NSArray<FSTDocumentViewChange *> *documentChanges = @[
86-
[FSTDocumentViewChange changeWithDocument:doc1New type:DocumentViewChangeType::kMetadata],
87-
[FSTDocumentViewChange changeWithDocument:doc2New type:DocumentViewChangeType::kModified],
88-
];
89+
std::vector<DocumentViewChange> documentChanges{
90+
DocumentViewChange{doc1New, DocumentViewChange::Type::kMetadata},
91+
DocumentViewChange{doc2New, DocumentViewChange::Type::kModified},
92+
};
8993

9094
FIRFirestore *firestore = FSTTestFirestore();
9195
FSTQuery *query = FSTTestQuery("foo");
9296
FSTViewSnapshot *viewSnapshot = [[FSTViewSnapshot alloc] initWithQuery:query
9397
documents:newDocuments
9498
oldDocuments:oldDocuments
95-
documentChanges:documentChanges
99+
documentChanges:std::move(documentChanges)
96100
fromCache:NO
97101
mutatedKeys:DocumentKeySet {}
98102
syncStateChanged:YES

Firestore/Example/Tests/API/FSTAPIHelpers.mm

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
#import <FirebaseFirestore/FIRSnapshotMetadata.h>
2222

2323
#include <string>
24+
#include <utility>
25+
#include <vector>
2426

2527
#import "Firestore/Source/API/FIRCollectionReference+Internal.h"
2628
#import "Firestore/Source/API/FIRDocumentReference+Internal.h"
@@ -33,12 +35,14 @@
3335
#import "Firestore/Source/Model/FSTDocument.h"
3436
#import "Firestore/Source/Model/FSTDocumentSet.h"
3537

38+
#include "Firestore/core/src/firebase/firestore/core/view_snapshot.h"
3639
#include "Firestore/core/src/firebase/firestore/util/string_apple.h"
3740
#include "Firestore/core/test/firebase/firestore/testutil/testutil.h"
3841

3942
namespace testutil = firebase::firestore::testutil;
4043
namespace util = firebase::firestore::util;
41-
using firebase::firestore::core::DocumentViewChangeType;
44+
using firebase::firestore::core::DocumentViewChange;
45+
using firebase::firestore::model::DocumentKeySet;
4246

4347
NS_ASSUME_NONNULL_BEGIN
4448

@@ -109,16 +113,13 @@
109113
}
110114
}
111115
FSTDocumentSet *newDocuments = oldDocuments;
112-
NSArray<FSTDocumentViewChange *> *documentChanges = [NSArray array];
116+
std::vector<DocumentViewChange> documentChanges;
113117
for (NSString *key in docsToAdd) {
114118
FSTDocument *docToAdd =
115119
FSTTestDoc(util::StringFormat("%s/%s", path, key), 1, docsToAdd[key],
116120
hasPendingWrites ? FSTDocumentStateLocalMutations : FSTDocumentStateSynced);
117121
newDocuments = [newDocuments documentSetByAddingDocument:docToAdd];
118-
documentChanges = [documentChanges
119-
arrayByAddingObject:[FSTDocumentViewChange
120-
changeWithDocument:docToAdd
121-
type:DocumentViewChangeType::kAdded]];
122+
documentChanges.emplace_back(docToAdd, DocumentViewChange::Type::kAdded);
122123
if (hasPendingWrites) {
123124
const std::string documentKey = util::StringFormat("%s/%s", path, key);
124125
mutatedKeys = mutatedKeys.insert(testutil::Key(documentKey));
@@ -127,7 +128,7 @@
127128
FSTViewSnapshot *viewSnapshot = [[FSTViewSnapshot alloc] initWithQuery:FSTTestQuery(path)
128129
documents:newDocuments
129130
oldDocuments:oldDocuments
130-
documentChanges:documentChanges
131+
documentChanges:std::move(documentChanges)
131132
fromCache:fromCache
132133
mutatedKeys:mutatedKeys
133134
syncStateChanged:YES

Firestore/Example/Tests/Core/FSTQueryListenerTests.mm

Lines changed: 34 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,9 @@
1515
*/
1616

1717
#import <XCTest/XCTest.h>
18+
1819
#include <memory>
20+
#include <vector>
1921

2022
#import "Firestore/Source/Core/FSTEventManager.h"
2123
#import "Firestore/Source/Core/FSTQuery.h"
@@ -26,12 +28,13 @@
2628

2729
#import "Firestore/Example/Tests/Util/FSTHelpers.h"
2830

31+
#include "Firestore/core/src/firebase/firestore/core/view_snapshot.h"
2932
#include "Firestore/core/src/firebase/firestore/model/types.h"
3033
#include "Firestore/core/src/firebase/firestore/remote/remote_event.h"
3134
#include "Firestore/core/src/firebase/firestore/util/executor_libdispatch.h"
3235
#include "absl/memory/memory.h"
3336

34-
using firebase::firestore::core::DocumentViewChangeType;
37+
using firebase::firestore::core::DocumentViewChange;
3538
using firebase::firestore::model::DocumentKeySet;
3639
using firebase::firestore::model::OnlineState;
3740
using firebase::firestore::remote::TargetChange;
@@ -88,28 +91,24 @@ - (void)testRaisesCollectionEvents {
8891
FSTViewSnapshot *snap1 = FSTTestApplyChanges(view, @[ doc1, doc2 ], absl::nullopt);
8992
FSTViewSnapshot *snap2 = FSTTestApplyChanges(view, @[ doc2prime ], absl::nullopt);
9093

91-
FSTDocumentViewChange *change1 =
92-
[FSTDocumentViewChange changeWithDocument:doc1 type:DocumentViewChangeType::kAdded];
93-
FSTDocumentViewChange *change2 =
94-
[FSTDocumentViewChange changeWithDocument:doc2 type:DocumentViewChangeType::kAdded];
95-
FSTDocumentViewChange *change3 =
96-
[FSTDocumentViewChange changeWithDocument:doc2prime type:DocumentViewChangeType::kModified];
97-
FSTDocumentViewChange *change4 =
98-
[FSTDocumentViewChange changeWithDocument:doc2prime type:DocumentViewChangeType::kAdded];
94+
DocumentViewChange change1{doc1, DocumentViewChange::Type::kAdded};
95+
DocumentViewChange change2{doc2, DocumentViewChange::Type::kAdded};
96+
DocumentViewChange change3{doc2prime, DocumentViewChange::Type::kModified};
97+
DocumentViewChange change4{doc2prime, DocumentViewChange::Type::kAdded};
9998

10099
[listener queryDidChangeViewSnapshot:snap1];
101100
[listener queryDidChangeViewSnapshot:snap2];
102101
[otherListener queryDidChangeViewSnapshot:snap2];
103102

104103
XCTAssertEqualObjects(accum, (@[ snap1, snap2 ]));
105-
XCTAssertEqualObjects(accum[0].documentChanges, (@[ change1, change2 ]));
106-
XCTAssertEqualObjects(accum[1].documentChanges, (@[ change3 ]));
104+
XCTAssertTrue((accum[0].documentChanges == std::vector<DocumentViewChange>{change1, change2}));
105+
XCTAssertTrue(accum[1].documentChanges == std::vector<DocumentViewChange>{change3});
107106

108107
FSTViewSnapshot *expectedSnap2 = [[FSTViewSnapshot alloc]
109108
initWithQuery:snap2.query
110109
documents:snap2.documents
111110
oldDocuments:[FSTDocumentSet documentSetWithComparator:snap2.query.comparator]
112-
documentChanges:@[ change1, change4 ]
111+
documentChanges:{change1, change4}
113112
fromCache:snap2.fromCache
114113
mutatedKeys:snap2.mutatedKeys
115114
syncStateChanged:YES
@@ -253,14 +252,10 @@ - (void)testRaisesDocumentMetadataEventsOnlyWhenSpecified {
253252
FSTViewSnapshot *snap2 = FSTTestApplyChanges(view, @[ doc1Prime ], absl::nullopt);
254253
FSTViewSnapshot *snap3 = FSTTestApplyChanges(view, @[ doc3 ], absl::nullopt);
255254

256-
FSTDocumentViewChange *change1 =
257-
[FSTDocumentViewChange changeWithDocument:doc1 type:DocumentViewChangeType::kAdded];
258-
FSTDocumentViewChange *change2 =
259-
[FSTDocumentViewChange changeWithDocument:doc2 type:DocumentViewChangeType::kAdded];
260-
FSTDocumentViewChange *change3 =
261-
[FSTDocumentViewChange changeWithDocument:doc1Prime type:DocumentViewChangeType::kMetadata];
262-
FSTDocumentViewChange *change4 =
263-
[FSTDocumentViewChange changeWithDocument:doc3 type:DocumentViewChangeType::kAdded];
255+
DocumentViewChange change1{doc1, DocumentViewChange::Type::kAdded};
256+
DocumentViewChange change2{doc2, DocumentViewChange::Type::kAdded};
257+
DocumentViewChange change3{doc1Prime, DocumentViewChange::Type::kMetadata};
258+
DocumentViewChange change4{doc3, DocumentViewChange::Type::kAdded};
264259

265260
[filteredListener queryDidChangeViewSnapshot:snap1];
266261
[filteredListener queryDidChangeViewSnapshot:snap2];
@@ -273,13 +268,15 @@ - (void)testRaisesDocumentMetadataEventsOnlyWhenSpecified {
273268
[self setExcludesMetadataChanges:YES snapshot:snap1],
274269
[self setExcludesMetadataChanges:YES snapshot:snap3]
275270
]));
276-
XCTAssertEqualObjects(filteredAccum[0].documentChanges, (@[ change1, change2 ]));
277-
XCTAssertEqualObjects(filteredAccum[1].documentChanges, (@[ change4 ]));
271+
XCTAssertTrue(
272+
(filteredAccum[0].documentChanges == std::vector<DocumentViewChange>{change1, change2}));
273+
XCTAssertTrue((filteredAccum[1].documentChanges == std::vector<DocumentViewChange>{change4}));
278274

279275
XCTAssertEqualObjects(fullAccum, (@[ snap1, snap2, snap3 ]));
280-
XCTAssertEqualObjects(fullAccum[0].documentChanges, (@[ change1, change2 ]));
281-
XCTAssertEqualObjects(fullAccum[1].documentChanges, (@[ change3 ]));
282-
XCTAssertEqualObjects(fullAccum[2].documentChanges, (@[ change4 ]));
276+
XCTAssertTrue(
277+
(fullAccum[0].documentChanges == std::vector<DocumentViewChange>{change1, change2}));
278+
XCTAssertTrue((fullAccum[1].documentChanges == std::vector<DocumentViewChange>{change3}));
279+
XCTAssertTrue((fullAccum[2].documentChanges == std::vector<DocumentViewChange>{change4}));
283280
}
284281

285282
- (void)testRaisesQueryMetadataEventsOnlyWhenHasPendingWritesOnTheQueryChanges {
@@ -318,7 +315,7 @@ - (void)testRaisesQueryMetadataEventsOnlyWhenHasPendingWritesOnTheQueryChanges {
318315
[[FSTViewSnapshot alloc] initWithQuery:snap4.query
319316
documents:snap4.documents
320317
oldDocuments:snap3.documents
321-
documentChanges:@[]
318+
documentChanges:{}
322319
fromCache:snap4.fromCache
323320
mutatedKeys:snap4.mutatedKeys
324321
syncStateChanged:snap4.syncStateChanged
@@ -347,16 +344,15 @@ - (void)testMetadataOnlyDocumentChangesAreFilteredOutWhenIncludeDocumentMetadata
347344
FSTViewSnapshot *snap1 = FSTTestApplyChanges(view, @[ doc1, doc2 ], absl::nullopt);
348345
FSTViewSnapshot *snap2 = FSTTestApplyChanges(view, @[ doc1Prime, doc3 ], absl::nullopt);
349346

350-
FSTDocumentViewChange *change3 =
351-
[FSTDocumentViewChange changeWithDocument:doc3 type:DocumentViewChangeType::kAdded];
347+
DocumentViewChange change3{doc3, DocumentViewChange::Type::kAdded};
352348

353349
[filteredListener queryDidChangeViewSnapshot:snap1];
354350
[filteredListener queryDidChangeViewSnapshot:snap2];
355351

356352
FSTViewSnapshot *expectedSnap2 = [[FSTViewSnapshot alloc] initWithQuery:snap2.query
357353
documents:snap2.documents
358354
oldDocuments:snap1.documents
359-
documentChanges:@[ change3 ]
355+
documentChanges:{change3}
360356
fromCache:snap2.isFromCache
361357
mutatedKeys:snap2.mutatedKeys
362358
syncStateChanged:snap2.syncStateChanged
@@ -391,15 +387,13 @@ - (void)testWillWaitForSyncIfOnline {
391387
[listener queryDidChangeViewSnapshot:snap2];
392388
[listener queryDidChangeViewSnapshot:snap3];
393389

394-
FSTDocumentViewChange *change1 =
395-
[FSTDocumentViewChange changeWithDocument:doc1 type:DocumentViewChangeType::kAdded];
396-
FSTDocumentViewChange *change2 =
397-
[FSTDocumentViewChange changeWithDocument:doc2 type:DocumentViewChangeType::kAdded];
390+
DocumentViewChange change1{doc1, DocumentViewChange::Type::kAdded};
391+
DocumentViewChange change2{doc2, DocumentViewChange::Type::kAdded};
398392
FSTViewSnapshot *expectedSnap = [[FSTViewSnapshot alloc]
399393
initWithQuery:snap3.query
400394
documents:snap3.documents
401395
oldDocuments:[FSTDocumentSet documentSetWithComparator:snap3.query.comparator]
402-
documentChanges:@[ change1, change2 ]
396+
documentChanges:{change1, change2}
403397
fromCache:NO
404398
mutatedKeys:snap3.mutatedKeys
405399
syncStateChanged:YES
@@ -431,23 +425,21 @@ - (void)testWillRaiseInitialEventWhenGoingOffline {
431425
[listener applyChangedOnlineState:OnlineState::Offline]; // no event
432426
[listener queryDidChangeViewSnapshot:snap2]; // another event
433427

434-
FSTDocumentViewChange *change1 =
435-
[FSTDocumentViewChange changeWithDocument:doc1 type:DocumentViewChangeType::kAdded];
436-
FSTDocumentViewChange *change2 =
437-
[FSTDocumentViewChange changeWithDocument:doc2 type:DocumentViewChangeType::kAdded];
428+
DocumentViewChange change1{doc1, DocumentViewChange::Type::kAdded};
429+
DocumentViewChange change2{doc2, DocumentViewChange::Type::kAdded};
438430
FSTViewSnapshot *expectedSnap1 = [[FSTViewSnapshot alloc]
439431
initWithQuery:query
440432
documents:snap1.documents
441433
oldDocuments:[FSTDocumentSet documentSetWithComparator:snap1.query.comparator]
442-
documentChanges:@[ change1 ]
434+
documentChanges:{change1}
443435
fromCache:YES
444436
mutatedKeys:snap1.mutatedKeys
445437
syncStateChanged:YES
446438
excludesMetadataChanges:YES];
447439
FSTViewSnapshot *expectedSnap2 = [[FSTViewSnapshot alloc] initWithQuery:query
448440
documents:snap2.documents
449441
oldDocuments:snap1.documents
450-
documentChanges:@[ change2 ]
442+
documentChanges:{change2}
451443
fromCache:YES
452444
mutatedKeys:snap2.mutatedKeys
453445
syncStateChanged:NO
@@ -474,7 +466,7 @@ - (void)testWillRaiseInitialEventWhenGoingOfflineAndThereAreNoDocs {
474466
initWithQuery:query
475467
documents:snap1.documents
476468
oldDocuments:[FSTDocumentSet documentSetWithComparator:snap1.query.comparator]
477-
documentChanges:@[]
469+
documentChanges:{}
478470
fromCache:YES
479471
mutatedKeys:snap1.mutatedKeys
480472
syncStateChanged:YES
@@ -500,7 +492,7 @@ - (void)testWillRaiseInitialEventWhenStartingOfflineAndThereAreNoDocs {
500492
initWithQuery:query
501493
documents:snap1.documents
502494
oldDocuments:[FSTDocumentSet documentSetWithComparator:snap1.query.comparator]
503-
documentChanges:@[]
495+
documentChanges:{}
504496
fromCache:YES
505497
mutatedKeys:snap1.mutatedKeys
506498
syncStateChanged:YES

0 commit comments

Comments
 (0)