Skip to content

Commit 7cc0a9b

Browse files
authored
C++ migration: port FSTDocumentViewChangeSet (#2406)
1 parent 9cddf51 commit 7cc0a9b

File tree

8 files changed

+175
-158
lines changed

8 files changed

+175
-158
lines changed

Firestore/Example/Tests/Core/FSTViewSnapshotTest.mm

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,10 @@
2626

2727
#import "Firestore/Example/Tests/Util/FSTHelpers.h"
2828

29+
#include "Firestore/core/src/firebase/firestore/core/view_snapshot.h"
30+
2931
using firebase::firestore::core::DocumentViewChange;
32+
using firebase::firestore::core::DocumentViewChangeSet;
3033
using firebase::firestore::model::DocumentKeySet;
3134

3235
NS_ASSUME_NONNULL_BEGIN
@@ -45,7 +48,7 @@ - (void)testDocumentChangeConstructor {
4548
}
4649

4750
- (void)testTrack {
48-
FSTDocumentViewChangeSet *set = [FSTDocumentViewChangeSet changeSet];
51+
DocumentViewChangeSet set;
4952

5053
FSTDocument *docAdded = FSTTestDoc("a/1", 0, @{}, FSTDocumentStateSynced);
5154
FSTDocument *docRemoved = FSTTestDoc("a/2", 0, @{}, FSTDocumentStateSynced);
@@ -57,21 +60,21 @@ - (void)testTrack {
5760
FSTDocument *docModifiedThenRemoved = FSTTestDoc("b/4", 0, @{}, FSTDocumentStateSynced);
5861
FSTDocument *docModifiedThenModified = FSTTestDoc("b/5", 0, @{}, FSTDocumentStateSynced);
5962

60-
[set addChange:DocumentViewChange{docAdded, DocumentViewChange::Type::kAdded}];
61-
[set addChange:DocumentViewChange{docRemoved, DocumentViewChange::Type::kRemoved}];
62-
[set addChange:DocumentViewChange{docModified, DocumentViewChange::Type::kModified}];
63-
[set addChange:DocumentViewChange{docAddedThenModified, DocumentViewChange::Type::kAdded}];
64-
[set addChange:DocumentViewChange{docAddedThenModified, DocumentViewChange::Type::kModified}];
65-
[set addChange:DocumentViewChange{docAddedThenRemoved, DocumentViewChange::Type::kAdded}];
66-
[set addChange:DocumentViewChange{docAddedThenRemoved, DocumentViewChange::Type::kRemoved}];
67-
[set addChange:DocumentViewChange{docRemovedThenAdded, DocumentViewChange::Type::kRemoved}];
68-
[set addChange:DocumentViewChange{docRemovedThenAdded, DocumentViewChange::Type::kAdded}];
69-
[set addChange:DocumentViewChange{docModifiedThenRemoved, DocumentViewChange::Type::kModified}];
70-
[set addChange:DocumentViewChange{docModifiedThenRemoved, DocumentViewChange::Type::kRemoved}];
71-
[set addChange:DocumentViewChange{docModifiedThenModified, DocumentViewChange::Type::kModified}];
72-
[set addChange:DocumentViewChange{docModifiedThenModified, DocumentViewChange::Type::kModified}];
73-
74-
std::vector<DocumentViewChange> changes = [set changes];
63+
set.AddChange(DocumentViewChange{docAdded, DocumentViewChange::Type::kAdded});
64+
set.AddChange(DocumentViewChange{docRemoved, DocumentViewChange::Type::kRemoved});
65+
set.AddChange(DocumentViewChange{docModified, DocumentViewChange::Type::kModified});
66+
set.AddChange(DocumentViewChange{docAddedThenModified, DocumentViewChange::Type::kAdded});
67+
set.AddChange(DocumentViewChange{docAddedThenModified, DocumentViewChange::Type::kModified});
68+
set.AddChange(DocumentViewChange{docAddedThenRemoved, DocumentViewChange::Type::kAdded});
69+
set.AddChange(DocumentViewChange{docAddedThenRemoved, DocumentViewChange::Type::kRemoved});
70+
set.AddChange(DocumentViewChange{docRemovedThenAdded, DocumentViewChange::Type::kRemoved});
71+
set.AddChange(DocumentViewChange{docRemovedThenAdded, DocumentViewChange::Type::kAdded});
72+
set.AddChange(DocumentViewChange{docModifiedThenRemoved, DocumentViewChange::Type::kModified});
73+
set.AddChange(DocumentViewChange{docModifiedThenRemoved, DocumentViewChange::Type::kRemoved});
74+
set.AddChange(DocumentViewChange{docModifiedThenModified, DocumentViewChange::Type::kModified});
75+
set.AddChange(DocumentViewChange{docModifiedThenModified, DocumentViewChange::Type::kModified});
76+
77+
std::vector<DocumentViewChange> changes = set.GetChanges();
7578
XCTAssertEqual(changes.size(), 7);
7679

7780
XCTAssertEqual(changes[0].document(), docAdded);

Firestore/Example/Tests/Core/FSTViewTests.mm

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -378,20 +378,20 @@ - (void)testReturnsNeedsRefillOnDeleteInLimitQuery {
378378
[view computeChangesWithDocuments:FSTTestDocUpdates(@[ doc1, doc2 ])];
379379
[self assertDocSet:changes.documentSet containsDocs:@[ doc1, doc2 ]];
380380
XCTAssertFalse(changes.needsRefill);
381-
XCTAssertEqual(2, [changes.changeSet changes].size());
381+
XCTAssertEqual(2, changes.changeSet.GetChanges().size());
382382
[view applyChangesToDocuments:changes];
383383

384384
// Remove one of the docs.
385385
changes = [view computeChangesWithDocuments:FSTTestDocUpdates(@[ FSTTestDeletedDoc(
386386
"rooms/eros/messages/0", 0, NO) ])];
387387
[self assertDocSet:changes.documentSet containsDocs:@[ doc2 ]];
388388
XCTAssertTrue(changes.needsRefill);
389-
XCTAssertEqual(1, [changes.changeSet changes].size());
389+
XCTAssertEqual(1, changes.changeSet.GetChanges().size());
390390
// Refill it with just the one doc remaining.
391391
changes = [view computeChangesWithDocuments:FSTTestDocUpdates(@[ doc2 ]) previousChanges:changes];
392392
[self assertDocSet:changes.documentSet containsDocs:@[ doc2 ]];
393393
XCTAssertFalse(changes.needsRefill);
394-
XCTAssertEqual(1, [changes.changeSet changes].size());
394+
XCTAssertEqual(1, changes.changeSet.GetChanges().size());
395395
[view applyChangesToDocuments:changes];
396396
}
397397

@@ -414,21 +414,21 @@ - (void)testReturnsNeedsRefillOnReorderInLimitQuery {
414414
[view computeChangesWithDocuments:FSTTestDocUpdates(@[ doc1, doc2, doc3 ])];
415415
[self assertDocSet:changes.documentSet containsDocs:@[ doc1, doc2 ]];
416416
XCTAssertFalse(changes.needsRefill);
417-
XCTAssertEqual(2, [changes.changeSet changes].size());
417+
XCTAssertEqual(2, changes.changeSet.GetChanges().size());
418418
[view applyChangesToDocuments:changes];
419419

420420
// Move one of the docs.
421421
doc2 = FSTTestDoc("rooms/eros/messages/1", 1, @{@"order" : @2000}, FSTDocumentStateSynced);
422422
changes = [view computeChangesWithDocuments:FSTTestDocUpdates(@[ doc2 ])];
423423
[self assertDocSet:changes.documentSet containsDocs:@[ doc1, doc2 ]];
424424
XCTAssertTrue(changes.needsRefill);
425-
XCTAssertEqual(1, [changes.changeSet changes].size());
425+
XCTAssertEqual(1, changes.changeSet.GetChanges().size());
426426
// Refill it with all three current docs.
427427
changes = [view computeChangesWithDocuments:FSTTestDocUpdates(@[ doc1, doc2, doc3 ])
428428
previousChanges:changes];
429429
[self assertDocSet:changes.documentSet containsDocs:@[ doc1, doc3 ]];
430430
XCTAssertFalse(changes.needsRefill);
431-
XCTAssertEqual(2, [changes.changeSet changes].size());
431+
XCTAssertEqual(2, changes.changeSet.GetChanges().size());
432432
[view applyChangesToDocuments:changes];
433433
}
434434

@@ -455,15 +455,15 @@ - (void)testDoesntNeedRefillOnReorderWithinLimit {
455455
[view computeChangesWithDocuments:FSTTestDocUpdates(@[ doc1, doc2, doc3, doc4, doc5 ])];
456456
[self assertDocSet:changes.documentSet containsDocs:@[ doc1, doc2, doc3 ]];
457457
XCTAssertFalse(changes.needsRefill);
458-
XCTAssertEqual(3, [changes.changeSet changes].size());
458+
XCTAssertEqual(3, changes.changeSet.GetChanges().size());
459459
[view applyChangesToDocuments:changes];
460460

461461
// Move one of the docs.
462462
doc1 = FSTTestDoc("rooms/eros/messages/0", 1, @{@"order" : @3}, FSTDocumentStateSynced);
463463
changes = [view computeChangesWithDocuments:FSTTestDocUpdates(@[ doc1 ])];
464464
[self assertDocSet:changes.documentSet containsDocs:@[ doc2, doc3, doc1 ]];
465465
XCTAssertFalse(changes.needsRefill);
466-
XCTAssertEqual(1, [changes.changeSet changes].size());
466+
XCTAssertEqual(1, changes.changeSet.GetChanges().size());
467467
[view applyChangesToDocuments:changes];
468468
}
469469

@@ -490,15 +490,15 @@ - (void)testDoesntNeedRefillOnReorderAfterLimitQuery {
490490
[view computeChangesWithDocuments:FSTTestDocUpdates(@[ doc1, doc2, doc3, doc4, doc5 ])];
491491
[self assertDocSet:changes.documentSet containsDocs:@[ doc1, doc2, doc3 ]];
492492
XCTAssertFalse(changes.needsRefill);
493-
XCTAssertEqual(3, [changes.changeSet changes].size());
493+
XCTAssertEqual(3, changes.changeSet.GetChanges().size());
494494
[view applyChangesToDocuments:changes];
495495

496496
// Move one of the docs.
497497
doc4 = FSTTestDoc("rooms/eros/messages/3", 1, @{@"order" : @6}, FSTDocumentStateSynced);
498498
changes = [view computeChangesWithDocuments:FSTTestDocUpdates(@[ doc4 ])];
499499
[self assertDocSet:changes.documentSet containsDocs:@[ doc1, doc2, doc3 ]];
500500
XCTAssertFalse(changes.needsRefill);
501-
XCTAssertEqual(0, [changes.changeSet changes].size());
501+
XCTAssertEqual(0, changes.changeSet.GetChanges().size());
502502
[view applyChangesToDocuments:changes];
503503
}
504504

@@ -513,15 +513,15 @@ - (void)testDoesntNeedRefillForAdditionAfterTheLimit {
513513
[view computeChangesWithDocuments:FSTTestDocUpdates(@[ doc1, doc2 ])];
514514
[self assertDocSet:changes.documentSet containsDocs:@[ doc1, doc2 ]];
515515
XCTAssertFalse(changes.needsRefill);
516-
XCTAssertEqual(2, [changes.changeSet changes].size());
516+
XCTAssertEqual(2, changes.changeSet.GetChanges().size());
517517
[view applyChangesToDocuments:changes];
518518

519519
// Add a doc that is past the limit.
520520
FSTDocument *doc3 = FSTTestDoc("rooms/eros/messages/2", 1, @{}, FSTDocumentStateSynced);
521521
changes = [view computeChangesWithDocuments:FSTTestDocUpdates(@[ doc3 ])];
522522
[self assertDocSet:changes.documentSet containsDocs:@[ doc1, doc2 ]];
523523
XCTAssertFalse(changes.needsRefill);
524-
XCTAssertEqual(0, [changes.changeSet changes].size());
524+
XCTAssertEqual(0, changes.changeSet.GetChanges().size());
525525
[view applyChangesToDocuments:changes];
526526
}
527527

@@ -535,15 +535,15 @@ - (void)testDoesntNeedRefillForDeletionsWhenNotNearTheLimit {
535535
[view computeChangesWithDocuments:FSTTestDocUpdates(@[ doc1, doc2 ])];
536536
[self assertDocSet:changes.documentSet containsDocs:@[ doc1, doc2 ]];
537537
XCTAssertFalse(changes.needsRefill);
538-
XCTAssertEqual(2, [changes.changeSet changes].size());
538+
XCTAssertEqual(2, changes.changeSet.GetChanges().size());
539539
[view applyChangesToDocuments:changes];
540540

541541
// Remove one of the docs.
542542
changes = [view computeChangesWithDocuments:FSTTestDocUpdates(@[ FSTTestDeletedDoc(
543543
"rooms/eros/messages/1", 0, NO) ])];
544544
[self assertDocSet:changes.documentSet containsDocs:@[ doc1 ]];
545545
XCTAssertFalse(changes.needsRefill);
546-
XCTAssertEqual(1, [changes.changeSet changes].size());
546+
XCTAssertEqual(1, changes.changeSet.GetChanges().size());
547547
[view applyChangesToDocuments:changes];
548548
}
549549

@@ -558,15 +558,15 @@ - (void)testHandlesApplyingIrrelevantDocs {
558558
[view computeChangesWithDocuments:FSTTestDocUpdates(@[ doc1, doc2 ])];
559559
[self assertDocSet:changes.documentSet containsDocs:@[ doc1, doc2 ]];
560560
XCTAssertFalse(changes.needsRefill);
561-
XCTAssertEqual(2, [changes.changeSet changes].size());
561+
XCTAssertEqual(2, changes.changeSet.GetChanges().size());
562562
[view applyChangesToDocuments:changes];
563563

564564
// Remove a doc that isn't even in the results.
565565
changes = [view computeChangesWithDocuments:FSTTestDocUpdates(@[ FSTTestDeletedDoc(
566566
"rooms/eros/messages/2", 0, NO) ])];
567567
[self assertDocSet:changes.documentSet containsDocs:@[ doc1, doc2 ]];
568568
XCTAssertFalse(changes.needsRefill);
569-
XCTAssertEqual(0, [changes.changeSet changes].size());
569+
XCTAssertEqual(0, changes.changeSet.GetChanges().size());
570570
[view applyChangesToDocuments:changes];
571571
}
572572

Firestore/Source/Core/FSTView.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
#import <Foundation/Foundation.h>
1818

19+
#include "Firestore/core/src/firebase/firestore/core/view_snapshot.h"
1920
#include "Firestore/core/src/firebase/firestore/model/document_key.h"
2021
#include "Firestore/core/src/firebase/firestore/model/document_key_set.h"
2122
#include "Firestore/core/src/firebase/firestore/model/document_map.h"
@@ -34,7 +35,6 @@ class TargetChange;
3435
} // namespace firebase
3536

3637
@class FSTDocumentSet;
37-
@class FSTDocumentViewChangeSet;
3838
@class FSTQuery;
3939
@class FSTViewSnapshot;
4040

@@ -53,7 +53,7 @@ NS_ASSUME_NONNULL_BEGIN
5353
@property(nonatomic, strong, readonly) FSTDocumentSet *documentSet;
5454

5555
/** The diff of this these docs with the previous set of docs. */
56-
@property(nonatomic, strong, readonly) FSTDocumentViewChangeSet *changeSet;
56+
- (const firebase::firestore::core::DocumentViewChangeSet &)changeSet;
5757

5858
/**
5959
* Whether the set of documents passed in was not sufficient to calculate the new state of the view

0 commit comments

Comments
 (0)