From 1ec45ddfafbb8e4aa28324d65493817058f46293 Mon Sep 17 00:00:00 2001 From: Mobile Ads Developer Relations Date: Wed, 12 Aug 2026 11:36:34 -0700 Subject: [PATCH] Add unit tests for UnityBannerAd lifecycle for additional necessary coverage. PiperOrigin-RevId: 963568108 --- .../unity/ads/nextgen/UnityBannerAdTest.java | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/source/plugin/Assets/Plugins/Android/GoogleMobileAdsPlugin.androidlib/src/test/java/com/google/unity/ads/nextgen/UnityBannerAdTest.java b/source/plugin/Assets/Plugins/Android/GoogleMobileAdsPlugin.androidlib/src/test/java/com/google/unity/ads/nextgen/UnityBannerAdTest.java index 222557b46..ac334fcaa 100644 --- a/source/plugin/Assets/Plugins/Android/GoogleMobileAdsPlugin.androidlib/src/test/java/com/google/unity/ads/nextgen/UnityBannerAdTest.java +++ b/source/plugin/Assets/Plugins/Android/GoogleMobileAdsPlugin.androidlib/src/test/java/com/google/unity/ads/nextgen/UnityBannerAdTest.java @@ -544,4 +544,41 @@ public void testDestroy_nullifiesAdViewAndBannerLayout() throws Exception { assertThat(adView).isNull(); assertThat(bannerLayout).isNull(); } + + @Test + public void testLoad_afterDestroy_resetsIsDestroyedAndLoadsAd() { + unityBannerAd.destroy(); + View fakeView = simulateAdLoadSuccess(); + verify(mockCallback, timeout(1000)).onAdLoaded(); + assertThat(fakeView).isNotNull(); + } + + @Test + public void testDestroy_calledMultipleTimes_doesNotCrash() throws Exception { + unityBannerAd.destroy(); + unityBannerAd.destroy(); + ShadowLooper.idleMainLooper(); + + Field isDestroyedField = UnityBannerAd.class.getDeclaredField("isDestroyed"); + isDestroyedField.setAccessible(true); + boolean isDestroyed = (boolean) isDestroyedField.get(unityBannerAd); + + Field adViewField = UnityBannerAd.class.getDeclaredField("adView"); + adViewField.setAccessible(true); + View adView = (View) adViewField.get(unityBannerAd); + + Field bannerLayoutField = UnityBannerAd.class.getDeclaredField("bannerLayout"); + bannerLayoutField.setAccessible(true); + FrameLayout bannerLayout = (FrameLayout) bannerLayoutField.get(unityBannerAd); + + Field layoutChangeListenerField = UnityBannerAd.class.getDeclaredField("layoutChangeListener"); + layoutChangeListenerField.setAccessible(true); + View.OnLayoutChangeListener layoutChangeListener = + (View.OnLayoutChangeListener) layoutChangeListenerField.get(unityBannerAd); + + assertThat(isDestroyed).isTrue(); + assertThat(adView).isNull(); + assertThat(bannerLayout).isNull(); + assertThat(layoutChangeListener).isNull(); + } }