1919#import < FirebaseFirestore/FIRTimestamp.h>
2020#import < XCTest/XCTest.h>
2121
22+ #include < memory>
23+
2224#import " Firestore/Source/API/FIRDocumentReference+Internal.h"
2325#import " Firestore/Source/API/FSTUserDataConverter.h"
2426#import " Firestore/Source/Core/FSTFirestoreClient.h"
3133#import " Firestore/Source/Remote/FSTDatastore.h"
3234#import " Firestore/Source/Remote/FSTRemoteEvent.h"
3335#import " Firestore/Source/Remote/FSTRemoteStore.h"
34- #import " Firestore/Source/Util/FSTDispatchQueue.h"
3536
3637#import " Firestore/Example/Tests/Util/FSTIntegrationTestCase.h"
3738
3839#include " Firestore/core/src/firebase/firestore/auth/empty_credentials_provider.h"
3940#include " Firestore/core/src/firebase/firestore/core/database_info.h"
4041#include " Firestore/core/src/firebase/firestore/model/database_id.h"
4142#include " Firestore/core/src/firebase/firestore/model/precondition.h"
43+ #include " Firestore/core/src/firebase/firestore/util/async_queue.h"
44+ #include " Firestore/core/src/firebase/firestore/util/executor_libdispatch.h"
4245#include " Firestore/core/src/firebase/firestore/util/hard_assert.h"
4346#include " Firestore/core/src/firebase/firestore/util/string_apple.h"
47+ #include " absl/memory/memory.h"
4448
4549namespace util = firebase::firestore::util;
4650using firebase::firestore::auth::EmptyCredentialsProvider;
5155using firebase::firestore::model::Precondition;
5256using firebase::firestore::model::TargetId;
5357using firebase::firestore::remote::GrpcConnection;
58+ using firebase::firestore::util::AsyncQueue;
59+ using firebase::firestore::util::ExecutorLibdispatch;
5460
5561NS_ASSUME_NONNULL_BEGIN
5662
@@ -146,7 +152,7 @@ @interface FSTDatastoreTests : XCTestCase
146152@end
147153
148154@implementation FSTDatastoreTests {
149- FSTDispatchQueue * _testWorkerQueue;
155+ std::unique_ptr<AsyncQueue> _testWorkerQueue;
150156 FSTLocalStore *_localStore;
151157 EmptyCredentialsProvider _credentials;
152158
@@ -169,29 +175,26 @@ - (void)setUp {
169175 _databaseInfo =
170176 DatabaseInfo (database_id, " test-key" , util::MakeString (settings.host ), settings.sslEnabled );
171177
172- _testWorkerQueue = [FSTDispatchQueue
173- queueWith: dispatch_queue_create (" com.google.firestore.FSTDatastoreTestsWorkerQueue" ,
174- DISPATCH_QUEUE_SERIAL)];
175-
178+ dispatch_queue_t queue = dispatch_queue_create (
179+ " com.google.firestore.FSTDatastoreTestsWorkerQueue" , DISPATCH_QUEUE_SERIAL);
180+ _testWorkerQueue = absl::make_unique<AsyncQueue>(absl::make_unique<ExecutorLibdispatch>(queue));
176181 _datastore = [FSTDatastore datastoreWithDatabase: &_databaseInfo
177- workerDispatchQueue : _testWorkerQueue
182+ workerQueue : _testWorkerQueue. get ()
178183 credentials: &_credentials];
179184
180185 _remoteStore = [[FSTRemoteStore alloc ] initWithLocalStore: _localStore
181186 datastore: _datastore
182- workerDispatchQueue : _testWorkerQueue];
187+ workerQueue : _testWorkerQueue. get () ];
183188
184- [_testWorkerQueue dispatchAsync: ^() {
185- [_remoteStore start ];
186- }];
189+ _testWorkerQueue->Enqueue ([=] { [_remoteStore start ]; });
187190}
188191
189192- (void )tearDown {
190193 XCTestExpectation *completion = [self expectationWithDescription: @" shutdown" ];
191- [ _testWorkerQueue dispatchAsync: ^ {
194+ _testWorkerQueue-> Enqueue ([=] {
192195 [_remoteStore shutdown ];
193196 [completion fulfill ];
194- }] ;
197+ }) ;
195198 [self awaitExpectations ];
196199
197200 [super tearDown ];
@@ -219,12 +222,12 @@ - (void)testStreamingWrite {
219222 FSTMutationBatch *batch = [[FSTMutationBatch alloc ] initWithBatchID: 23
220223 localWriteTime: [FIRTimestamp timestamp ]
221224 mutations: @[ mutation ]];
222- [ _testWorkerQueue dispatchAsync: ^ {
225+ _testWorkerQueue-> Enqueue ([=] {
223226 [_remoteStore addBatchToWritePipeline: batch];
224227 // The added batch won't be written immediately because write stream wasn't yet open --
225228 // trigger its opening.
226229 [_remoteStore fillWritePipeline ];
227- }] ;
230+ }) ;
228231
229232 [self awaitExpectations ];
230233}
0 commit comments