Skip to content

Commit 0856919

Browse files
Mobile Ads Developer Relationscopybara-github
authored andcommitted
No public description
PiperOrigin-RevId: 758708586
1 parent 03cbbca commit 0856919

File tree

1 file changed

+130
-0
lines changed

1 file changed

+130
-0
lines changed
Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
package com.google.unity.ads.nativead;
2+
3+
import static com.google.common.truth.Truth.assertThat;
4+
import static org.mockito.ArgumentMatchers.any;
5+
import static org.mockito.ArgumentMatchers.anyInt;
6+
import static org.mockito.ArgumentMatchers.anyLong;
7+
import static org.mockito.ArgumentMatchers.anyString;
8+
import static org.mockito.Mockito.doAnswer;
9+
import static org.mockito.Mockito.never;
10+
import static org.mockito.Mockito.verify;
11+
import static org.mockito.Mockito.when;
12+
13+
import android.app.Activity;
14+
import android.content.Context;
15+
import android.widget.FrameLayout;
16+
import com.google.android.gms.ads.AdRequest;
17+
import com.google.android.gms.ads.internal.client.AdRequestParcel;
18+
import com.google.android.gms.ads.internal.client.ClientSingletons;
19+
import com.google.android.gms.ads.internal.client.IAdLoader;
20+
import com.google.android.gms.ads.internal.client.IAdLoaderBuilder;
21+
import com.google.android.gms.ads.internal.client.MockClientSingletons;
22+
import com.google.android.gms.ads.internal.formats.client.INativeAdViewDelegate;
23+
import com.google.android.gms.ads.internal.formats.client.IOnUnifiedNativeAdLoadedListener;
24+
import com.google.android.gms.ads.internal.formats.client.IUnifiedNativeAd;
25+
import com.google.android.gms.ads.internal.mediation.client.IAdapterCreator;
26+
import com.google.android.gms.ads.nativead.NativeAdOptions;
27+
import com.google.common.time.Sleeper;
28+
import java.time.Duration;
29+
import org.junit.After;
30+
import org.junit.Before;
31+
import org.junit.Rule;
32+
import org.junit.Test;
33+
import org.junit.runner.RunWith;
34+
import org.mockito.Mock;
35+
import org.mockito.junit.MockitoJUnit;
36+
import org.mockito.junit.MockitoRule;
37+
import org.robolectric.Robolectric;
38+
import org.robolectric.RobolectricTestRunner;
39+
40+
/** Tests for {@link UnityNativeTemplateAd} */
41+
@RunWith(RobolectricTestRunner.class)
42+
public final class UnityNativeTemplateAdTest {
43+
44+
private static final String AD_UNIT_ID = "test-ad-unit-id";
45+
private static final String REQUEST_AGENT = "test-request-agent";
46+
private static final Duration SLEEP_DURATION = Duration.ofMillis(200);
47+
48+
@Rule public final MockitoRule mockito = MockitoJUnit.rule();
49+
@Mock private UnityNativeTemplateAdCallback mockCallback;
50+
@Mock private INativeAdViewDelegate mockNativeAdViewDelegate;
51+
@Mock private IAdLoaderBuilder mockAdLoaderBuilder;
52+
@Mock private IAdLoader mockAdLoader;
53+
@Mock private IUnifiedNativeAd mockUnifiedNativeAd;
54+
55+
private Activity activity;
56+
private UnityNativeTemplateAd unityNativeTemplateAd;
57+
58+
@Before
59+
public void setUp() throws Exception {
60+
activity = Robolectric.buildActivity(Activity.class).create().get();
61+
unityNativeTemplateAd = new UnityNativeTemplateAd(activity, mockCallback);
62+
new MockClientSingletons.Installer()
63+
.mockClientApiBroker(mockNativeAdViewDelegate)
64+
.mockFlags()
65+
.install();
66+
when(ClientSingletons.clientApiBroker()
67+
.createNativeAdViewDelegate(
68+
any(Context.class), any(FrameLayout.class), any(FrameLayout.class)))
69+
.thenReturn(mockNativeAdViewDelegate);
70+
when(ClientSingletons.clientApiBroker()
71+
.createAdLoaderBuilder(
72+
any(Context.class), any(String.class), any(IAdapterCreator.class)))
73+
.thenReturn(mockAdLoaderBuilder);
74+
when(mockAdLoaderBuilder.build()).thenReturn(mockAdLoader);
75+
}
76+
77+
@After
78+
public void tearDown() {
79+
MockClientSingletons.tearDown();
80+
unityNativeTemplateAd.destroy();
81+
}
82+
83+
@Test
84+
public void loadAd_callsOnNativeAdLoaded_whenAdLoadSucceeds() throws Exception {
85+
loadNativeTemplateAd();
86+
87+
assertThat(unityNativeTemplateAd.getResponseInfo()).isNull();
88+
89+
verify(mockAdLoader).loadAd(any(AdRequestParcel.class));
90+
verify(mockCallback).onNativeAdLoaded();
91+
verify(mockUnifiedNativeAd).setOnPaidEventListener(any());
92+
verify(mockCallback, never()).onPaidEvent(anyInt(), anyLong(), anyString());
93+
verify(mockCallback, never()).onAdShowedFullScreenContent();
94+
}
95+
96+
// TODO(jochac): As a prerequisite to showing the ad, we should call
97+
// `renderDefaultSizeAtPosition()` as this is needed to init `templateView`.
98+
@Test
99+
public void showAd_succeeds() throws Exception {
100+
loadNativeTemplateAd();
101+
unityNativeTemplateAd.show(); // just a sanity check for now to make sure it does not crash
102+
}
103+
104+
private void loadNativeTemplateAd() throws Exception {
105+
doAnswer(
106+
invocation -> {
107+
AdRequestParcel adRequestParcel = invocation.getArgument(0);
108+
assertThat(adRequestParcel.requestAgent).isEqualTo(REQUEST_AGENT);
109+
return null;
110+
})
111+
.when(mockAdLoader)
112+
.loadAd(any());
113+
114+
doAnswer(
115+
invocation -> {
116+
IOnUnifiedNativeAdLoadedListener listener = invocation.getArgument(0);
117+
listener.onUnifiedNativeAdLoaded(mockUnifiedNativeAd);
118+
return null;
119+
})
120+
.when(mockAdLoaderBuilder)
121+
.forUnifiedNativeAd(any());
122+
123+
unityNativeTemplateAd.loadAd(
124+
AD_UNIT_ID,
125+
new NativeAdOptions.Builder().build(),
126+
new AdRequest.Builder().setRequestAgent(REQUEST_AGENT).build());
127+
// Sleep to wait for background thread execution.
128+
Sleeper.defaultSleeper().sleep(SLEEP_DURATION);
129+
}
130+
}

0 commit comments

Comments
 (0)