Skip to content

Commit 8bf9502

Browse files
Mobile Ads Developer Relationscopybara-github
authored andcommitted
Added tests to verify that calling show() on AppOpen and Interstitial ads before they are loaded does not cause a crash.
Added tests to verify the public constructors of AppOpen, Interstitial, Rewarded, and RewardedInterstitial ad wrappers do not crash. Enhanced Rewarded and RewardedInterstitial show tests to include verification of impression, click, and reward callbacks. Added a basic test for the AdWrapper mechanics. PiperOrigin-RevId: 910308333
1 parent b8b9a01 commit 8bf9502

4 files changed

Lines changed: 99 additions & 2 deletions

File tree

source/plugin/Assets/Plugins/Android/GoogleMobileAdsPlugin.androidlib/src/test/java/com/google/unity/ads/nextgen/UnityAppOpenAdTest.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,12 @@ public void testLoad_onAdFailedToLoad() {
7777
verify(mockCallback).onAppOpenAdFailedToLoad(loadAdError);
7878
}
7979

80+
@Test
81+
public void testShow_whenAdNotLoaded_doesNotThrow() {
82+
// Should log an error but not crash
83+
unityAppOpenAd.show();
84+
}
85+
8086
@Test
8187
@SuppressWarnings("EnumOrdinal")
8288
public void testShow_showsAdAndTriggersCallbacks() {
@@ -196,4 +202,11 @@ public void testConstructorWithAppOpenAd() {
196202
unityAppOpenAd = new UnityAppOpenAd(activity, mockCallback, mockAppOpenAd);
197203
assertThat(unityAppOpenAd.getResponseInfo()).isEqualTo(responseInfo);
198204
}
205+
206+
@Test
207+
public void testPublicConstructor() {
208+
// verifies creation doesn't crash
209+
UnityAppOpenAd ad = new UnityAppOpenAd(activity, mockCallback);
210+
assertThat(ad).isNotNull();
211+
}
199212
}

source/plugin/Assets/Plugins/Android/GoogleMobileAdsPlugin.androidlib/src/test/java/com/google/unity/ads/nextgen/UnityInterstitialAdTest.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,12 @@ public void testLoad_onAdFailedToLoad() {
7878
verify(mockCallback).onInterstitialAdFailedToLoad(loadAdError);
7979
}
8080

81+
@Test
82+
public void testShow_whenAdNotLoaded_doesNotThrow() {
83+
// Should log an error but not crash
84+
unityInterstitialAd.show();
85+
}
86+
8187
@Test
8288
@SuppressWarnings("EnumOrdinal")
8389
public void testShow_showsAdAndTriggersCallbacks() {
@@ -196,4 +202,11 @@ public void testConstructorWithInterstitialAd() {
196202
unityInterstitialAd = new UnityInterstitialAd(activity, mockCallback, mockInterstitialAd);
197203
assertThat(unityInterstitialAd.getResponseInfo()).isEqualTo(responseInfo);
198204
}
205+
206+
@Test
207+
public void testPublicConstructor() {
208+
// verifies creation doesn't crash
209+
UnityInterstitialAd ad = new UnityInterstitialAd(activity, mockCallback);
210+
assertThat(ad).isNotNull();
211+
}
199212
}

source/plugin/Assets/Plugins/Android/GoogleMobileAdsPlugin.androidlib/src/test/java/com/google/unity/ads/nextgen/UnityRewardedAdTest.java

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
import com.google.android.libraries.ads.mobile.sdk.common.LoadAdError;
1515
import com.google.android.libraries.ads.mobile.sdk.common.PrecisionType;
1616
import com.google.android.libraries.ads.mobile.sdk.common.ResponseInfo;
17+
import com.google.android.libraries.ads.mobile.sdk.rewarded.OnUserEarnedRewardListener;
18+
import com.google.android.libraries.ads.mobile.sdk.rewarded.RewardItem;
1719
import com.google.android.libraries.ads.mobile.sdk.rewarded.RewardedAd;
1820
import com.google.android.libraries.ads.mobile.sdk.rewarded.RewardedAdEventCallback;
1921
import java.util.ArrayList;
@@ -46,6 +48,7 @@ public final class UnityRewardedAdTest {
4648
@Captor private ArgumentCaptor<AdRequest> adRequestCaptor;
4749
@Captor private ArgumentCaptor<AdLoadCallback<RewardedAd>> adLoadCallbackCaptor;
4850
@Captor private ArgumentCaptor<RewardedAdEventCallback> adEventCallbackCaptor;
51+
@Captor private ArgumentCaptor<OnUserEarnedRewardListener> rewardListenerCaptor;
4952

5053
private UnityRewardedAd unityRewardedAd;
5154

@@ -94,7 +97,7 @@ public void testShow_whenAdLoaded_showsAdAndTriggersCallbacks() {
9497

9598
// Verify the ad is shown and the event callback is set.
9699
verify(mockRewardedAd).setAdEventCallback(adEventCallbackCaptor.capture());
97-
verify(mockRewardedAd).show(Mockito.eq(activity), Mockito.any());
100+
verify(mockRewardedAd).show(Mockito.eq(activity), rewardListenerCaptor.capture());
98101
// Verify immersive mode was set on the ad.
99102
verify(mockRewardedAd).setImmersiveMode(true);
100103

@@ -119,6 +122,27 @@ public void testShow_whenAdLoaded_showsAdAndTriggersCallbacks() {
119122
String currencyCode = "USD";
120123
eventCallback.onAdPaid(new AdValue(precisionType, valueMicros, currencyCode));
121124
verify(mockCallback).onPaidEvent(precisionType.ordinal(), valueMicros, currencyCode);
125+
126+
eventCallback.onAdImpression();
127+
verify(mockCallback).onAdImpression();
128+
129+
eventCallback.onAdClicked();
130+
verify(mockCallback).onAdClicked();
131+
OnUserEarnedRewardListener rewardListener = rewardListenerCaptor.getValue();
132+
RewardItem rewardItem =
133+
new RewardItem() {
134+
@Override
135+
public int getAmount() {
136+
return 10;
137+
}
138+
139+
@Override
140+
public String getType() {
141+
return "coins";
142+
}
143+
};
144+
rewardListener.onUserEarnedReward(rewardItem);
145+
verify(mockCallback).onUserEarnedReward("coins", 10);
122146
}
123147

124148
@Test
@@ -194,4 +218,19 @@ public void testConstructorWithRewardedAd() {
194218
unityRewardedAd = new UnityRewardedAd(activity, mockCallback, mockRewardedAd);
195219
assertThat(unityRewardedAd.getResponseInfo()).isEqualTo(responseInfo);
196220
}
221+
222+
@Test
223+
public void testPublicConstructor() {
224+
// verifies creation doesn't crash
225+
UnityRewardedAd ad = new UnityRewardedAd(activity, mockCallback);
226+
assertThat(ad).isNotNull();
227+
}
228+
229+
// Extra Test for AdWrapper, can be used for any ad type.
230+
@Test
231+
public void testAdWrapper_mechanics() {
232+
AdWrapper<String> dummyWrapper = new AdWrapper<>((request, callback) -> {});
233+
234+
dummyWrapper.load(mockAdRequest, null);
235+
}
197236
}

source/plugin/Assets/Plugins/Android/GoogleMobileAdsPlugin.androidlib/src/test/java/com/google/unity/ads/nextgen/UnityRewardedInterstitialAdTest.java

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
import com.google.android.libraries.ads.mobile.sdk.common.LoadAdError;
1515
import com.google.android.libraries.ads.mobile.sdk.common.PrecisionType;
1616
import com.google.android.libraries.ads.mobile.sdk.common.ResponseInfo;
17+
import com.google.android.libraries.ads.mobile.sdk.rewarded.OnUserEarnedRewardListener;
18+
import com.google.android.libraries.ads.mobile.sdk.rewarded.RewardItem;
1719
import com.google.android.libraries.ads.mobile.sdk.rewardedinterstitial.RewardedInterstitialAd;
1820
import com.google.android.libraries.ads.mobile.sdk.rewardedinterstitial.RewardedInterstitialAdEventCallback;
1921
import java.util.ArrayList;
@@ -45,6 +47,7 @@ public final class UnityRewardedInterstitialAdTest {
4547
@Captor private ArgumentCaptor<AdRequest> adRequestCaptor;
4648
@Captor private ArgumentCaptor<AdLoadCallback<RewardedInterstitialAd>> adLoadCallbackCaptor;
4749
@Captor private ArgumentCaptor<RewardedInterstitialAdEventCallback> adEventCallbackCaptor;
50+
@Captor private ArgumentCaptor<OnUserEarnedRewardListener> rewardListenerCaptor;
4851

4952
private UnityRewardedInterstitialAd unityRewardedInterstitialAd;
5053

@@ -94,7 +97,7 @@ public void testShow_whenAdLoaded_showsAdAndTriggersCallbacks() {
9497

9598
// Verify the ad is shown and the event callback is set.
9699
verify(mockRewardedInterstitialAd).setAdEventCallback(adEventCallbackCaptor.capture());
97-
verify(mockRewardedInterstitialAd).show(Mockito.eq(activity), Mockito.any());
100+
verify(mockRewardedInterstitialAd).show(Mockito.eq(activity), rewardListenerCaptor.capture());
98101
// Verify immersive mode was set on the ad.
99102
verify(mockRewardedInterstitialAd).setImmersiveMode(true);
100103

@@ -118,6 +121,28 @@ public void testShow_whenAdLoaded_showsAdAndTriggersCallbacks() {
118121
String currencyCode = "USD";
119122
eventCallback.onAdPaid(new AdValue(precisionType, valueMicros, currencyCode));
120123
verify(mockCallback).onPaidEvent(precisionType.ordinal(), valueMicros, currencyCode);
124+
125+
eventCallback.onAdImpression();
126+
verify(mockCallback).onAdImpression();
127+
128+
eventCallback.onAdClicked();
129+
verify(mockCallback).onAdClicked();
130+
131+
OnUserEarnedRewardListener rewardListener = rewardListenerCaptor.getValue();
132+
RewardItem rewardItem =
133+
new RewardItem() {
134+
@Override
135+
public int getAmount() {
136+
return 10;
137+
}
138+
139+
@Override
140+
public String getType() {
141+
return "coins";
142+
}
143+
};
144+
rewardListener.onUserEarnedReward(rewardItem);
145+
verify(mockCallback).onUserEarnedReward("coins", 10);
121146
}
122147

123148
@Test
@@ -184,4 +209,11 @@ public void testSetPlacementId_setsPlacementId() {
184209
// Verify that setPlacementId was called on the underlying ad.
185210
verify(mockRewardedInterstitialAd).setPlacementId(placementId);
186211
}
212+
213+
@Test
214+
public void testPublicConstructor() {
215+
// verifies creation doesn't crash
216+
UnityRewardedInterstitialAd ad = new UnityRewardedInterstitialAd(activity, mockCallback);
217+
assertThat(ad).isNotNull();
218+
}
187219
}

0 commit comments

Comments
 (0)