Skip to content

Commit bec9f80

Browse files
runnerrunner
authored andcommitted
Release 4.1.0
1 parent adcf7af commit bec9f80

File tree

117 files changed

+4601
-277
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

117 files changed

+4601
-277
lines changed

app/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ android {
77
applicationId "com.unity3d.ads.example"
88
minSdkVersion 19
99
targetSdkVersion 30
10-
versionCode = 4010
11-
versionName = "4.0.1"
10+
versionCode = 4100
11+
versionName = "4.1.0"
1212
}
1313

1414
buildTypes {

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ buildscript {
1313

1414
dependencies {
1515
classpath 'com.android.tools.build:gradle:4.2.1'
16-
classpath 'org.jacoco:org.jacoco.core:0.8.1'
16+
classpath 'org.jacoco:org.jacoco.core:0.8.5'
1717
classpath 'org.jfrog.buildinfo:build-info-extractor-gradle:4.20.0'
1818
classpath 'io.github.gradle-nexus:publish-plugin:1.1.0'
1919
}

unity-ads/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ if (project.rootProject.file('local.properties').exists()) {
1010
ext {
1111
GROUP_ID = "com.unity3d.ads"
1212
ARTIFACT_ID = "unity-ads"
13-
VERSION_ID = "4.0.1"
14-
VERSION_CODE = 4010
13+
VERSION_ID = "4.1.0"
14+
VERSION_CODE = 4100
1515
SIGN_AAR = properties.getProperty("SIGN_AAR") ?: false
1616
}
1717

unity-ads/jacoco.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
apply plugin: 'jacoco'
22

33
jacoco {
4-
toolVersion = '0.8.1'
4+
toolVersion = '0.8.5'
55
}
66

77
tasks.withType(Test) {

unity-ads/src/androidTest/java/com/unity3d/ads/test/InstrumentationTestSuite.java

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,22 @@
1111
import com.unity3d.ads.test.instrumentation.services.ads.webplayer.WebPlayerViewCacheTest;
1212
import com.unity3d.ads.test.instrumentation.services.ads.webplayer.WebPlayerViewSettingsCacheTest;
1313
import com.unity3d.ads.test.instrumentation.services.banners.BannerViewCacheTests;
14+
import com.unity3d.ads.test.instrumentation.services.core.configuration.ExperimentsTest;
1415
import com.unity3d.ads.test.instrumentation.services.core.configuration.InitializationNotificationCenterTest;
16+
import com.unity3d.ads.test.instrumentation.services.core.device.AsyncTokenStorageTest;
17+
import com.unity3d.ads.test.instrumentation.services.core.device.DeviceInfoReaderCompressorTest;
18+
import com.unity3d.ads.test.instrumentation.services.core.device.DeviceInfoReaderFilterProviderTest;
19+
import com.unity3d.ads.test.instrumentation.services.core.device.DeviceInfoReaderTest;
20+
import com.unity3d.ads.test.instrumentation.services.core.device.DeviceInfoReaderUrlEncoderTest;
21+
import com.unity3d.ads.test.instrumentation.services.core.device.DeviceInfoReaderWithFilterTest;
22+
import com.unity3d.ads.test.instrumentation.services.core.device.DeviceInfoReaderWithPIITest;
23+
import com.unity3d.ads.test.instrumentation.services.core.device.DeviceInfoReaderWithStorageInfoTest;
24+
import com.unity3d.ads.test.instrumentation.services.core.device.NativeTokenGeneratorTest;
25+
import com.unity3d.ads.test.instrumentation.services.core.device.pii.PiiDataSelectorTest;
26+
import com.unity3d.ads.test.instrumentation.services.core.device.pii.PiiDecisionDataTest;
27+
import com.unity3d.ads.test.instrumentation.services.core.device.pii.PiiTrackingStatusReaderTest;
28+
import com.unity3d.ads.test.instrumentation.services.core.misc.JsonFlattenerTest;
29+
import com.unity3d.ads.test.instrumentation.services.core.webview.WebViewUrlBuilderTest;
1530
import com.unity3d.ads.test.instrumentation.services.core.webview.bridge.WebViewBridgeSharedObjectTests;
1631
import com.unity3d.ads.test.instrumentation.services.core.webview.bridge.invocation.WebViewBridgeInvocationRunnableTests;
1732
import com.unity3d.ads.test.instrumentation.services.core.webview.bridge.invocation.WebViewBridgeInvocationTests;
@@ -27,6 +42,8 @@
2742
UnityAnalyticsTest.class,
2843
AcquisitionTypeTest.class,
2944
InitializationNotificationCenterTest.class,
45+
ExperimentsTest.class,
46+
WebViewUrlBuilderTest.class,
3047
WebPlayerViewSettingsCacheTest.class,
3148
WebPlayerViewCacheTest.class,
3249
BannerViewCacheTests.class,
@@ -41,7 +58,20 @@
4158
AdOperationTests.class,
4259
ShowModuleTests.class,
4360
ConfigurationTest.class,
44-
GmaScarTestSuite.class
61+
GmaScarTestSuite.class,
62+
AsyncTokenStorageTest.class,
63+
NativeTokenGeneratorTest.class,
64+
PiiTrackingStatusReaderTest.class,
65+
PiiDecisionDataTest.class,
66+
PiiDataSelectorTest.class,
67+
DeviceInfoReaderTest.class,
68+
DeviceInfoReaderCompressorTest.class,
69+
DeviceInfoReaderUrlEncoderTest.class,
70+
DeviceInfoReaderFilterProviderTest.class,
71+
DeviceInfoReaderWithStorageInfoTest.class,
72+
DeviceInfoReaderWithPIITest.class,
73+
DeviceInfoReaderWithFilterTest.class,
74+
JsonFlattenerTest.class
4575
})
4676

4777
public class InstrumentationTestSuite {}

unity-ads/src/androidTest/java/com/unity3d/ads/test/instrumentation/services/ads/operation/LoadModuleTests.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@
1414
import com.unity3d.services.ads.operation.load.LoadModule;
1515
import com.unity3d.services.ads.operation.load.LoadOperation;
1616
import com.unity3d.services.ads.operation.load.LoadOperationState;
17-
import com.unity3d.services.core.request.ISDKMetricSender;
18-
import com.unity3d.services.core.request.SDKMetricEvents;
17+
import com.unity3d.services.core.request.metrics.ISDKMetricSender;
18+
import com.unity3d.services.core.request.metrics.SDKMetricEvents;
1919
import com.unity3d.services.core.webview.bridge.IWebViewBridgeInvoker;
2020
import com.unity3d.services.core.webview.bridge.invocation.IWebViewBridgeInvocation;
2121

@@ -72,7 +72,7 @@ public Object answer(InvocationOnMock invocation) {
7272
loadModule.executeAdOperation(webViewBridgeInvokerMock, loadOperationState);
7373

7474
Mockito.verify(loadListenerMock, timeout(maxWaitTime).times(1)).onUnityAdsFailedToLoad(placementId, UnityAds.UnityAdsLoadError.INTERNAL_ERROR, "[UnityAds] Internal communication failure");
75-
Mockito.verify(sdkMetricSender, times(1)).SendSDKMetricEventWithTag(SDKMetricEvents.native_load_callback_error, new HashMap<String, String> (){{
75+
Mockito.verify(sdkMetricSender, times(1)).sendSDKMetricEventWithTag(SDKMetricEvents.native_load_callback_error, new HashMap<String, String> (){{
7676
put("cbs", "invocationFailure");
7777
}});
7878
}
@@ -91,7 +91,7 @@ public Object answer(InvocationOnMock invocation) {
9191
loadModule.executeAdOperation(webViewBridgeInvokerMock, loadOperationState);
9292

9393
Mockito.verify(loadListenerMock, timeout(maxWaitTime).times(1)).onUnityAdsFailedToLoad(placementId, UnityAds.UnityAdsLoadError.INTERNAL_ERROR, "[UnityAds] Internal communication timeout");
94-
Mockito.verify(sdkMetricSender, times(1)).SendSDKMetricEvent(eq(SDKMetricEvents.native_load_callback_timeout));
94+
Mockito.verify(sdkMetricSender, times(1)).sendSDKMetricEvent(eq(SDKMetricEvents.native_load_callback_timeout));
9595
}
9696

9797
@Test

unity-ads/src/androidTest/java/com/unity3d/ads/test/instrumentation/services/ads/operation/ShowModuleDecoratorTimeoutTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
import com.unity3d.services.ads.operation.show.ShowModule;
1818
import com.unity3d.services.ads.operation.show.ShowModuleDecoratorTimeout;
1919
import com.unity3d.services.ads.operation.show.ShowOperationState;
20-
import com.unity3d.services.core.request.ISDKMetricSender;
20+
import com.unity3d.services.core.request.metrics.ISDKMetricSender;
2121
import com.unity3d.services.core.webview.bridge.CallbackStatus;
2222
import com.unity3d.services.core.webview.bridge.IWebViewBridgeInvoker;
2323
import com.unity3d.services.core.webview.bridge.invocation.WebViewBridgeInvocationRunnable;

unity-ads/src/androidTest/java/com/unity3d/ads/test/instrumentation/services/ads/operation/ShowModuleTests.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@
1717
import com.unity3d.services.ads.operation.show.ShowModule;
1818
import com.unity3d.services.ads.operation.show.ShowOperation;
1919
import com.unity3d.services.ads.operation.show.ShowOperationState;
20-
import com.unity3d.services.core.request.ISDKMetricSender;
21-
import com.unity3d.services.core.request.SDKMetricEvents;
20+
import com.unity3d.services.core.request.metrics.ISDKMetricSender;
21+
import com.unity3d.services.core.request.metrics.SDKMetricEvents;
2222
import com.unity3d.services.core.webview.bridge.IWebViewBridgeInvoker;
2323
import com.unity3d.services.core.webview.bridge.invocation.IWebViewBridgeInvocation;
2424

@@ -75,7 +75,7 @@ public Object answer(InvocationOnMock invocation) {
7575
_showModule.executeAdOperation(_webViewBridgeInvokerMock, showOperationState);
7676

7777
Mockito.verify((_showListenerMock), timeout(maxWaitTime).times(1)).onUnityAdsShowFailure(placementId, UnityAds.UnityAdsShowError.INTERNAL_ERROR, "WebViewBridgeInvocationRunnable:run: invokeMethod failure");
78-
Mockito.verify(_sdkMetricSender, timeout(maxWaitTime).times(1)).SendSDKMetricEventWithTag(SDKMetricEvents.native_show_callback_error, new HashMap<String, String> (){{
78+
Mockito.verify(_sdkMetricSender, timeout(maxWaitTime).times(1)).sendSDKMetricEventWithTag(SDKMetricEvents.native_show_callback_error, new HashMap<String, String> (){{
7979
put("cbs", "invocationFailure");
8080
}});
8181
}
@@ -94,7 +94,7 @@ public Object answer(InvocationOnMock invocation) {
9494
_showModule.executeAdOperation(_webViewBridgeInvokerMock, showOperationState);
9595

9696
Mockito.verify((_showListenerMock), timeout(maxWaitTime).times(1)).onUnityAdsShowFailure(placementId, UnityAds.UnityAdsShowError.INTERNAL_ERROR, "[UnityAds] Show Invocation Timeout");
97-
Mockito.verify(_sdkMetricSender, timeout(maxWaitTime).times(1)).SendSDKMetricEvent(eq(SDKMetricEvents.native_show_callback_timeout));
97+
Mockito.verify(_sdkMetricSender, timeout(maxWaitTime).times(1)).sendSDKMetricEvent(eq(SDKMetricEvents.native_show_callback_timeout));
9898
}
9999

100100
@Test
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
package com.unity3d.ads.test.instrumentation.services.core.configuration;
2+
3+
import com.unity3d.services.core.configuration.Configuration;
4+
import com.unity3d.services.core.configuration.ConfigurationRequestFactory;
5+
import com.unity3d.services.core.configuration.Experiments;
6+
import com.unity3d.services.core.device.reader.IDeviceInfoReader;
7+
import com.unity3d.services.core.request.WebRequest;
8+
9+
import org.junit.Assert;
10+
import org.junit.Test;
11+
import org.junit.runner.RunWith;
12+
import org.mockito.Mock;
13+
import org.mockito.Mockito;
14+
import org.mockito.junit.MockitoJUnitRunner;
15+
16+
import java.net.MalformedURLException;
17+
import java.util.List;
18+
import java.util.Map;
19+
20+
@RunWith(MockitoJUnitRunner.class)
21+
public class ConfigurationRequestFactoryTest {
22+
23+
@Mock
24+
Experiments _experimentsMock;
25+
26+
@Mock
27+
Configuration _configurationMock;
28+
29+
@Mock
30+
IDeviceInfoReader _deviceInfoReaderMock;
31+
32+
static final String CONFIG_URL = "http://configurl/";
33+
34+
@Test
35+
public void testConfigurationRequestFactoryPost() throws MalformedURLException {
36+
Mockito.when(_experimentsMock.isTwoStageInitializationEnabled()).thenReturn(true);
37+
Mockito.when(_experimentsMock.isPOSTMethodInConfigRequestEnabled()).thenReturn(true);
38+
Mockito.when(_configurationMock.getExperiments()).thenReturn(_experimentsMock);
39+
40+
ConfigurationRequestFactory configurationRequestFactory = new ConfigurationRequestFactory(_configurationMock, _deviceInfoReaderMock, CONFIG_URL);
41+
WebRequest webRequest = configurationRequestFactory.getWebRequest();
42+
Assert.assertEquals("POST", webRequest.getRequestType());
43+
Map<String, List<String>> headers = webRequest.getHeaders();
44+
Assert.assertEquals("gzip", headers.get("Content-Encoding").get(0));
45+
}
46+
47+
@Test
48+
public void testConfigurationRequestFactoryGetIfTsiDisabled() throws MalformedURLException {
49+
Mockito.when(_experimentsMock.isTwoStageInitializationEnabled()).thenReturn(false);
50+
Mockito.when(_experimentsMock.isPOSTMethodInConfigRequestEnabled()).thenReturn(true);
51+
Mockito.when(_configurationMock.getExperiments()).thenReturn(_experimentsMock);
52+
53+
ConfigurationRequestFactory configurationRequestFactory = new ConfigurationRequestFactory(_configurationMock, _deviceInfoReaderMock, CONFIG_URL);
54+
WebRequest webRequest = configurationRequestFactory.getWebRequest();
55+
Assert.assertEquals("GET", webRequest.getRequestType());
56+
Assert.assertTrue("ts missing from query", webRequest.getQuery().contains("ts"));
57+
Assert.assertTrue("sdkVersion missing from query", webRequest.getQuery().contains("sdkVersion"));
58+
Assert.assertTrue("sdkVersionName missing from query", webRequest.getQuery().contains("sdkVersionName"));
59+
Assert.assertTrue("gameId missing from query", webRequest.getQuery().contains("gameId"));
60+
}
61+
62+
@Test
63+
public void testConfigurationRequestFactoryGetIfTsiEnabled() throws MalformedURLException {
64+
Mockito.when(_experimentsMock.isTwoStageInitializationEnabled()).thenReturn(true);
65+
Mockito.when(_experimentsMock.isPOSTMethodInConfigRequestEnabled()).thenReturn(false);
66+
Mockito.when(_configurationMock.getExperiments()).thenReturn(_experimentsMock);
67+
68+
ConfigurationRequestFactory configurationRequestFactory = new ConfigurationRequestFactory(_configurationMock, _deviceInfoReaderMock, CONFIG_URL);
69+
WebRequest webRequest = configurationRequestFactory.getWebRequest();
70+
Assert.assertEquals("GET", webRequest.getRequestType());
71+
Assert.assertEquals("c=H4sIAAAAAAAAAKuuBQBDv6ajAgAAAA%3D%3D", webRequest.getQuery());
72+
}
73+
74+
@Test
75+
public void testConfigurationRequestFactoryGetIfPostDisabled() throws MalformedURLException {
76+
Mockito.when(_experimentsMock.isTwoStageInitializationEnabled()).thenReturn(true);
77+
Mockito.when(_experimentsMock.isPOSTMethodInConfigRequestEnabled()).thenReturn(false);
78+
Mockito.when(_configurationMock.getExperiments()).thenReturn(_experimentsMock);
79+
80+
ConfigurationRequestFactory configurationRequestFactory = new ConfigurationRequestFactory(_configurationMock, _deviceInfoReaderMock, CONFIG_URL);
81+
WebRequest webRequest = configurationRequestFactory.getWebRequest();
82+
Assert.assertEquals("GET", webRequest.getRequestType());
83+
}
84+
85+
@Test
86+
public void testConfigurationRequestFactoryGetNullExperiments() throws MalformedURLException {
87+
Mockito.when(_configurationMock.getExperiments()).thenReturn(null);
88+
89+
ConfigurationRequestFactory configurationRequestFactory = new ConfigurationRequestFactory(_configurationMock, _deviceInfoReaderMock, CONFIG_URL);
90+
WebRequest webRequest = configurationRequestFactory.getWebRequest();
91+
Assert.assertEquals("GET", webRequest.getRequestType());
92+
}
93+
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package com.unity3d.ads.test.instrumentation.services.core.configuration;
2+
3+
import androidx.test.ext.junit.runners.AndroidJUnit4;
4+
5+
import com.unity3d.services.core.configuration.Experiments;
6+
7+
import org.json.JSONException;
8+
import org.json.JSONObject;
9+
import org.junit.Assert;
10+
import org.junit.Test;
11+
import org.junit.runner.RunWith;
12+
13+
@RunWith(AndroidJUnit4.class)
14+
public class ExperimentsTest {
15+
16+
@Test
17+
public void testExperimentsWithData() throws JSONException {
18+
JSONObject jsonObject = new JSONObject();
19+
jsonObject.put("fff", false);
20+
jsonObject.put("tsi", false);
21+
jsonObject.put("tsi_dc", true);
22+
jsonObject.put("tsi_epii", false);
23+
jsonObject.put("tsi_p", false);
24+
25+
Experiments experiments = new Experiments(jsonObject);
26+
Assert.assertTrue(experiments.isHandleDeveloperConsent());
27+
Assert.assertFalse(experiments.isTwoStageInitializationEnabled());
28+
}
29+
30+
@Test
31+
public void testExperimentsWithMissingData() throws JSONException {
32+
JSONObject jsonObject = new JSONObject();
33+
jsonObject.put("fff", false);
34+
35+
Experiments experiments = new Experiments(jsonObject);
36+
Assert.assertFalse(experiments.isHandleDeveloperConsent());
37+
}
38+
39+
@Test
40+
public void testExperimentsWithEmptyData() {
41+
JSONObject jsonObject = new JSONObject();
42+
43+
Experiments experiments = new Experiments(jsonObject);
44+
Assert.assertFalse(experiments.isHandleDeveloperConsent());
45+
}
46+
47+
@Test
48+
public void testExperimentsWithNullData() {
49+
Experiments experiments = new Experiments(null);
50+
Assert.assertFalse(experiments.isHandleDeveloperConsent());
51+
}
52+
53+
@Test
54+
public void testExperimentsDefault() {
55+
Experiments experiments = new Experiments();
56+
Assert.assertFalse(experiments.isHandleDeveloperConsent());
57+
}
58+
59+
}

0 commit comments

Comments
 (0)