@@ -133,15 +133,20 @@ TEST_F(BundleTest, CanLoadBundlesWithProgressUpdates) {
133
133
auto bundle = CreateTestBundle (db);
134
134
135
135
std::vector<LoadBundleTaskProgress> progresses;
136
+ std::promise<void > final_update;
136
137
Future<LoadBundleTaskProgress> result = db->LoadBundle (
137
- bundle, [&progresses](const LoadBundleTaskProgress& progress) {
138
+ bundle, [&progresses, &final_update ](const LoadBundleTaskProgress& progress) {
138
139
progresses.push_back (progress);
140
+ if (progress.state () == LoadBundleTaskProgress::State::kError || progress.state () == LoadBundleTaskProgress::State::kSuccess ) {
141
+ final_update.set_value ();
142
+ }
139
143
});
140
144
141
145
auto final_progress = AwaitResult (result);
142
146
143
147
// 4 progresses will be reported: initial, document 1, document 2, final
144
148
// success.
149
+ final_update.get_future ().wait ();
145
150
ASSERT_EQ (progresses.size (), 4 );
146
151
EXPECT_THAT (progresses[0 ], InProgressWithLoadedDocuments (0 ));
147
152
EXPECT_THAT (progresses[1 ], InProgressWithLoadedDocuments (1 ));
@@ -195,12 +200,17 @@ TEST_F(BundleTest, LoadBundlesForASecondTimeSkips) {
195
200
VerifySuccessProgress (first_load);
196
201
197
202
std::vector<LoadBundleTaskProgress> progresses;
203
+ std::promise<void > final_update;
198
204
LoadBundleTaskProgress second_load = AwaitResult (db->LoadBundle (
199
- bundle, [&progresses](const LoadBundleTaskProgress& progress) {
205
+ bundle, [&progresses, &final_update ](const LoadBundleTaskProgress& progress) {
200
206
progresses.push_back (progress);
207
+ if (progress.state () == LoadBundleTaskProgress::State::kError || progress.state () == LoadBundleTaskProgress::State::kSuccess ) {
208
+ final_update.set_value ();
209
+ }
201
210
}));
202
211
203
212
// There will be 4 progress updates if it does not skip loading.
213
+ final_update.get_future ().wait ();
204
214
ASSERT_EQ (progresses.size (), 1 );
205
215
VerifySuccessProgress (progresses[0 ]);
206
216
EXPECT_EQ (progresses[0 ], second_load);
@@ -220,13 +230,19 @@ TEST_F(BundleTest, LoadInvalidBundlesShouldFail) {
220
230
};
221
231
for (const auto & bundle : invalid_bundles) {
222
232
std::vector<LoadBundleTaskProgress> progresses;
233
+ std::promise<void > final_update;
223
234
Future<LoadBundleTaskProgress> result = db->LoadBundle (
224
- bundle, [&progresses](const LoadBundleTaskProgress& progress) {
235
+ bundle, [&progresses, &final_update ](const LoadBundleTaskProgress& progress) {
225
236
progresses.push_back (progress);
237
+ if (progress.state () == LoadBundleTaskProgress::State::kError || progress.state () == LoadBundleTaskProgress::State::kSuccess ) {
238
+ final_update.set_value ();
239
+ }
226
240
});
227
- Await (result);
228
241
242
+ Await (result);
229
243
EXPECT_NE (result.error (), Error::kErrorOk );
244
+
245
+ final_update.get_future ().wait ();
230
246
ASSERT_EQ (progresses.size (), 1 );
231
247
VerifyErrorProgress (progresses[0 ]);
232
248
}
@@ -306,13 +322,18 @@ TEST_F(BundleTest, LoadDocumentsFromOtherProjectsShouldFail) {
306
322
Firestore* db = TestFirestore ();
307
323
auto bundle = CreateBundle (" other-project" );
308
324
std::vector<LoadBundleTaskProgress> progresses;
325
+ std::promise<void > final_update;
309
326
Future<LoadBundleTaskProgress> result = db->LoadBundle (
310
- bundle, [&progresses](const LoadBundleTaskProgress& progress) {
327
+ bundle, [&progresses, &final_update ](const LoadBundleTaskProgress& progress) {
311
328
progresses.push_back (progress);
329
+ if (progress.state () == LoadBundleTaskProgress::State::kError || progress.state () == LoadBundleTaskProgress::State::kSuccess ) {
330
+ final_update.set_value ();
331
+ }
312
332
});
313
333
Await (result);
314
-
315
334
EXPECT_NE (result.error (), Error::kErrorOk );
335
+
336
+ final_update.get_future ().wait ();
316
337
ASSERT_EQ (progresses.size (), 2 );
317
338
EXPECT_THAT (progresses[0 ], InProgressWithLoadedDocuments (0 ));
318
339
VerifyErrorProgress (progresses[1 ]);
0 commit comments