aboutsummaryrefslogtreecommitdiffhomepage
path: root/Example
diff options
context:
space:
mode:
authorGravatar Ryan Wilson <wilsonryan@google.com>2018-06-28 13:48:13 -0400
committerGravatar GitHub <noreply@github.com>2018-06-28 13:48:13 -0400
commit2f6bf8d6695170fe15bb95d2eca6d6b7e56add74 (patch)
treea9b8f050c53de11d8a2f0fd16e5631987265c704 /Example
parent8d399c78bda9529832d6ecd70a6c4c564c62da6d (diff)
Add FirebaseCore component interoperability. (#1437)
* Add FirebaseCore component interoperability. This puts in place the system that will allow SDKs to register with Core and retrieve functionalities provided by other SDKs. * Updated documentation. * Add copywrite, fix log messages. * Explicitly import headers from Private dir
Diffstat (limited to 'Example')
-rw-r--r--Example/Core/Tests/FIRComponentContainerTest.m157
-rw-r--r--Example/Core/Tests/FIRComponentTypeTest.m60
-rw-r--r--Example/Core/Tests/FIRTestComponents.h63
-rw-r--r--Example/Core/Tests/FIRTestComponents.m118
-rw-r--r--Example/Firebase.xcodeproj/project.pbxproj38
5 files changed, 430 insertions, 6 deletions
diff --git a/Example/Core/Tests/FIRComponentContainerTest.m b/Example/Core/Tests/FIRComponentContainerTest.m
new file mode 100644
index 0000000..b255973
--- /dev/null
+++ b/Example/Core/Tests/FIRComponentContainerTest.m
@@ -0,0 +1,157 @@
+// Copyright 2018 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 "FIRTestCase.h"
+
+#import <FirebaseCore/FIRAppInternal.h>
+#import <FirebaseCore/FIRComponent.h>
+#import <FirebaseCore/FIRComponentContainerInternal.h>
+
+#import "FIRTestComponents.h"
+
+/// Internally exposed methods and properties for testing.
+@interface FIRComponentContainer (TestInternal)
+
+@property(nonatomic, strong) NSMutableDictionary<NSString *, FIRComponentCreationBlock> *components;
+@property(nonatomic, strong) NSMutableDictionary<NSString *, id> *cachedInstances;
+
++ (void)registerAsComponentRegistrant:(Class)klass inSet:(NSMutableSet<Class> *)allRegistrants;
+
+- (instancetype)initWithApp:(FIRApp *)app registrants:(NSMutableSet<Class> *)allRegistrants;
+
+@end
+
+@interface FIRComponentContainerTest : FIRTestCase
+
+@end
+
+@implementation FIRComponentContainerTest
+
+#pragma mark - Registration Tests
+
+- (void)testRegisteringConformingClass {
+ NSMutableSet<Class> *allRegistrants = [NSMutableSet<Class> set];
+ Class testClass = [FIRTestClass class];
+ [FIRComponentContainer registerAsComponentRegistrant:testClass inSet:allRegistrants];
+ XCTAssertTrue([allRegistrants containsObject:testClass]);
+}
+
+- (void)testRegisteringNonConformingClass {
+ NSMutableSet<Class> *allRegistrants = [NSMutableSet<Class> set];
+ XCTAssertThrows(
+ [FIRComponentContainer registerAsComponentRegistrant:[NSString class] inSet:allRegistrants]);
+ XCTAssertTrue(allRegistrants.count == 0);
+}
+
+- (void)testComponentsPopulatedOnInit {
+ FIRComponentContainer *container = [self containerWithRegistrants:@[ [FIRTestClass class] ]];
+
+ // Verify that the block is stored.
+ NSString *protocolName = NSStringFromProtocol(@protocol(FIRTestProtocol));
+ FIRComponentCreationBlock creationBlock = container.components[protocolName];
+ OCMExpect(creationBlock);
+}
+
+#pragma mark - Caching Tests
+
+- (void)testInstanceCached {
+ FIRComponentContainer *container =
+ [self containerWithRegistrants:@[ [FIRTestClassCached class] ]];
+
+ // Fetch an instance for `FIRTestProtocolCached`, then fetch it again to assert it's cached.
+ id<FIRTestProtocolCached> instance1 = FIR_COMPONENT(FIRTestProtocolCached, container);
+ XCTAssertNotNil(instance1);
+ id<FIRTestProtocolCached> instance2 = FIR_COMPONENT(FIRTestProtocolCached, container);
+ XCTAssertNotNil(instance2);
+ XCTAssertEqual(instance1, instance2);
+}
+
+- (void)testInstanceNotCached {
+ FIRComponentContainer *container = [self containerWithRegistrants:@[ [FIRTestClass class] ]];
+
+ // Retrieve an instance from the container, then fetch it again and ensure it's not the same
+ // instance.
+ id<FIRTestProtocol> instance1 = FIR_COMPONENT(FIRTestProtocol, container);
+ XCTAssertNotNil(instance1);
+ id<FIRTestProtocol> instance2 = FIR_COMPONENT(FIRTestProtocol, container);
+ XCTAssertNotNil(instance2);
+ XCTAssertNotEqual(instance1, instance2);
+}
+
+- (void)testRemoveAllCachedInstances {
+ FIRComponentContainer *container = [self containerWithRegistrants:@[
+ [FIRTestClass class], [FIRTestClassCached class], [FIRTestClassEagerCached class]
+ ]];
+
+ // Retrieve an instance of FIRTestClassCached to ensure it's cached.
+ id<FIRTestProtocolCached> cachedInstance1 = FIR_COMPONENT(FIRTestProtocolCached, container);
+ id<FIRTestProtocolEagerCached> eagerInstance1 =
+ FIR_COMPONENT(FIRTestProtocolEagerCached, container);
+
+ // FIRTestClassEagerCached and FIRTestClassCached instances should be cached at this point.
+ XCTAssertTrue(container.cachedInstances.count == 2);
+
+ // Remove the instances and verify cachedInstances is empty, and that new instances returned from
+ // the container don't match the old ones.
+ [container removeAllCachedInstances];
+ XCTAssertTrue(container.cachedInstances.count == 0);
+
+ id<FIRTestProtocolCached> cachedInstance2 = FIR_COMPONENT(FIRTestProtocolCached, container);
+ XCTAssertNotEqual(cachedInstance1, cachedInstance2);
+ id<FIRTestProtocolEagerCached> eagerInstance2 =
+ FIR_COMPONENT(FIRTestProtocolEagerCached, container);
+ XCTAssertNotEqual(eagerInstance1, eagerInstance2);
+}
+
+#pragma mark - Instantiation Tests
+
+- (void)testEagerInstantiation {
+ // Create a container with `FIRTestClassEagerCached` as a registrant, which provides the
+ // implementation for `FIRTestProtocolEagerCached` and requires eager instantiation as well as
+ // caching so the test can verify it was eagerly instantiated.
+ FIRComponentContainer *container =
+ [self containerWithRegistrants:@[ [FIRTestClassEagerCached class] ]];
+ NSString *protocolName = NSStringFromProtocol(@protocol(FIRTestProtocolEagerCached));
+ XCTAssertNotNil(container.cachedInstances[protocolName]);
+}
+
+#pragma mark - Input Validation Tests
+
+- (void)testProtocolAlreadyRegistered {
+ // Register two classes that provide the same protocol. Only one should be stored, and there
+ // should be a log stating that the protocol has already been registered. Right now there's no
+ // guarantee which one will be registered first since it's an NSSet under the hood, but that could
+ // change in the future.
+ // TODO(wilsonryan): Assert that the log gets called warning that it's already been registered.
+ FIRComponentContainer *container =
+ [self containerWithRegistrants:@[ [FIRTestClass class], [FIRTestClassDuplicate class] ]];
+ XCTAssert(container.components.count == 1);
+}
+
+#pragma mark - Convenience Methods
+
+/// Create a container that has registered the test class.
+- (FIRComponentContainer *)containerWithRegistrants:(NSArray<Class> *)registrants {
+ id appMock = OCMClassMock([FIRApp class]);
+ NSMutableSet<Class> *allRegistrants = [NSMutableSet<Class> set];
+
+ // Initialize the container with the test classes.
+ for (Class c in registrants) {
+ [FIRComponentContainer registerAsComponentRegistrant:c inSet:allRegistrants];
+ }
+
+ return [[FIRComponentContainer alloc] initWithApp:appMock registrants:allRegistrants];
+}
+
+@end
diff --git a/Example/Core/Tests/FIRComponentTypeTest.m b/Example/Core/Tests/FIRComponentTypeTest.m
new file mode 100644
index 0000000..7076fdd
--- /dev/null
+++ b/Example/Core/Tests/FIRComponentTypeTest.m
@@ -0,0 +1,60 @@
+// Copyright 2018 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 "FIRTestCase.h"
+
+#import <FirebaseCore/FIRComponentContainerInternal.h>
+#import <FirebaseCore/FIRComponentType.h>
+
+#import "FIRTestComponents.h"
+
+@interface FIRComponentTypeTest : FIRTestCase
+
+@property(nonatomic, strong) id componentContainerMock;
+@end
+
+@implementation FIRComponentTypeTest
+
+- (void)setUp {
+ [super setUp];
+ _componentContainerMock = OCMClassMock([FIRComponentContainer class]);
+}
+
+- (void)tearDown {
+ [super tearDown];
+ [_componentContainerMock stopMocking];
+}
+
+- (void)testForwardsCallToContainer {
+ Protocol *testProtocol = @protocol(FIRTestProtocol);
+ OCMExpect([self.componentContainerMock instanceForProtocol:testProtocol]);
+
+ // Grab an instance from the container, through ComponentType.
+ __unused id<FIRTestProtocol> instance =
+ [FIRComponentType<id<FIRTestProtocol>> instanceForProtocol:@protocol(FIRTestProtocol)
+ inContainer:self.componentContainerMock];
+ OCMVerifyAll(self.componentContainerMock);
+}
+
+- (void)testMacroForwardsCallToContainer {
+ Protocol *testProtocol = @protocol(FIRTestProtocol);
+ OCMExpect([self.componentContainerMock instanceForProtocol:testProtocol]);
+
+ // Grab an instance from the container, through the macro that uses FIRComponentType.
+ __unused id<FIRTestProtocol> instance =
+ FIR_COMPONENT(FIRTestProtocol, self.componentContainerMock);
+
+ OCMVerifyAll(self.componentContainerMock);
+}
+@end
diff --git a/Example/Core/Tests/FIRTestComponents.h b/Example/Core/Tests/FIRTestComponents.h
new file mode 100644
index 0000000..63b2075
--- /dev/null
+++ b/Example/Core/Tests/FIRTestComponents.h
@@ -0,0 +1,63 @@
+// Copyright 2018 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 <Foundation/Foundation.h>
+
+#import <FirebaseCore/FIRComponent.h>
+#import <FirebaseCore/FIRComponentContainer.h>
+#import <FirebaseCore/FIRComponentRegistrant.h>
+
+@protocol FIRComponentRegistrant;
+
+#pragma mark - Standard Component
+
+/// A test protocol to be used for container testing.
+@protocol FIRTestProtocol
+- (void)doSomething;
+@end
+
+/// A test class that is a component registrant.
+@interface FIRTestClass
+ : NSObject <FIRTestProtocol, FIRComponentRegistrant, FIRComponentLifecycleMaintainer>
+@end
+
+/// A test class that is a component registrant, a duplicate of FIRTestClass.
+@interface FIRTestClassDuplicate
+ : NSObject <FIRTestProtocol, FIRComponentRegistrant, FIRComponentLifecycleMaintainer>
+@end
+
+#pragma mark - Eager Component
+
+/// A test protocol to be used for container testing.
+@protocol FIRTestProtocolEagerCached
+- (void)doSomethingFaster;
+@end
+
+/// A test class that is a component registrant that provides a component requiring eager
+/// instantiation, and is cached for easier validation that it was instantiated.
+@interface FIRTestClassEagerCached
+ : NSObject <FIRTestProtocolEagerCached, FIRComponentRegistrant, FIRComponentLifecycleMaintainer>
+@end
+
+#pragma mark - Cached Component
+
+/// A test protocol to be used for container testing.
+@protocol FIRTestProtocolCached
+@end
+
+/// A test class that is a component registrant that provides a component that requests to be
+/// cached.
+@interface FIRTestClassCached
+ : NSObject <FIRTestProtocolCached, FIRComponentRegistrant, FIRComponentLifecycleMaintainer>
+@end
diff --git a/Example/Core/Tests/FIRTestComponents.m b/Example/Core/Tests/FIRTestComponents.m
new file mode 100644
index 0000000..68346f3
--- /dev/null
+++ b/Example/Core/Tests/FIRTestComponents.m
@@ -0,0 +1,118 @@
+// Copyright 2018 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 "FIRTestComponents.h"
+
+#import <FirebaseCore/FIRComponent.h>
+
+#pragma mark - Standard Component
+
+@implementation FIRTestClass
+
+/// FIRTestProtocol conformance.
+- (void)doSomething {
+}
+
+/// FIRComponentRegistrant conformance.
++ (nonnull NSArray<FIRComponent *> *)componentsToRegister {
+ FIRComponent *testComponent =
+ [FIRComponent componentWithProtocol:@protocol(FIRTestProtocol)
+ creationBlock:^id _Nullable(FIRComponentContainer *_Nonnull container,
+ BOOL *_Nonnull isCacheable) {
+ return [[FIRTestClass alloc] init];
+ }];
+ return @[ testComponent ];
+}
+
+/// FIRComponentLifecycleMaintainer conformance.
+- (void)appWillBeDeleted:(FIRApp *)app {
+}
+
+@end
+
+/// A test class that is a component registrant, a duplicate of FIRTestClass.
+@implementation FIRTestClassDuplicate
+
+- (void)doSomething {
+}
+
+/// FIRComponentRegistrant conformance.
++ (nonnull NSArray<FIRComponent *> *)componentsToRegister {
+ FIRComponent *testComponent =
+ [FIRComponent componentWithProtocol:@protocol(FIRTestProtocol)
+ creationBlock:^id _Nullable(FIRComponentContainer *_Nonnull container,
+ BOOL *_Nonnull isCacheable) {
+ return [[FIRTestClassDuplicate alloc] init];
+ }];
+ return @[ testComponent ];
+}
+
+/// FIRComponentLifecycleMaintainer conformance.
+- (void)appWillBeDeleted:(FIRApp *)app {
+}
+
+@end
+
+#pragma mark - Eager Component
+
+@implementation FIRTestClassEagerCached
+
+/// FIRTestProtocolEager conformance.
+- (void)doSomethingFaster {
+}
+
+/// FIRComponentRegistrant conformance.
++ (nonnull NSArray<FIRComponent *> *)componentsToRegister {
+ FIRComponent *testComponent = [FIRComponent
+ componentWithProtocol:@protocol(FIRTestProtocolEagerCached)
+ instantiationTiming:FIRInstantiationTimingAlwaysEager
+ dependencies:@[]
+ creationBlock:^id _Nullable(FIRComponentContainer *_Nonnull container,
+ BOOL *_Nonnull isCacheable) {
+ FIRTestClassEagerCached *instance = [[FIRTestClassEagerCached alloc] init];
+ *isCacheable = YES;
+ [instance doSomethingFaster];
+ return instance;
+ }];
+ return @[ testComponent ];
+}
+
+/// FIRComponentLifecycleMaintainer conformance.
+- (void)appWillBeDeleted:(FIRApp *)app {
+}
+
+@end
+
+#pragma mark - Cached Component
+
+@implementation FIRTestClassCached
+
+/// FIRComponentRegistrant conformance.
++ (nonnull NSArray<FIRComponent *> *)componentsToRegister {
+ FIRComponent *testComponent = [FIRComponent
+ componentWithProtocol:@protocol(FIRTestProtocolCached)
+ creationBlock:^id _Nullable(FIRComponentContainer *_Nonnull container,
+ BOOL *_Nonnull isCacheable) {
+ FIRTestClassCached *instanceToCache = [[FIRTestClassCached alloc] init];
+ *isCacheable = YES;
+ return instanceToCache;
+ }];
+ return @[ testComponent ];
+}
+
+/// FIRComponentLifecycleMaintainer conformance.
+- (void)appWillBeDeleted:(FIRApp *)app {
+}
+
+@end
diff --git a/Example/Firebase.xcodeproj/project.pbxproj b/Example/Firebase.xcodeproj/project.pbxproj
index 61c4c6a..8d3c13b 100644
--- a/Example/Firebase.xcodeproj/project.pbxproj
+++ b/Example/Firebase.xcodeproj/project.pbxproj
@@ -568,6 +568,15 @@
DEF6C33D1FBCE775005D0740 /* FIRVerifyPasswordRequestTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DE93151F1E86C6FF0083EDBF /* FIRVerifyPasswordRequestTest.m */; };
DEF6C33E1FBCE775005D0740 /* FIRVerifyPasswordResponseTests.m in Sources */ = {isa = PBXBuildFile; fileRef = DE9315201E86C6FF0083EDBF /* FIRVerifyPasswordResponseTests.m */; };
DEF6C3411FBCE775005D0740 /* OCMStubRecorder+FIRAuthUnitTests.m in Sources */ = {isa = PBXBuildFile; fileRef = DE9315241E86C6FF0083EDBF /* OCMStubRecorder+FIRAuthUnitTests.m */; };
+ ED34CF4E20DC16DD000EA5D1 /* FIRComponentContainerTest.m in Sources */ = {isa = PBXBuildFile; fileRef = ED34CF4A20DC16DC000EA5D1 /* FIRComponentContainerTest.m */; };
+ ED34CF4F20DC16DD000EA5D1 /* FIRComponentContainerTest.m in Sources */ = {isa = PBXBuildFile; fileRef = ED34CF4A20DC16DC000EA5D1 /* FIRComponentContainerTest.m */; };
+ ED34CF5020DC16DD000EA5D1 /* FIRComponentContainerTest.m in Sources */ = {isa = PBXBuildFile; fileRef = ED34CF4A20DC16DC000EA5D1 /* FIRComponentContainerTest.m */; };
+ ED34CF5120DC16DD000EA5D1 /* FIRTestComponents.m in Sources */ = {isa = PBXBuildFile; fileRef = ED34CF4B20DC16DC000EA5D1 /* FIRTestComponents.m */; };
+ ED34CF5220DC16DD000EA5D1 /* FIRTestComponents.m in Sources */ = {isa = PBXBuildFile; fileRef = ED34CF4B20DC16DC000EA5D1 /* FIRTestComponents.m */; };
+ ED34CF5320DC16DD000EA5D1 /* FIRTestComponents.m in Sources */ = {isa = PBXBuildFile; fileRef = ED34CF4B20DC16DC000EA5D1 /* FIRTestComponents.m */; };
+ ED34CF5420DC16DD000EA5D1 /* FIRComponentTypeTest.m in Sources */ = {isa = PBXBuildFile; fileRef = ED34CF4D20DC16DD000EA5D1 /* FIRComponentTypeTest.m */; };
+ ED34CF5520DC16DD000EA5D1 /* FIRComponentTypeTest.m in Sources */ = {isa = PBXBuildFile; fileRef = ED34CF4D20DC16DD000EA5D1 /* FIRComponentTypeTest.m */; };
+ ED34CF5620DC16DD000EA5D1 /* FIRComponentTypeTest.m in Sources */ = {isa = PBXBuildFile; fileRef = ED34CF4D20DC16DD000EA5D1 /* FIRComponentTypeTest.m */; };
ED8C81002088EFA20093EB8A /* FIRMutableDictionaryTest.m in Sources */ = {isa = PBXBuildFile; fileRef = ED8C80FA2088EFA10093EB8A /* FIRMutableDictionaryTest.m */; };
ED8C81012088EFA20093EB8A /* FIRMutableDictionaryTest.m in Sources */ = {isa = PBXBuildFile; fileRef = ED8C80FA2088EFA10093EB8A /* FIRMutableDictionaryTest.m */; };
ED8C81022088EFA20093EB8A /* FIRMutableDictionaryTest.m in Sources */ = {isa = PBXBuildFile; fileRef = ED8C80FA2088EFA10093EB8A /* FIRMutableDictionaryTest.m */; };
@@ -1255,6 +1264,10 @@
DEE14D7D1E844677006FA992 /* Tests-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "Tests-Info.plist"; sourceTree = "<group>"; };
DEF288401F9AB6E100D480CF /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-568h@2x.png"; sourceTree = "<group>"; };
E2C2834C90DBAB56D568189F /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = LICENSE; path = ../LICENSE; sourceTree = "<group>"; };
+ ED34CF4A20DC16DC000EA5D1 /* FIRComponentContainerTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FIRComponentContainerTest.m; sourceTree = "<group>"; };
+ ED34CF4B20DC16DC000EA5D1 /* FIRTestComponents.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FIRTestComponents.m; sourceTree = "<group>"; };
+ ED34CF4C20DC16DD000EA5D1 /* FIRTestComponents.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FIRTestComponents.h; sourceTree = "<group>"; };
+ ED34CF4D20DC16DD000EA5D1 /* FIRComponentTypeTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FIRComponentTypeTest.m; sourceTree = "<group>"; };
ED8C80FA2088EFA10093EB8A /* FIRMutableDictionaryTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FIRMutableDictionaryTest.m; sourceTree = "<group>"; };
ED8C80FB2088EFA10093EB8A /* FIRNetworkTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FIRNetworkTest.m; sourceTree = "<group>"; };
ED8C80FC2088EFA20093EB8A /* FIRReachabilityCheckerTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FIRReachabilityCheckerTest.m; sourceTree = "<group>"; };
@@ -2265,21 +2278,25 @@
DEE14D741E844677006FA992 /* Tests */ = {
isa = PBXGroup;
children = (
- ED8C80FA2088EFA10093EB8A /* FIRMutableDictionaryTest.m */,
- ED8C80FB2088EFA10093EB8A /* FIRNetworkTest.m */,
- ED8C80FC2088EFA20093EB8A /* FIRReachabilityCheckerTest.m */,
- ED8C80FD2088EFA20093EB8A /* third_party */,
EDD43AA320BF7C7B005EBB36 /* FIRAnalyticsConfigurationTest.m */,
- DE4B26DE20855F1F0030A38C /* FIRAppEnvironmentUtilTest.m */,
- DEE14D7B1E844677006FA992 /* FIRTestCase.h */,
DEE14D751E844677006FA992 /* FIRAppAssociationRegistrationUnitTests.m */,
+ DE4B26DE20855F1F0030A38C /* FIRAppEnvironmentUtilTest.m */,
DEE14D761E844677006FA992 /* FIRAppTest.m */,
DEE14D771E844677006FA992 /* FIRBundleUtilTest.m */,
+ ED34CF4A20DC16DC000EA5D1 /* FIRComponentContainerTest.m */,
+ ED34CF4D20DC16DD000EA5D1 /* FIRComponentTypeTest.m */,
DEE14D781E844677006FA992 /* FIRConfigurationTest.m */,
DEE14D791E844677006FA992 /* FIRLoggerTest.m */,
+ ED8C80FA2088EFA10093EB8A /* FIRMutableDictionaryTest.m */,
+ ED8C80FB2088EFA10093EB8A /* FIRNetworkTest.m */,
DEE14D7A1E844677006FA992 /* FIROptionsTest.m */,
+ ED8C80FC2088EFA20093EB8A /* FIRReachabilityCheckerTest.m */,
+ DEE14D7B1E844677006FA992 /* FIRTestCase.h */,
DEE14D7C1E844677006FA992 /* FIRTestCase.m */,
+ ED34CF4C20DC16DD000EA5D1 /* FIRTestComponents.h */,
+ ED34CF4B20DC16DC000EA5D1 /* FIRTestComponents.m */,
DEE14D7D1E844677006FA992 /* Tests-Info.plist */,
+ ED8C80FD2088EFA20093EB8A /* third_party */,
);
path = Tests;
sourceTree = "<group>";
@@ -3621,12 +3638,15 @@
D064E6AF1ED9B31C001956DF /* FIRAppAssociationRegistrationUnitTests.m in Sources */,
ED8C81012088EFA20093EB8A /* FIRMutableDictionaryTest.m in Sources */,
D064E6B01ED9B31C001956DF /* FIRAppTest.m in Sources */,
+ ED34CF5220DC16DD000EA5D1 /* FIRTestComponents.m in Sources */,
D064E6B11ED9B31C001956DF /* FIRConfigurationTest.m in Sources */,
+ ED34CF5520DC16DD000EA5D1 /* FIRComponentTypeTest.m in Sources */,
DE4B26E120855F500030A38C /* FIRAppEnvironmentUtilTest.m in Sources */,
D064E6B21ED9B31C001956DF /* FIRLoggerTest.m in Sources */,
D064E6B31ED9B31C001956DF /* FIROptionsTest.m in Sources */,
ED8C810A2088EFA20093EB8A /* GTMHTTPServer.m in Sources */,
D064E6B41ED9B31C001956DF /* FIRBundleUtilTest.m in Sources */,
+ ED34CF4F20DC16DD000EA5D1 /* FIRComponentContainerTest.m in Sources */,
EDD43AA520BF7C7B005EBB36 /* FIRAnalyticsConfigurationTest.m in Sources */,
D064E6B51ED9B31C001956DF /* FIRTestCase.m in Sources */,
);
@@ -4080,12 +4100,15 @@
DEAAD3DA1FBA34250053BF48 /* FIROptionsTest.m in Sources */,
ED8C81022088EFA20093EB8A /* FIRMutableDictionaryTest.m in Sources */,
DEAAD3D51FBA34250053BF48 /* FIRAppAssociationRegistrationUnitTests.m in Sources */,
+ ED34CF5320DC16DD000EA5D1 /* FIRTestComponents.m in Sources */,
DEAAD3D91FBA34250053BF48 /* FIRLoggerTest.m in Sources */,
+ ED34CF5620DC16DD000EA5D1 /* FIRComponentTypeTest.m in Sources */,
DE4B26E220855F520030A38C /* FIRAppEnvironmentUtilTest.m in Sources */,
DEAAD3D61FBA34250053BF48 /* FIRAppTest.m in Sources */,
DEAAD3D81FBA34250053BF48 /* FIRConfigurationTest.m in Sources */,
ED8C810B2088EFA20093EB8A /* GTMHTTPServer.m in Sources */,
DEAAD3DB1FBA34250053BF48 /* FIRTestCase.m in Sources */,
+ ED34CF5020DC16DD000EA5D1 /* FIRComponentContainerTest.m in Sources */,
EDD43AA620BF7C7B005EBB36 /* FIRAnalyticsConfigurationTest.m in Sources */,
DEAAD3D71FBA34250053BF48 /* FIRBundleUtilTest.m in Sources */,
);
@@ -4164,12 +4187,15 @@
DEE14D8E1E84468D006FA992 /* FIRAppAssociationRegistrationUnitTests.m in Sources */,
ED8C81002088EFA20093EB8A /* FIRMutableDictionaryTest.m in Sources */,
DEE14D8F1E84468D006FA992 /* FIRAppTest.m in Sources */,
+ ED34CF5120DC16DD000EA5D1 /* FIRTestComponents.m in Sources */,
DEE14D911E84468D006FA992 /* FIRConfigurationTest.m in Sources */,
+ ED34CF5420DC16DD000EA5D1 /* FIRComponentTypeTest.m in Sources */,
DE4B26E020855F4C0030A38C /* FIRAppEnvironmentUtilTest.m in Sources */,
DEE14D921E84468D006FA992 /* FIRLoggerTest.m in Sources */,
DEE14D931E84468D006FA992 /* FIROptionsTest.m in Sources */,
ED8C81092088EFA20093EB8A /* GTMHTTPServer.m in Sources */,
DEE14D901E84468D006FA992 /* FIRBundleUtilTest.m in Sources */,
+ ED34CF4E20DC16DD000EA5D1 /* FIRComponentContainerTest.m in Sources */,
EDD43AA420BF7C7B005EBB36 /* FIRAnalyticsConfigurationTest.m in Sources */,
DEE14D941E84468D006FA992 /* FIRTestCase.m in Sources */,
);