Skip to content

Commit 186060b

Browse files
Internal updates (#1251)
* Internal updates * Internal updates 2 (#1269) * Internal updates 3 (#1300) * Internal updates 4 (#1310)
1 parent ad633de commit 186060b

30 files changed

+2489
-4
lines changed

app/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -548,6 +548,7 @@ if (IOS)
548548
${FIREBASE_SOURCE_DIR}/gma/src/include/firebase/gma.h
549549
${FIREBASE_SOURCE_DIR}/gma/src/include/firebase/gma/ad_view.h
550550
${FIREBASE_SOURCE_DIR}/gma/src/include/firebase/gma/interstitial_ad.h
551+
${FIREBASE_SOURCE_DIR}/gma/src/include/firebase/gma/internal/native_ad.h
551552
${FIREBASE_SOURCE_DIR}/gma/src/include/firebase/gma/rewarded_ad.h
552553
${FIREBASE_SOURCE_DIR}/gma/src/include/firebase/gma/types.h)
553554
set(installations_HDRS

gma/CMakeLists.txt

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Copyright 2021 Google
1+
# Copyright 2021 Google LLC
22
#
33
# Licensed under the Apache License, Version 2.0 (the "License");
44
# you may not use this file except in compliance with the License.
@@ -22,6 +22,8 @@ set(common_SRCS
2222
src/common/interstitial_ad.cc
2323
src/common/interstitial_ad_internal.cc
2424
src/common/full_screen_ad_event_listener.cc
25+
src/common/native_ad.cc
26+
src/common/native_ad_internal.cc
2527
src/common/rewarded_ad.cc
2628
src/common/rewarded_ad_internal.cc)
2729

@@ -42,6 +44,8 @@ set(android_SRCS
4244
src/android/gma_android.cc
4345
src/android/ad_view_internal_android.cc
4446
src/android/interstitial_ad_internal_android.cc
47+
src/android/native_ad_image_android.cc
48+
src/android/native_ad_internal_android.cc
4549
src/android/response_info_android.cc
4650
src/android/rewarded_ad_internal_android.cc)
4751

@@ -50,13 +54,16 @@ set(ios_SRCS
5054
src/ios/FADAdSize.mm
5155
src/ios/FADAdView.mm
5256
src/ios/FADInterstitialDelegate.mm
57+
src/ios/FADNativeDelegate.mm
5358
src/ios/FADRequest.mm
5459
src/ios/FADRewardedAdDelegate.mm
5560
src/ios/ad_error_ios.mm
5661
src/ios/adapter_response_info_ios.mm
5762
src/ios/gma_ios.mm
5863
src/ios/ad_view_internal_ios.mm
5964
src/ios/interstitial_ad_internal_ios.mm
65+
src/ios/native_ad_image_ios.mm
66+
src/ios/native_ad_internal_ios.mm
6067
src/ios/response_info_ios.mm
6168
src/ios/rewarded_ad_internal_ios.mm)
6269

@@ -65,6 +72,7 @@ set(stub_SRCS
6572
src/stub/ad_error_stub.cc
6673
src/stub/adapter_response_info_stub.cc
6774
src/stub/gma_stub.cc
75+
src/stub/native_ad_image_stub.cc
6876
src/stub/response_info_stub.cc)
6977

7078
if(ANDROID)

gma/integration_test/src/integration_test.cc

Lines changed: 173 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright 2021 Google Inc. All rights reserved.
1+
// Copyright 2021 Google LLC. All rights reserved.
22
//
33
// Licensed under the Apache License, Version 2.0 (the "License");
44
// you may not use this file except in compliance with the License.
@@ -66,10 +66,12 @@ const char* kGmaAppID = "ca-app-pub-3940256099942544~1458002511";
6666
const char* kBannerAdUnit = "ca-app-pub-3940256099942544/6300978111";
6767
const char* kInterstitialAdUnit = "ca-app-pub-3940256099942544/1033173712";
6868
const char* kRewardedAdUnit = "ca-app-pub-3940256099942544/5224354917";
69+
const char* kNativeAdUnit = "ca-app-pub-3940256099942544/2247696110";
6970
#else
7071
const char* kBannerAdUnit = "ca-app-pub-3940256099942544/2934735716";
7172
const char* kInterstitialAdUnit = "ca-app-pub-3940256099942544/4411468910";
7273
const char* kRewardedAdUnit = "ca-app-pub-3940256099942544/1712485313";
74+
const char* kNativeAdUnit = "ca-app-pub-3940256099942544/3986624511";
7375
#endif
7476

7577
// Used in a test to send an errant ad unit id.
@@ -870,6 +872,53 @@ TEST_F(FirebaseGmaTest, TestRewardedAdLoad) {
870872
delete rewarded;
871873
}
872874

875+
TEST_F(FirebaseGmaTest, TestNativeAdLoad) {
876+
SKIP_TEST_ON_DESKTOP;
877+
SKIP_TEST_ON_SIMULATOR;
878+
879+
firebase::gma::NativeAd* native_ad = new firebase::gma::NativeAd();
880+
881+
WaitForCompletion(native_ad->Initialize(app_framework::GetWindowContext()),
882+
"Initialize");
883+
884+
// When the NativeAd is initialized, load an ad.
885+
firebase::Future<firebase::gma::AdResult> load_ad_future =
886+
native_ad->LoadAd(kNativeAdUnit, GetAdRequest());
887+
888+
WaitForCompletion(load_ad_future, "LoadAd");
889+
const firebase::gma::AdResult* result_ptr = load_ad_future.result();
890+
ASSERT_NE(result_ptr, nullptr);
891+
EXPECT_TRUE(result_ptr->is_successful());
892+
EXPECT_FALSE(result_ptr->response_info().adapter_responses().empty());
893+
EXPECT_FALSE(
894+
result_ptr->response_info().mediation_adapter_class_name().empty());
895+
EXPECT_FALSE(result_ptr->response_info().response_id().empty());
896+
EXPECT_FALSE(result_ptr->response_info().ToString().empty());
897+
898+
// Check image assets.
899+
EXPECT_FALSE(native_ad->icon().image_uri().empty());
900+
EXPECT_GT(native_ad->icon().scale(), 0);
901+
EXPECT_FALSE(native_ad->images().empty());
902+
903+
// Native ads usually contain only one large image asset.
904+
// Check the validity of the first asset from the vector.
905+
EXPECT_FALSE(native_ad->images().at(0).image_uri().empty());
906+
EXPECT_GT(native_ad->images().at(0).scale(), 0);
907+
908+
// When the NativeAd is loaded, try loading icon image asset.
909+
firebase::Future<firebase::gma::ImageResult> load_image_future =
910+
native_ad->icon().LoadImage();
911+
WaitForCompletion(load_image_future, "LoadImage");
912+
const firebase::gma::ImageResult* img_result_ptr = load_image_future.result();
913+
ASSERT_NE(img_result_ptr, nullptr);
914+
EXPECT_TRUE(img_result_ptr->is_successful());
915+
EXPECT_GT(img_result_ptr->image().size(), 0);
916+
917+
load_image_future.Release();
918+
load_ad_future.Release();
919+
delete native_ad;
920+
}
921+
873922
// Interactive test section. These have been placed up front so that the
874923
// tester doesn't get bored waiting for them.
875924
TEST_F(FirebaseGmaUITest, TestAdViewAdOpenedAdClosed) {
@@ -1979,6 +2028,129 @@ TEST_F(FirebaseGmaTest, TestRewardedAdErrorBadExtrasClassName) {
19792028
delete rewarded;
19802029
}
19812030

2031+
// Other NativeAd Tests
2032+
2033+
TEST_F(FirebaseGmaTest, TestNativeAdLoadEmptyRequest) {
2034+
SKIP_TEST_ON_DESKTOP;
2035+
SKIP_TEST_ON_SIMULATOR;
2036+
2037+
firebase::gma::NativeAd* native_ad = new firebase::gma::NativeAd();
2038+
2039+
WaitForCompletion(native_ad->Initialize(app_framework::GetWindowContext()),
2040+
"Initialize");
2041+
2042+
// When the NativeAd is initialized, load an ad.
2043+
firebase::gma::AdRequest request;
2044+
2045+
firebase::Future<firebase::gma::AdResult> load_ad_future =
2046+
native_ad->LoadAd(kNativeAdUnit, request);
2047+
2048+
WaitForCompletion(load_ad_future, "LoadAd");
2049+
const firebase::gma::AdResult* result_ptr = load_ad_future.result();
2050+
ASSERT_NE(result_ptr, nullptr);
2051+
EXPECT_TRUE(result_ptr->is_successful());
2052+
EXPECT_FALSE(result_ptr->response_info().adapter_responses().empty());
2053+
EXPECT_FALSE(
2054+
result_ptr->response_info().mediation_adapter_class_name().empty());
2055+
EXPECT_FALSE(result_ptr->response_info().response_id().empty());
2056+
EXPECT_FALSE(result_ptr->response_info().ToString().empty());
2057+
2058+
delete native_ad;
2059+
}
2060+
2061+
TEST_F(FirebaseGmaTest, TestNativeAdErrorNotInitialized) {
2062+
SKIP_TEST_ON_DESKTOP;
2063+
2064+
firebase::gma::NativeAd* native_ad = new firebase::gma::NativeAd();
2065+
2066+
firebase::gma::AdRequest request = GetAdRequest();
2067+
WaitForCompletion(native_ad->LoadAd(kNativeAdUnit, request), "LoadAd",
2068+
firebase::gma::kAdErrorCodeUninitialized);
2069+
2070+
delete native_ad;
2071+
}
2072+
2073+
TEST_F(FirebaseGmaTest, TestNativeAdErrorAlreadyInitialized) {
2074+
SKIP_TEST_ON_DESKTOP;
2075+
2076+
{
2077+
firebase::gma::NativeAd* native_ad = new firebase::gma::NativeAd();
2078+
firebase::Future<void> first_initialize =
2079+
native_ad->Initialize(app_framework::GetWindowContext());
2080+
firebase::Future<void> second_initialize =
2081+
native_ad->Initialize(app_framework::GetWindowContext());
2082+
2083+
WaitForCompletion(first_initialize, "First Initialize 1");
2084+
WaitForCompletion(second_initialize, "Second Initialize 1",
2085+
firebase::gma::kAdErrorCodeAlreadyInitialized);
2086+
2087+
first_initialize.Release();
2088+
second_initialize.Release();
2089+
2090+
delete native_ad;
2091+
}
2092+
2093+
// Reverse the order of the completion waits.
2094+
{
2095+
firebase::gma::NativeAd* native_ad = new firebase::gma::NativeAd();
2096+
firebase::Future<void> first_initialize =
2097+
native_ad->Initialize(app_framework::GetWindowContext());
2098+
firebase::Future<void> second_initialize =
2099+
native_ad->Initialize(app_framework::GetWindowContext());
2100+
2101+
WaitForCompletion(second_initialize, "Second Initialize 1",
2102+
firebase::gma::kAdErrorCodeAlreadyInitialized);
2103+
WaitForCompletion(first_initialize, "First Initialize 1");
2104+
2105+
first_initialize.Release();
2106+
second_initialize.Release();
2107+
2108+
delete native_ad;
2109+
}
2110+
}
2111+
2112+
TEST_F(FirebaseGmaTest, TestNativeAdErrorBadAdUnitId) {
2113+
SKIP_TEST_ON_DESKTOP;
2114+
2115+
firebase::gma::NativeAd* native_ad = new firebase::gma::NativeAd();
2116+
WaitForCompletion(native_ad->Initialize(app_framework::GetWindowContext()),
2117+
"Initialize");
2118+
2119+
// Load the native ad.
2120+
firebase::gma::AdRequest request = GetAdRequest();
2121+
firebase::Future<firebase::gma::AdResult> load_ad =
2122+
native_ad->LoadAd(kBadAdUnit, request);
2123+
WaitForCompletion(load_ad, "LoadAd",
2124+
firebase::gma::kAdErrorCodeInvalidRequest);
2125+
2126+
const firebase::gma::AdResult* result_ptr = load_ad.result();
2127+
ASSERT_NE(result_ptr, nullptr);
2128+
EXPECT_FALSE(result_ptr->is_successful());
2129+
EXPECT_EQ(result_ptr->ad_error().code(),
2130+
firebase::gma::kAdErrorCodeInvalidRequest);
2131+
EXPECT_FALSE(result_ptr->ad_error().message().empty());
2132+
EXPECT_EQ(result_ptr->ad_error().domain(), kErrorDomain);
2133+
const firebase::gma::ResponseInfo response_info =
2134+
result_ptr->ad_error().response_info();
2135+
EXPECT_TRUE(response_info.adapter_responses().empty());
2136+
delete native_ad;
2137+
}
2138+
2139+
TEST_F(FirebaseGmaTest, TestNativeAdErrorBadExtrasClassName) {
2140+
SKIP_TEST_ON_DESKTOP;
2141+
2142+
firebase::gma::NativeAd* native_ad = new firebase::gma::NativeAd();
2143+
WaitForCompletion(native_ad->Initialize(app_framework::GetWindowContext()),
2144+
"Initialize");
2145+
2146+
// Load the native ad.
2147+
firebase::gma::AdRequest request = GetAdRequest();
2148+
request.add_extra(kAdNetworkExtrasInvalidClassName, "shouldnot", "work");
2149+
WaitForCompletion(native_ad->LoadAd(kNativeAdUnit, request), "LoadAd",
2150+
firebase::gma::kAdErrorCodeAdNetworkClassLoadError);
2151+
delete native_ad;
2152+
}
2153+
19822154
// Stress tests. These take a while so run them near the end.
19832155
TEST_F(FirebaseGmaTest, TestAdViewStress) {
19842156
SKIP_TEST_ON_DESKTOP;

0 commit comments

Comments
 (0)