@@ -114,6 +114,15 @@ static const char* kAdNetworkExtrasClassName =
114
114
static const char * kAdNetworkExtrasClassName = " GADExtras" ;
115
115
#endif
116
116
117
+ // Class nname of the GMA SDK returned in initialization results.
118
+ #if defined(ANDROID)
119
+ const char kAdMobClassName [] = " com.google.android.gms.ads.MobileAds" ;
120
+ #elif defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE
121
+ const char kAdMobClassName [] = " GADMobileAds" ;
122
+ #else // desktop
123
+ const char kAdMobClassName [] = " stub" ;
124
+ #endif
125
+
117
126
// Used to detect kAdMobErrorAdNetworkClassLoadErrors when loading
118
127
// ads.
119
128
static const char * kAdNetworkExtrasInvalidClassName = " abc123321cba" ;
@@ -151,43 +160,60 @@ class FirebaseAdMobTest : public FirebaseTest {
151
160
static firebase::App* shared_app_;
152
161
};
153
162
163
+ // Runs AdMob Tests on methods and functions that should be run
164
+ // before AdMob initializes.
165
+ class FirebaseAdMobPreInitializationTests : public FirebaseAdMobTest {
166
+ public:
167
+ FirebaseAdMobPreInitializationTests ();
168
+ ~FirebaseAdMobPreInitializationTests () override ;
169
+
170
+ static void SetUpTestSuite ();
171
+
172
+ void SetUp () override ;
173
+ };
174
+
154
175
firebase::App* FirebaseAdMobTest::shared_app_ = nullptr ;
155
176
156
177
void PauseForVisualInspectionAndCallbacks () {
157
178
app_framework::ProcessEvents (300 );
158
179
}
159
180
160
- void FirebaseAdMobTest::SetUpTestSuite () {
161
- LogDebug (" Initialize Firebase App." );
162
-
163
- FindFirebaseConfig (FIREBASE_CONFIG_STRING);
164
-
165
- #if defined(ANDROID)
166
- shared_app_ = ::firebase::App::Create (app_framework::GetJniEnv (),
167
- app_framework::GetActivity ());
168
- #else
169
- shared_app_ = ::firebase::App::Create ();
170
- #endif // defined(ANDROID)
171
-
181
+ void InitializeAdMob (firebase::App* shared_app) {
172
182
LogDebug (" Initializing AdMob." );
173
183
174
184
::firebase::ModuleInitializer initializer;
175
- initializer.Initialize (shared_app_ , nullptr ,
185
+ initializer.Initialize (shared_app , nullptr ,
176
186
[](::firebase::App* app, void * /* userdata */ ) {
177
187
LogDebug (" Try to initialize AdMob" );
178
188
firebase::InitResult result;
179
189
::firebase::admob::Initialize (*app, &result);
180
190
return result;
181
191
});
182
192
183
- WaitForCompletion (initializer.InitializeLastResult (), " Initialize" );
193
+ FirebaseAdMobTest::WaitForCompletion (initializer.InitializeLastResult (),
194
+ " Initialize" );
184
195
185
196
ASSERT_EQ (initializer.InitializeLastResult ().error (), 0 )
186
197
<< initializer.InitializeLastResult ().error_message ();
187
198
188
199
LogDebug (" Successfully initialized AdMob." );
189
200
}
190
201
202
+ void FirebaseAdMobTest::SetUpTestSuite () {
203
+ LogDebug (" Initialize Firebase App." );
204
+
205
+ FindFirebaseConfig (FIREBASE_CONFIG_STRING);
206
+
207
+ #if defined(ANDROID)
208
+ shared_app_ = ::firebase::App::Create (app_framework::GetJniEnv (),
209
+ app_framework::GetActivity ());
210
+ #else
211
+ shared_app_ = ::firebase::App::Create ();
212
+ #endif // defined(ANDROID)
213
+
214
+ InitializeAdMob (shared_app_);
215
+ }
216
+
191
217
void FirebaseAdMobTest::TearDownTestSuite () {
192
218
// Workaround: AdMob does some of its initialization in the main
193
219
// thread, so if you terminate it too quickly after initialization
@@ -247,7 +273,54 @@ firebase::admob::AdRequest FirebaseAdMobTest::GetAdRequest() {
247
273
return request;
248
274
}
249
275
276
+ FirebaseAdMobPreInitializationTests::FirebaseAdMobPreInitializationTests () {}
277
+
278
+ FirebaseAdMobPreInitializationTests::~FirebaseAdMobPreInitializationTests () {}
279
+
280
+ void FirebaseAdMobPreInitializationTests::SetUp () { FirebaseTest::SetUp (); }
281
+
282
+ void FirebaseAdMobPreInitializationTests::SetUpTestSuite () {
283
+ LogDebug (" Initialize Firebase App." );
284
+ FindFirebaseConfig (FIREBASE_CONFIG_STRING);
285
+ #if defined(ANDROID)
286
+ shared_app_ = ::firebase::App::Create (app_framework::GetJniEnv (),
287
+ app_framework::GetActivity ());
288
+ #else
289
+ shared_app_ = ::firebase::App::Create ();
290
+ #endif // defined(ANDROID)
291
+ }
292
+
250
293
// Test cases below.
294
+
295
+ TEST_F (FirebaseAdMobPreInitializationTests,
296
+ TestDisableMediationInitialization) {
297
+ // Note: This test should be disabled or put in an entirely different test
298
+ // binrary if we ever wish to test mediation in this application.
299
+ firebase::admob::DisableMediationInitialization ();
300
+
301
+ // Ensure that AdMob can initialize.
302
+ InitializeAdMob (shared_app_);
303
+ auto initialize_future = firebase::admob::InitializeLastResult ();
304
+ WaitForCompletion (initialize_future, " admob::Initialize" );
305
+ ASSERT_NE (initialize_future.result (), nullptr );
306
+ EXPECT_EQ (*initialize_future.result (),
307
+ firebase::admob::GetInitializationStatus ());
308
+
309
+ #if (defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE)
310
+ // Check to see that only one Adapter was initialized, the base GMA adapter.
311
+ // Note: DisableMediationInitialization is only implemented on iOS.
312
+ std::map<std::string, firebase::admob::AdapterStatus> adapter_status =
313
+ firebase::admob::GetInitializationStatus ().GetAdapterStatusMap ();
314
+ EXPECT_EQ (adapter_status.size (), 1 );
315
+ EXPECT_THAT (
316
+ adapter_status,
317
+ Contains (Pair (
318
+ kAdMobClassName ,
319
+ Property (&firebase::admob::AdapterStatus::is_initialized, true ))))
320
+ << " Expected adapter class '" << kAdMobClassName << " ' is not loaded." ;
321
+ #endif
322
+ }
323
+
251
324
TEST_F (FirebaseAdMobTest, TestInitializationStatus) {
252
325
// Ensure Initialize()'s result matches GetInitializationStatus().
253
326
auto initialize_future = firebase::admob::InitializeLastResult ();
@@ -265,14 +338,6 @@ TEST_F(FirebaseAdMobTest, TestInitializationStatus) {
265
338
adapter_status.second .description ().c_str ());
266
339
}
267
340
268
- #if defined(ANDROID)
269
- const char kAdMobClassName [] = " com.google.android.gms.ads.MobileAds" ;
270
- #elif defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE
271
- const char kAdMobClassName [] = " GADMobileAds" ;
272
- #else // desktop
273
- const char kAdMobClassName [] = " stub" ;
274
- #endif
275
-
276
341
// Confirm that the default Google Mobile Ads SDK class name shows up in the
277
342
// list. It should either be is_initialized = true, or description should say
278
343
// "Timeout" (this is a special case we are using to deflake this test on
@@ -287,6 +352,13 @@ TEST_F(FirebaseAdMobTest, TestInitializationStatus) {
287
352
<< " Expected adapter class '" << kAdMobClassName << " ' is not loaded." ;
288
353
}
289
354
355
+ TEST_F (FirebaseAdMobPreInitializationTests, TestDisableSDKCrashReporting) {
356
+ // We can't test to see if this method successfully reconfigures crash
357
+ // reporting, but we're still calling it as a sanity check and to ensure
358
+ // the symbol exists in the library.
359
+ firebase::admob::DisableSDKCrashReporting ();
360
+ }
361
+
290
362
TEST_F (FirebaseAdMobTest, TestGetAdRequest) { GetAdRequest (); }
291
363
292
364
TEST_F (FirebaseAdMobTest, TestGetAdRequestValues) {
0 commit comments