diff options
author | zxu <zxu@google.com> | 2018-02-06 13:51:11 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-02-06 13:51:11 -0500 |
commit | a441190635d494f128cf02e07566ae2003af4e08 (patch) | |
tree | 618e6b0ecdb5d243f6e97f319f98f09dc9ca0a7e /Firestore/Example/Tests | |
parent | 7cac9dc47a8c6b7321ebf5fc13fa7140e784c8ca (diff) |
Implement Firestore DatabaseInfo and port both Database{Id,Info} C++ to the iOS code (#738)
* implement Firestore DatabaseInfo in C++
* temporary stash changes; blocking on the massive renaming of .m to .mm
* add database_info_test to project
* finish port DatabaseId and fix style, modular fixing DatabaseInfo
* port DatabaseInfo
* remove FSTDatabase{ID,Info} and their tests from project
* fix unit test
* use namespace alias
* use namespace alias, leftover
* address more changes
* refactoring to use raw pointer instead of value for property
* address changes
* remove self->
* fix style
* remove the name suffix Alloc
* fix a bug
Diffstat (limited to 'Firestore/Example/Tests')
12 files changed, 130 insertions, 177 deletions
diff --git a/Firestore/Example/Tests/Core/FSTDatabaseInfoTests.mm b/Firestore/Example/Tests/Core/FSTDatabaseInfoTests.mm deleted file mode 100644 index c7cf22a..0000000 --- a/Firestore/Example/Tests/Core/FSTDatabaseInfoTests.mm +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "Firestore/Source/Core/FSTDatabaseInfo.h" - -#import <XCTest/XCTest.h> - -#import "Firestore/Source/Model/FSTDatabaseID.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface FSTDatabaseInfoTests : XCTestCase -@end - -@implementation FSTDatabaseInfoTests - -- (void)testConstructor { - FSTDatabaseID *databaseID = [FSTDatabaseID databaseIDWithProject:@"p" database:@"d"]; - FSTDatabaseInfo *databaseInfo = [FSTDatabaseInfo databaseInfoWithDatabaseID:databaseID - persistenceKey:@"pk" - host:@"h" - sslEnabled:YES]; - XCTAssertEqualObjects(databaseInfo.databaseID.projectID, @"p"); - XCTAssertEqualObjects(databaseInfo.databaseID.databaseID, @"d"); - XCTAssertEqualObjects(databaseInfo.persistenceKey, @"pk"); - XCTAssertEqualObjects(databaseInfo.host, @"h"); - XCTAssertEqual(databaseInfo.sslEnabled, YES); -} - -- (void)testDefaultDatabase { - FSTDatabaseID *databaseID = - [FSTDatabaseID databaseIDWithProject:@"p" database:kDefaultDatabaseID]; - FSTDatabaseInfo *databaseInfo = [FSTDatabaseInfo databaseInfoWithDatabaseID:databaseID - persistenceKey:@"pk" - host:@"h" - sslEnabled:YES]; - XCTAssertEqualObjects(databaseInfo.databaseID.projectID, @"p"); - XCTAssertEqualObjects(databaseInfo.databaseID.databaseID, @"(default)"); - XCTAssertEqualObjects(databaseInfo.persistenceKey, @"pk"); - XCTAssertEqualObjects(databaseInfo.host, @"h"); - XCTAssertEqual(databaseInfo.sslEnabled, YES); -} - -@end - -NS_ASSUME_NONNULL_END diff --git a/Firestore/Example/Tests/Core/FSTQueryTests.mm b/Firestore/Example/Tests/Core/FSTQueryTests.mm index 3d2bd82..8acefb5 100644 --- a/Firestore/Example/Tests/Core/FSTQueryTests.mm +++ b/Firestore/Example/Tests/Core/FSTQueryTests.mm @@ -19,13 +19,18 @@ #import <XCTest/XCTest.h> #import "Firestore/Source/API/FIRFirestore+Internal.h" -#import "Firestore/Source/Model/FSTDatabaseID.h" #import "Firestore/Source/Model/FSTDocument.h" #import "Firestore/Source/Model/FSTDocumentKey.h" #import "Firestore/Source/Model/FSTPath.h" #import "Firestore/Example/Tests/Util/FSTHelpers.h" +#include "Firestore/core/src/firebase/firestore/model/database_id.h" +#include "Firestore/core/src/firebase/firestore/util/string_apple.h" + +namespace util = firebase::firestore::util; +using firebase::firestore::model::DatabaseId; + NS_ASSUME_NONNULL_BEGIN /** Convenience methods for building test queries. */ @@ -304,6 +309,7 @@ NS_ASSUME_NONNULL_BEGIN [query queryByAddingSortOrder:[FSTSortOrder sortOrderWithFieldPath:FSTTestFieldPath(@"sort") ascending:YES]]; + NSString *defaultDatabaseID = util::WrapNSStringNoCopy(DatabaseId::kDefaultDatabaseId); // clang-format off NSArray<FSTDocument *> *docs = @[ FSTTestDoc(@"collection/1", 0, @{@"sort": [NSNull null]}, NO), @@ -320,7 +326,7 @@ NS_ASSUME_NONNULL_BEGIN FSTTestDoc(@"collection/1", 0, @{@"sort": @"ab"}, NO), FSTTestDoc(@"collection/1", 0, @{@"sort": @"b"}, NO), FSTTestDoc(@"collection/1", 0, @{@"sort": - FSTTestRef(@"project", kDefaultDatabaseID, @"collection/id1")}, NO), + FSTTestRef(@"project", defaultDatabaseID, @"collection/id1")}, NO), ]; // clang-format on diff --git a/Firestore/Example/Tests/Integration/FSTDatastoreTests.mm b/Firestore/Example/Tests/Integration/FSTDatastoreTests.mm index bf56367..36b0494 100644 --- a/Firestore/Example/Tests/Integration/FSTDatastoreTests.mm +++ b/Firestore/Example/Tests/Integration/FSTDatastoreTests.mm @@ -23,13 +23,11 @@ #import "Firestore/Source/API/FIRDocumentReference+Internal.h" #import "Firestore/Source/API/FSTUserDataConverter.h" #import "Firestore/Source/Auth/FSTEmptyCredentialsProvider.h" -#import "Firestore/Source/Core/FSTDatabaseInfo.h" #import "Firestore/Source/Core/FSTFirestoreClient.h" #import "Firestore/Source/Core/FSTQuery.h" #import "Firestore/Source/Core/FSTSnapshotVersion.h" #import "Firestore/Source/Core/FSTTimestamp.h" #import "Firestore/Source/Local/FSTQueryData.h" -#import "Firestore/Source/Model/FSTDatabaseID.h" #import "Firestore/Source/Model/FSTDocumentKey.h" #import "Firestore/Source/Model/FSTFieldValue.h" #import "Firestore/Source/Model/FSTMutation.h" @@ -43,6 +41,14 @@ #import "Firestore/Example/Tests/Util/FSTIntegrationTestCase.h" +#include "Firestore/core/src/firebase/firestore/core/database_info.h" +#include "Firestore/core/src/firebase/firestore/model/database_id.h" +#include "Firestore/core/src/firebase/firestore/util/string_apple.h" + +namespace util = firebase::firestore::util; +using firebase::firestore::core::DatabaseInfo; +using firebase::firestore::model::DatabaseId; + NS_ASSUME_NONNULL_BEGIN @interface FSTRemoteStore (Tests) @@ -137,6 +143,7 @@ NS_ASSUME_NONNULL_BEGIN FSTLocalStore *_localStore; id<FSTCredentialsProvider> _credentials; + DatabaseInfo _databaseInfo; FSTDatastore *_datastore; FSTRemoteStore *_remoteStore; } @@ -154,13 +161,10 @@ NS_ASSUME_NONNULL_BEGIN [GRPCCall useInsecureConnectionsForHost:settings.host]; } - FSTDatabaseID *databaseID = - [FSTDatabaseID databaseIDWithProject:projectID database:kDefaultDatabaseID]; + DatabaseId database_id(util::MakeStringView(projectID), DatabaseId::kDefaultDatabaseId); - FSTDatabaseInfo *databaseInfo = [FSTDatabaseInfo databaseInfoWithDatabaseID:databaseID - persistenceKey:@"test-key" - host:settings.host - sslEnabled:settings.sslEnabled]; + _databaseInfo = DatabaseInfo(database_id, "test-key", util::MakeStringView(settings.host), + settings.sslEnabled); _testWorkerQueue = [FSTDispatchQueue queueWith:dispatch_queue_create("com.google.firestore.FSTDatastoreTestsWorkerQueue", @@ -168,7 +172,7 @@ NS_ASSUME_NONNULL_BEGIN _credentials = [[FSTEmptyCredentialsProvider alloc] init]; - _datastore = [FSTDatastore datastoreWithDatabase:databaseInfo + _datastore = [FSTDatastore datastoreWithDatabase:&_databaseInfo workerDispatchQueue:_testWorkerQueue credentials:_credentials]; diff --git a/Firestore/Example/Tests/Integration/FSTStreamTests.mm b/Firestore/Example/Tests/Integration/FSTStreamTests.mm index bbdf372..6259aff 100644 --- a/Firestore/Example/Tests/Integration/FSTStreamTests.mm +++ b/Firestore/Example/Tests/Integration/FSTStreamTests.mm @@ -22,12 +22,18 @@ #import "Firestore/Example/Tests/Util/FSTIntegrationTestCase.h" #import "Firestore/Example/Tests/Util/FSTTestDispatchQueue.h" #import "Firestore/Source/Auth/FSTEmptyCredentialsProvider.h" -#import "Firestore/Source/Core/FSTDatabaseInfo.h" -#import "Firestore/Source/Model/FSTDatabaseID.h" #import "Firestore/Source/Remote/FSTDatastore.h" #import "Firestore/Source/Remote/FSTStream.h" #import "Firestore/Source/Util/FSTAssert.h" +#include "Firestore/core/src/firebase/firestore/core/database_info.h" +#include "Firestore/core/src/firebase/firestore/model/database_id.h" +#include "Firestore/core/src/firebase/firestore/util/string_apple.h" + +namespace util = firebase::firestore::util; +using firebase::firestore::core::DatabaseInfo; +using firebase::firestore::model::DatabaseId; + /** Exposes otherwise private methods for testing. */ @interface FSTStream (Testing) - (void)writesFinishedWithError:(NSError *_Nullable)error; @@ -128,7 +134,7 @@ @implementation FSTStreamTests { dispatch_queue_t _testQueue; FSTTestDispatchQueue *_workerDispatchQueue; - FSTDatabaseInfo *_databaseInfo; + DatabaseInfo _databaseInfo; FSTEmptyCredentialsProvider *_credentials; FSTStreamStatusDelegate *_delegate; @@ -140,17 +146,14 @@ [super setUp]; FIRFirestoreSettings *settings = [FSTIntegrationTestCase settings]; - FSTDatabaseID *databaseID = - [FSTDatabaseID databaseIDWithProject:[FSTIntegrationTestCase projectID] - database:kDefaultDatabaseID]; + DatabaseId database_id(util::MakeStringView([FSTIntegrationTestCase projectID]), + DatabaseId::kDefaultDatabaseId); _testQueue = dispatch_queue_create("FSTStreamTestWorkerQueue", DISPATCH_QUEUE_SERIAL); _workerDispatchQueue = [[FSTTestDispatchQueue alloc] initWithQueue:_testQueue]; - _databaseInfo = [FSTDatabaseInfo databaseInfoWithDatabaseID:databaseID - persistenceKey:@"test-key" - host:settings.host - sslEnabled:settings.sslEnabled]; + _databaseInfo = DatabaseInfo(database_id, "test-key", util::MakeStringView(settings.host), + settings.sslEnabled); _credentials = [[FSTEmptyCredentialsProvider alloc] init]; _delegate = [[FSTStreamStatusDelegate alloc] initWithTestCase:self queue:_workerDispatchQueue]; @@ -159,14 +162,14 @@ } - (FSTWriteStream *)setUpWriteStream { - FSTDatastore *datastore = [[FSTDatastore alloc] initWithDatabaseInfo:_databaseInfo + FSTDatastore *datastore = [[FSTDatastore alloc] initWithDatabaseInfo:&_databaseInfo workerDispatchQueue:_workerDispatchQueue credentials:_credentials]; return [datastore createWriteStream]; } - (FSTWatchStream *)setUpWatchStream { - FSTDatastore *datastore = [[FSTDatastore alloc] initWithDatabaseInfo:_databaseInfo + FSTDatastore *datastore = [[FSTDatastore alloc] initWithDatabaseInfo:&_databaseInfo workerDispatchQueue:_workerDispatchQueue credentials:_credentials]; return [datastore createWatchStream]; diff --git a/Firestore/Example/Tests/Local/FSTLocalSerializerTests.mm b/Firestore/Example/Tests/Local/FSTLocalSerializerTests.mm index 95b9b11..1b55795 100644 --- a/Firestore/Example/Tests/Local/FSTLocalSerializerTests.mm +++ b/Firestore/Example/Tests/Local/FSTLocalSerializerTests.mm @@ -31,7 +31,6 @@ #import "Firestore/Source/Core/FSTSnapshotVersion.h" #import "Firestore/Source/Core/FSTTimestamp.h" #import "Firestore/Source/Local/FSTQueryData.h" -#import "Firestore/Source/Model/FSTDatabaseID.h" #import "Firestore/Source/Model/FSTDocument.h" #import "Firestore/Source/Model/FSTDocumentKey.h" #import "Firestore/Source/Model/FSTFieldValue.h" @@ -42,6 +41,11 @@ #import "Firestore/Example/Tests/Util/FSTHelpers.h" +#include "Firestore/core/src/firebase/firestore/model/database_id.h" +#include "Firestore/core/src/firebase/firestore/util/string_apple.h" + +using firebase::firestore::model::DatabaseId; + NS_ASSUME_NONNULL_BEGIN @interface FSTSerializerBeta (Test) @@ -52,7 +56,9 @@ NS_ASSUME_NONNULL_BEGIN - (GCFSValue *)encodedString:(NSString *)value; @end -@interface FSTLocalSerializerTests : XCTestCase +@interface FSTLocalSerializerTests : XCTestCase { + DatabaseId _databaseId; +} @property(nonatomic, strong) FSTLocalSerializer *serializer; @property(nonatomic, strong) FSTSerializerBeta *remoteSerializer; @@ -62,8 +68,8 @@ NS_ASSUME_NONNULL_BEGIN @implementation FSTLocalSerializerTests - (void)setUp { - FSTDatabaseID *databaseID = [FSTDatabaseID databaseIDWithProject:@"p" database:@"d"]; - self.remoteSerializer = [[FSTSerializerBeta alloc] initWithDatabaseID:databaseID]; + _databaseId = DatabaseId("p", "d"); + self.remoteSerializer = [[FSTSerializerBeta alloc] initWithDatabaseID:&_databaseId]; self.serializer = [[FSTLocalSerializer alloc] initWithRemoteSerializer:self.remoteSerializer]; } diff --git a/Firestore/Example/Tests/Local/FSTPersistenceTestHelpers.mm b/Firestore/Example/Tests/Local/FSTPersistenceTestHelpers.mm index e9e129d..b59a062 100644 --- a/Firestore/Example/Tests/Local/FSTPersistenceTestHelpers.mm +++ b/Firestore/Example/Tests/Local/FSTPersistenceTestHelpers.mm @@ -19,9 +19,13 @@ #import "Firestore/Source/Local/FSTLevelDB.h" #import "Firestore/Source/Local/FSTLocalSerializer.h" #import "Firestore/Source/Local/FSTMemoryPersistence.h" -#import "Firestore/Source/Model/FSTDatabaseID.h" #import "Firestore/Source/Remote/FSTSerializerBeta.h" +#include "Firestore/core/src/firebase/firestore/model/database_id.h" +#include "Firestore/core/src/firebase/firestore/util/string_apple.h" + +using firebase::firestore::model::DatabaseId; + NS_ASSUME_NONNULL_BEGIN @implementation FSTPersistenceTestHelpers @@ -43,10 +47,11 @@ NS_ASSUME_NONNULL_BEGIN } + (FSTLevelDB *)levelDBPersistence { - NSString *dir = [self levelDBDir]; + // This owns the DatabaseIds since we do not have FirestoreClient instance to own them. + static DatabaseId database_id{"p", "d"}; - FSTDatabaseID *databaseID = [FSTDatabaseID databaseIDWithProject:@"p" database:@"d"]; - FSTSerializerBeta *remoteSerializer = [[FSTSerializerBeta alloc] initWithDatabaseID:databaseID]; + NSString *dir = [self levelDBDir]; + FSTSerializerBeta *remoteSerializer = [[FSTSerializerBeta alloc] initWithDatabaseID:&database_id]; FSTLocalSerializer *serializer = [[FSTLocalSerializer alloc] initWithRemoteSerializer:remoteSerializer]; FSTLevelDB *db = [[FSTLevelDB alloc] initWithDirectory:dir serializer:serializer]; diff --git a/Firestore/Example/Tests/Model/FSTDatabaseIDTests.mm b/Firestore/Example/Tests/Model/FSTDatabaseIDTests.mm deleted file mode 100644 index cb1b19d..0000000 --- a/Firestore/Example/Tests/Model/FSTDatabaseIDTests.mm +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "Firestore/Source/Model/FSTDatabaseID.h" - -#import <XCTest/XCTest.h> - -NS_ASSUME_NONNULL_BEGIN - -@interface FSTDatabaseIDTests : XCTestCase -@end - -@implementation FSTDatabaseIDTests - -- (void)testConstructor { - FSTDatabaseID *databaseID = [FSTDatabaseID databaseIDWithProject:@"p" database:@"d"]; - XCTAssertEqualObjects(databaseID.projectID, @"p"); - XCTAssertEqualObjects(databaseID.databaseID, @"d"); - XCTAssertFalse([databaseID isDefaultDatabase]); -} - -- (void)testDefaultDatabase { - FSTDatabaseID *databaseID = - [FSTDatabaseID databaseIDWithProject:@"p" database:kDefaultDatabaseID]; - XCTAssertEqualObjects(databaseID.projectID, @"p"); - XCTAssertEqualObjects(databaseID.databaseID, @"(default)"); - XCTAssertTrue([databaseID isDefaultDatabase]); -} - -@end - -NS_ASSUME_NONNULL_END diff --git a/Firestore/Example/Tests/Model/FSTFieldValueTests.mm b/Firestore/Example/Tests/Model/FSTFieldValueTests.mm index 56b885f..52d5a4e 100644 --- a/Firestore/Example/Tests/Model/FSTFieldValueTests.mm +++ b/Firestore/Example/Tests/Model/FSTFieldValueTests.mm @@ -22,13 +22,18 @@ #import "Firestore/Source/API/FIRFirestore+Internal.h" #import "Firestore/Source/API/FSTUserDataConverter.h" #import "Firestore/Source/Core/FSTTimestamp.h" -#import "Firestore/Source/Model/FSTDatabaseID.h" #import "Firestore/Source/Model/FSTFieldValue.h" #import "Firestore/Source/Model/FSTPath.h" #import "Firestore/Example/Tests/API/FSTAPIHelpers.h" #import "Firestore/Example/Tests/Util/FSTHelpers.h" +#include "Firestore/core/src/firebase/firestore/model/database_id.h" +#include "Firestore/core/src/firebase/firestore/util/string_apple.h" + +namespace util = firebase::firestore::util; +using firebase::firestore::model::DatabaseId; + /** Helper to wrap the values in a set of equality groups using FSTTestFieldValue(). */ NSArray *FSTWrapGroups(NSArray *groups) { NSMutableArray *wrapped = [NSMutableArray array]; @@ -249,14 +254,15 @@ union DoubleBits { - (void)testWrapResourceNames { NSArray *values = @[ - FSTTestRef(@"project", kDefaultDatabaseID, @"foo/bar"), - FSTTestRef(@"project", kDefaultDatabaseID, @"foo/baz") + FSTTestRef(@"project", util::WrapNSStringNoCopy(DatabaseId::kDefaultDatabaseId), @"foo/bar"), + FSTTestRef(@"project", util::WrapNSStringNoCopy(DatabaseId::kDefaultDatabaseId), @"foo/baz") ]; for (FSTDocumentKeyReference *value in values) { FSTFieldValue *wrapped = FSTTestFieldValue(value); XCTAssertEqualObjects([wrapped class], [FSTReferenceValue class]); XCTAssertEqualObjects([wrapped value], value.key); - XCTAssertEqualObjects(((FSTDatabaseID *)wrapped).databaseID, value.databaseID); + XCTAssertTrue(*((FSTReferenceValue *)wrapped).databaseID == + *(const DatabaseId *)(value.databaseID)); } } @@ -417,6 +423,7 @@ union DoubleBits { } - (void)testValueEquality { + DatabaseId database_id = DatabaseId("project", DatabaseId::kDefaultDatabaseId); NSArray *groups = @[ @[ FSTTestFieldValue(@YES), [FSTBooleanValue booleanValue:YES] ], @[ FSTTestFieldValue(@NO), [FSTBooleanValue booleanValue:NO] ], @@ -459,10 +466,9 @@ union DoubleBits { ], @[ FSTTestFieldValue(FSTTestGeoPoint(1, 0)) ], @[ - [FSTReferenceValue referenceValue:FSTTestDocKey(@"coll/doc1") - databaseID:[FSTDatabaseID databaseIDWithProject:@"project" - database:kDefaultDatabaseID]], - FSTTestFieldValue(FSTTestRef(@"project", kDefaultDatabaseID, @"coll/doc1")) + [FSTReferenceValue referenceValue:FSTTestDocKey(@"coll/doc1") databaseID:&database_id], + FSTTestFieldValue(FSTTestRef( + @"project", util::WrapNSStringNoCopy(DatabaseId::kDefaultDatabaseId), @"coll/doc1")) ], @[ FSTTestRef(@"project", @"(default)", @"coll/doc2") ], @[ FSTTestFieldValue(@[ @"foo", @"bar" ]), FSTTestFieldValue(@[ @"foo", @"bar" ]) ], diff --git a/Firestore/Example/Tests/Remote/FSTSerializerBetaTests.mm b/Firestore/Example/Tests/Remote/FSTSerializerBetaTests.mm index de4a07a..48e5546 100644 --- a/Firestore/Example/Tests/Remote/FSTSerializerBetaTests.mm +++ b/Firestore/Example/Tests/Remote/FSTSerializerBetaTests.mm @@ -35,7 +35,6 @@ #import "Firestore/Source/Core/FSTSnapshotVersion.h" #import "Firestore/Source/Core/FSTTimestamp.h" #import "Firestore/Source/Local/FSTQueryData.h" -#import "Firestore/Source/Model/FSTDatabaseID.h" #import "Firestore/Source/Model/FSTDocument.h" #import "Firestore/Source/Model/FSTDocumentKey.h" #import "Firestore/Source/Model/FSTFieldValue.h" @@ -47,6 +46,12 @@ #import "Firestore/Example/Tests/API/FSTAPIHelpers.h" #import "Firestore/Example/Tests/Util/FSTHelpers.h" +#include "Firestore/core/src/firebase/firestore/model/database_id.h" +#include "Firestore/core/src/firebase/firestore/util/string_apple.h" + +namespace util = firebase::firestore::util; +using firebase::firestore::model::DatabaseId; + NS_ASSUME_NONNULL_BEGIN @interface FSTSerializerBeta (Test) @@ -79,15 +84,18 @@ NS_ASSUME_NONNULL_BEGIN } @end -@interface FSTSerializerBetaTests : XCTestCase +@interface FSTSerializerBetaTests : XCTestCase { + DatabaseId _databaseId; +} + @property(nonatomic, strong) FSTSerializerBeta *serializer; @end @implementation FSTSerializerBetaTests - (void)setUp { - FSTDatabaseID *databaseID = [FSTDatabaseID databaseIDWithProject:@"p" database:@"d"]; - self.serializer = [[FSTSerializerBeta alloc] initWithDatabaseID:databaseID]; + _databaseId = DatabaseId("p", "d"); + self.serializer = [[FSTSerializerBeta alloc] initWithDatabaseID:&_databaseId]; } - (void)testEncodesNull { @@ -231,7 +239,9 @@ NS_ASSUME_NONNULL_BEGIN } - (void)testEncodesResourceNames { - FSTDocumentKeyReference *reference = FSTTestRef(@"project", kDefaultDatabaseID, @"foo/bar"); + FSTDocumentKeyReference *reference = + FSTTestRef(@"project", util::WrapNSStringNoCopy(DatabaseId::kDefaultDatabaseId), @"foo/bar"); + _databaseId = DatabaseId("project", DatabaseId::kDefaultDatabaseId); GCFSValue *proto = [GCFSValue message]; proto.referenceValue = @"projects/project/databases/(default)/documents/foo/bar"; diff --git a/Firestore/Example/Tests/SpecTests/FSTMockDatastore.mm b/Firestore/Example/Tests/SpecTests/FSTMockDatastore.mm index 9a1d719..d3c4171 100644 --- a/Firestore/Example/Tests/SpecTests/FSTMockDatastore.mm +++ b/Firestore/Example/Tests/SpecTests/FSTMockDatastore.mm @@ -17,10 +17,8 @@ #import "Firestore/Example/Tests/SpecTests/FSTMockDatastore.h" #import "Firestore/Source/Auth/FSTEmptyCredentialsProvider.h" -#import "Firestore/Source/Core/FSTDatabaseInfo.h" #import "Firestore/Source/Core/FSTSnapshotVersion.h" #import "Firestore/Source/Local/FSTQueryData.h" -#import "Firestore/Source/Model/FSTDatabaseID.h" #import "Firestore/Source/Model/FSTMutation.h" #import "Firestore/Source/Remote/FSTSerializerBeta.h" #import "Firestore/Source/Remote/FSTStream.h" @@ -29,6 +27,13 @@ #import "Firestore/Example/Tests/Remote/FSTWatchChange+Testing.h" +#include "Firestore/core/src/firebase/firestore/core/database_info.h" +#include "Firestore/core/src/firebase/firestore/model/database_id.h" +#include "Firestore/core/src/firebase/firestore/util/string_apple.h" + +using firebase::firestore::core::DatabaseInfo; +using firebase::firestore::model::DatabaseId; + @class GRPCProtoCall; NS_ASSUME_NONNULL_BEGIN @@ -42,12 +47,12 @@ NS_ASSUME_NONNULL_BEGIN credentials:(id<FSTCredentialsProvider>)credentials serializer:(FSTSerializerBeta *)serializer NS_DESIGNATED_INITIALIZER; -- (instancetype)initWithDatabase:(FSTDatabaseInfo *)database +- (instancetype)initWithDatabase:(const DatabaseInfo *)database workerDispatchQueue:(FSTDispatchQueue *)workerDispatchQueue credentials:(id<FSTCredentialsProvider>)credentials serializer:(FSTSerializerBeta *)serializer NS_UNAVAILABLE; -- (instancetype)initWithDatabase:(FSTDatabaseInfo *)database +- (instancetype)initWithDatabase:(const DatabaseInfo *)database workerDispatchQueue:(FSTDispatchQueue *)workerDispatchQueue credentials:(id<FSTCredentialsProvider>)credentials responseMessageClass:(Class)responseMessageClass NS_UNAVAILABLE; @@ -168,12 +173,12 @@ NS_ASSUME_NONNULL_BEGIN credentials:(id<FSTCredentialsProvider>)credentials serializer:(FSTSerializerBeta *)serializer NS_DESIGNATED_INITIALIZER; -- (instancetype)initWithDatabase:(FSTDatabaseInfo *)database +- (instancetype)initWithDatabase:(const DatabaseInfo *)database workerDispatchQueue:(FSTDispatchQueue *)workerDispatchQueue credentials:(id<FSTCredentialsProvider>)credentials serializer:(FSTSerializerBeta *)serializer NS_UNAVAILABLE; -- (instancetype)initWithDatabase:(FSTDatabaseInfo *)database +- (instancetype)initWithDatabase:(const DatabaseInfo *)database workerDispatchQueue:(FSTDispatchQueue *)workerDispatchQueue credentials:(id<FSTCredentialsProvider>)credentials responseMessageClass:(Class)responseMessageClass NS_UNAVAILABLE; @@ -281,15 +286,13 @@ NS_ASSUME_NONNULL_BEGIN @implementation FSTMockDatastore + (instancetype)mockDatastoreWithWorkerDispatchQueue:(FSTDispatchQueue *)workerDispatchQueue { - FSTDatabaseID *databaseID = [FSTDatabaseID databaseIDWithProject:@"project" database:@"database"]; - FSTDatabaseInfo *databaseInfo = [FSTDatabaseInfo databaseInfoWithDatabaseID:databaseID - persistenceKey:@"persistence" - host:@"host" - sslEnabled:NO]; + // This owns the DatabaseInfos since we do not have FirestoreClient instance to own them. + static DatabaseInfo database_info{DatabaseId{"project", "database"}, "persistence", "host", + false}; FSTEmptyCredentialsProvider *credentials = [[FSTEmptyCredentialsProvider alloc] init]; - return [[FSTMockDatastore alloc] initWithDatabaseInfo:databaseInfo + return [[FSTMockDatastore alloc] initWithDatabaseInfo:&database_info workerDispatchQueue:workerDispatchQueue credentials:credentials]; } @@ -297,24 +300,24 @@ NS_ASSUME_NONNULL_BEGIN #pragma mark - Overridden FSTDatastore methods. - (FSTWatchStream *)createWatchStream { - FSTAssert(self.databaseInfo, @"DatabaseInfo must not be nil"); + // FSTAssert(self.databaseInfo, @"DatabaseInfo must not be nil"); self.watchStream = [[FSTMockWatchStream alloc] initWithDatastore:self workerDispatchQueue:self.workerDispatchQueue credentials:self.credentials serializer:[[FSTSerializerBeta alloc] - initWithDatabaseID:self.databaseInfo.databaseID]]; + initWithDatabaseID:&self.databaseInfo->database_id()]]; return self.watchStream; } - (FSTWriteStream *)createWriteStream { - FSTAssert(self.databaseInfo, @"DatabaseInfo must not be nil"); + // FSTAssert(self.databaseInfo, @"DatabaseInfo must not be nil"); self.writeStream = [[FSTMockWriteStream alloc] initWithDatastore:self workerDispatchQueue:self.workerDispatchQueue credentials:self.credentials serializer:[[FSTSerializerBeta alloc] - initWithDatabaseID:self.databaseInfo.databaseID]]; + initWithDatabaseID:&self.databaseInfo->database_id()]]; return self.writeStream; } diff --git a/Firestore/Example/Tests/Util/FSTHelpers.mm b/Firestore/Example/Tests/Util/FSTHelpers.mm index 64fe213..406d4dd 100644 --- a/Firestore/Example/Tests/Util/FSTHelpers.mm +++ b/Firestore/Example/Tests/Util/FSTHelpers.mm @@ -17,6 +17,7 @@ #import "Firestore/Example/Tests/Util/FSTHelpers.h" #include <inttypes.h> +#include <vector> #import <FirebaseFirestore/FIRFieldPath.h> #import <FirebaseFirestore/FIRGeoPoint.h> @@ -30,7 +31,6 @@ #import "Firestore/Source/Core/FSTViewSnapshot.h" #import "Firestore/Source/Local/FSTLocalViewChanges.h" #import "Firestore/Source/Local/FSTQueryData.h" -#import "Firestore/Source/Model/FSTDatabaseID.h" #import "Firestore/Source/Model/FSTDocument.h" #import "Firestore/Source/Model/FSTDocumentKey.h" #import "Firestore/Source/Model/FSTDocumentSet.h" @@ -41,6 +41,12 @@ #import "Firestore/Source/Remote/FSTWatchChange.h" #import "Firestore/Source/Util/FSTAssert.h" +#include "Firestore/core/src/firebase/firestore/model/database_id.h" +#include "Firestore/core/src/firebase/firestore/util/string_apple.h" + +namespace util = firebase::firestore::util; +using firebase::firestore::model::DatabaseId; + NS_ASSUME_NONNULL_BEGIN /** A string sentinel that can be used with FSTTestPatchMutation() to mark a field for deletion. */ @@ -100,10 +106,10 @@ FSTFieldPath *FSTTestFieldPath(NSString *field) { } FSTFieldValue *FSTTestFieldValue(id _Nullable value) { - FSTDatabaseID *databaseID = - [FSTDatabaseID databaseIDWithProject:@"project" database:kDefaultDatabaseID]; + // This owns the DatabaseIds since we do not have FirestoreClient instance to own them. + static DatabaseId database_id{"project", DatabaseId::kDefaultDatabaseId}; FSTUserDataConverter *converter = - [[FSTUserDataConverter alloc] initWithDatabaseID:databaseID + [[FSTUserDataConverter alloc] initWithDatabaseID:&database_id preConverter:^id _Nullable(id _Nullable input) { return input; }]; @@ -167,8 +173,11 @@ FSTResourcePath *FSTTestPath(NSString *path) { } FSTDocumentKeyReference *FSTTestRef(NSString *projectID, NSString *database, NSString *path) { - FSTDatabaseID *databaseID = [FSTDatabaseID databaseIDWithProject:projectID database:database]; - return [[FSTDocumentKeyReference alloc] initWithKey:FSTTestDocKey(path) databaseID:databaseID]; + // This owns the DatabaseIds since we do not have FirestoreClient instance to own them. + static std::vector<DatabaseId> database_ids; + database_ids.emplace_back(util::MakeStringView(projectID), util::MakeStringView(database)); + return [[FSTDocumentKeyReference alloc] initWithKey:FSTTestDocKey(path) + databaseID:&database_ids.back()]; } FSTQuery *FSTTestQuery(NSString *path) { diff --git a/Firestore/Example/Tests/Util/FSTIntegrationTestCase.mm b/Firestore/Example/Tests/Util/FSTIntegrationTestCase.mm index ef15056..df591b0 100644 --- a/Firestore/Example/Tests/Util/FSTIntegrationTestCase.mm +++ b/Firestore/Example/Tests/Util/FSTIntegrationTestCase.mm @@ -27,12 +27,16 @@ #import "Firestore/Source/Auth/FSTEmptyCredentialsProvider.h" #import "Firestore/Source/Core/FSTFirestoreClient.h" #import "Firestore/Source/Local/FSTLevelDB.h" -#import "Firestore/Source/Model/FSTDatabaseID.h" #import "Firestore/Source/Util/FSTDispatchQueue.h" #import "Firestore/Example/Tests/Util/FSTEventAccumulator.h" #import "Firestore/Example/Tests/Util/FSTTestDispatchQueue.h" +#include "Firestore/core/src/firebase/firestore/model/database_id.h" +#include "Firestore/core/src/firebase/firestore/util/string_apple.h" + +namespace util = firebase::firestore::util; +using firebase::firestore::model::DatabaseId; using firebase::firestore::util::CreateAutoId; NS_ASSUME_NONNULL_BEGIN @@ -137,12 +141,13 @@ NS_ASSUME_NONNULL_BEGIN FIRSetLoggerLevel(FIRLoggerLevelDebug); // HACK: FIRFirestore expects a non-nil app, but for tests we cheat. FIRApp *app = nil; - FIRFirestore *firestore = [[FIRFirestore alloc] initWithProjectID:projectID - database:kDefaultDatabaseID - persistenceKey:persistenceKey - credentialsProvider:credentialsProvider - workerDispatchQueue:workerDispatchQueue - firebaseApp:app]; + FIRFirestore *firestore = [[FIRFirestore alloc] + initWithProjectID:projectID + database:util::WrapNSStringNoCopy(DatabaseId::kDefaultDatabaseId) + persistenceKey:persistenceKey + credentialsProvider:credentialsProvider + workerDispatchQueue:workerDispatchQueue + firebaseApp:app]; firestore.settings = [FSTIntegrationTestCase settings]; |