提交
This commit is contained in:
co-authored by
changyunjia
parent
810a087b78
commit
c28ea8ea4a
Vendored
Executable
+45
@@ -0,0 +1,45 @@
|
||||
using System;
|
||||
using NUnit.Framework;
|
||||
using Unity.Notifications.iOS;
|
||||
|
||||
namespace Unity.Notifications.Tests
|
||||
{
|
||||
public class ApiTestsiOS
|
||||
{
|
||||
[Test]
|
||||
public void TimeIntervalTrigger_MeasuredInSeconds()
|
||||
{
|
||||
var trigger = new iOSNotificationTimeIntervalTrigger();
|
||||
var interval = TimeSpan.FromMinutes(1);
|
||||
trigger.TimeInterval = interval;
|
||||
Assert.AreEqual(60, trigger.timeInterval);
|
||||
var outInterval = trigger.TimeInterval;
|
||||
Assert.AreEqual(interval, outInterval);
|
||||
|
||||
trigger.TimeInterval = new TimeSpan(0, 0, 1, 5, 50);
|
||||
// milliseconds should get discarded
|
||||
Assert.AreEqual(65, trigger.timeInterval);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TimeIntervalTrigger_RejectsLessThanSecond()
|
||||
{
|
||||
CheckTimeSpanIsRected(new TimeSpan(0, 0, 0, 0, 100));
|
||||
CheckTimeSpanIsRected(TimeSpan.FromSeconds(-3));
|
||||
}
|
||||
|
||||
void CheckTimeSpanIsRected(TimeSpan interval)
|
||||
{
|
||||
try
|
||||
{
|
||||
var trigger = new iOSNotificationTimeIntervalTrigger();
|
||||
trigger.TimeInterval = interval;
|
||||
Assert.Fail("Exception expected");
|
||||
}
|
||||
catch (ArgumentException)
|
||||
{
|
||||
// expected
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Vendored
Executable
+11
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 934f7d9817a584e38af6c229150b5480
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Vendored
Executable
+51
@@ -0,0 +1,51 @@
|
||||
using System.IO;
|
||||
using NUnit.Framework;
|
||||
using Unity.Notifications.iOS;
|
||||
|
||||
namespace Unity.Notifications.Tests
|
||||
{
|
||||
internal class NotificationSettingsTests
|
||||
{
|
||||
[OneTimeSetUp]
|
||||
public void ResetSettings()
|
||||
{
|
||||
if (File.Exists(NotificationSettingsManager.k_SettingsPath))
|
||||
{
|
||||
File.Delete(NotificationSettingsManager.k_SettingsPath);
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void SetAndroidNotifcationSettings_Works()
|
||||
{
|
||||
NotificationSettings.AndroidSettings.CustomActivityString = "com.test.dummy.activity";
|
||||
NotificationSettings.AndroidSettings.UseCustomActivity = true;
|
||||
NotificationSettings.AndroidSettings.RescheduleOnDeviceRestart = true;
|
||||
|
||||
Assert.AreEqual("com.test.dummy.activity", NotificationSettings.AndroidSettings.CustomActivityString);
|
||||
Assert.IsTrue(NotificationSettings.AndroidSettings.UseCustomActivity);
|
||||
Assert.IsTrue(NotificationSettings.AndroidSettings.RescheduleOnDeviceRestart);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void SetiOSNotifcationSettings_Works()
|
||||
{
|
||||
NotificationSettings.iOSSettings.AddRemoteNotificationCapability = true;
|
||||
NotificationSettings.iOSSettings.DefaultAuthorizationOptions = AuthorizationOption.Alert;
|
||||
NotificationSettings.iOSSettings.UseLocationNotificationTrigger = true;
|
||||
NotificationSettings.iOSSettings.UseAPSReleaseEnvironment = true;
|
||||
NotificationSettings.iOSSettings.RemoteNotificationForegroundPresentationOptions = PresentationOption.Alert;
|
||||
NotificationSettings.iOSSettings.RequestAuthorizationOnAppLaunch = true;
|
||||
NotificationSettings.iOSSettings.NotificationRequestAuthorizationForRemoteNotificationsOnAppLaunch = true;
|
||||
|
||||
Assert.IsTrue(NotificationSettings.iOSSettings.AddRemoteNotificationCapability);
|
||||
Assert.IsTrue(NotificationSettings.iOSSettings.UseLocationNotificationTrigger);
|
||||
Assert.IsTrue(NotificationSettings.iOSSettings.UseAPSReleaseEnvironment);
|
||||
Assert.IsTrue(NotificationSettings.iOSSettings.RequestAuthorizationOnAppLaunch);
|
||||
Assert.IsTrue(NotificationSettings.iOSSettings.NotificationRequestAuthorizationForRemoteNotificationsOnAppLaunch);
|
||||
|
||||
Assert.AreEqual(PresentationOption.Alert, NotificationSettings.iOSSettings.RemoteNotificationForegroundPresentationOptions);
|
||||
Assert.AreEqual(AuthorizationOption.Alert, NotificationSettings.iOSSettings.DefaultAuthorizationOptions);
|
||||
}
|
||||
}
|
||||
}
|
||||
Vendored
Executable
+11
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9c12d2439337c4d1d90aa2a02fbab9bb
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Vendored
Executable
+209
@@ -0,0 +1,209 @@
|
||||
using System.Xml;
|
||||
using NUnit.Framework;
|
||||
|
||||
namespace Unity.Notifications.Tests
|
||||
{
|
||||
internal class PostprocessorTests
|
||||
{
|
||||
[Test]
|
||||
public void DummmyTest()
|
||||
{
|
||||
Assert.AreEqual(true, true);
|
||||
}
|
||||
|
||||
const string kManifestTemplate = @"<?xml version=""1.0"" encoding=""utf-8""?>
|
||||
<manifest xmlns:android=""http://schemas.android.com/apk/res/android"" package=""com.UnityTestRunner.UnityTestRunner"" xmlns:tools=""http://schemas.android.com/tools"" android:installLocation=""preferExternal"">
|
||||
<supports-screens android:smallScreens=""true"" android:normalScreens=""true"" android:largeScreens=""true"" android:xlargeScreens=""true"" android:anyDensity=""true"" />
|
||||
<application android:theme=""@style/UnityThemeSelector"" android:icon=""@mipmap/app_icon"" android:label=""@string/app_name"" android:isGame=""true"" android:banner=""@drawable/app_banner"">
|
||||
<activity android:label=""@string/app_name"" android:screenOrientation=""fullSensor"" android:launchMode=""singleTask"" android:configChanges=""mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|fontScale|layoutDirection|density"" android:hardwareAccelerated=""false"" android:name=""com.UnityTestRunner.UnityTestRunner.UnityPlayerActivity"">
|
||||
<intent-filter>
|
||||
<action android:name=""android.intent.action.MAIN"" />
|
||||
<category android:name=""android.intent.category.LAUNCHER"" />
|
||||
<category android:name=""android.intent.category.LEANBACK_LAUNCHER"" />
|
||||
</intent-filter>
|
||||
<meta-data android:name=""unityplayer.UnityActivity"" android:value=""true"" />
|
||||
</activity>
|
||||
<meta-data android:name=""unity.build-id"" android:value=""8a616d3b-0433-49d8-bbaf-fd1415e8701e"" />
|
||||
<meta-data android:name=""unity.splash-mode"" android:value=""0"" />
|
||||
<meta-data android:name=""unity.splash-enable"" android:value=""True"" />{0}
|
||||
</application>
|
||||
<uses-feature android:glEsVersion=""0x00020000"" />
|
||||
<uses-permission android:name=""android.permission.INTERNET"" />
|
||||
<uses-permission android:name=""android.permission.WRITE_EXTERNAL_STORAGE"" android:maxSdkVersion=""18"" />
|
||||
<uses-permission android:name=""android.permission.READ_EXTERNAL_STORAGE"" android:maxSdkVersion=""18"" />{1}
|
||||
<uses-feature android:name=""android.hardware.touchscreen"" android:required=""false"" />
|
||||
<uses-feature android:name=""android.hardware.touchscreen.multitouch"" android:required=""false"" />
|
||||
<uses-feature android:name=""android.hardware.touchscreen.multitouch.distinct"" android:required=""false"" />
|
||||
</manifest>";
|
||||
const string kRescheduleOnRestartFalse = "<meta-data android:name=\"reschedule_notifications_on_restart\" android:value=\"false\" />";
|
||||
const string kRescheduleOnRestartTrue = "<meta-data android:name=\"reschedule_notifications_on_restart\" android:value=\"true\" />";
|
||||
const string kExactSchedulingOn = "<meta-data android:name=\"com.unity.androidnotifications.exact_scheduling\" android:value=\"1\" />";
|
||||
const string kExactSchedulingOff = "<meta-data android:name=\"com.unity.androidnotifications.exact_scheduling\" android:value=\"0\" />";
|
||||
const string kReceiveBookCompletedPermission = "<uses-permission android:name=\"android.permission.RECEIVE_BOOT_COMPLETED\" />";
|
||||
const string kScheduleExactAlarmPermission = "<uses-permission android:name=\"android.permission.SCHEDULE_EXACT_ALARM\" />";
|
||||
const string kUseExactAlarmPermission = "<uses-permission android:name=\"android.permission.USE_EXACT_ALARM\" />";
|
||||
const string kRequestIgnoreBatteryOptimizationsPermission = "<uses-permission-sdk-23 android:name=\"android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS\" />";
|
||||
|
||||
string GetSourceXml(string metaDataExtra, string permissionExtra)
|
||||
{
|
||||
if (metaDataExtra == null)
|
||||
metaDataExtra = "";
|
||||
if (permissionExtra == null)
|
||||
permissionExtra = "";
|
||||
return string.Format(kManifestTemplate, metaDataExtra, permissionExtra);
|
||||
}
|
||||
|
||||
#if UNITY_ANDROID
|
||||
[Test]
|
||||
public void AppendMetadataToManifest_WhenSameValue_Works()
|
||||
{
|
||||
string sourceXmlContent = GetSourceXml(kRescheduleOnRestartTrue, null);
|
||||
XmlDocument xmlDoc = new XmlDocument();
|
||||
xmlDoc.LoadXml(sourceXmlContent);
|
||||
|
||||
|
||||
AndroidNotificationPostProcessor.AppendAndroidMetadataField(null, xmlDoc, "reschedule_notifications_on_restart", "true");
|
||||
|
||||
Assert.IsTrue(xmlDoc.InnerXml.Contains(kRescheduleOnRestartTrue));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void AppendMetadataToManifest_WhenOtherValue_Works()
|
||||
{
|
||||
string sourceXmlContent = GetSourceXml(kRescheduleOnRestartFalse, null);
|
||||
XmlDocument xmlDoc = new XmlDocument();
|
||||
xmlDoc.LoadXml(sourceXmlContent);
|
||||
|
||||
|
||||
AndroidNotificationPostProcessor.AppendAndroidMetadataField(null, xmlDoc, "reschedule_notifications_on_restart", "true");
|
||||
|
||||
Assert.IsFalse(xmlDoc.InnerXml.Contains(kRescheduleOnRestartFalse));
|
||||
Assert.IsTrue(xmlDoc.InnerXml.Contains(kRescheduleOnRestartTrue));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void AppendMetadataToManifest_WhenNotPresent_Works()
|
||||
{
|
||||
string sourceXmlContent = GetSourceXml(null, null);
|
||||
XmlDocument xmlDoc = new XmlDocument();
|
||||
xmlDoc.LoadXml(sourceXmlContent);
|
||||
|
||||
|
||||
AndroidNotificationPostProcessor.AppendAndroidMetadataField(null, xmlDoc, "reschedule_notifications_on_restart", "true");
|
||||
|
||||
Assert.IsTrue(xmlDoc.InnerXml.Contains(kRescheduleOnRestartTrue));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void AppendMetadataToManifest_WhenOtherFieldPresentWorks()
|
||||
{
|
||||
string sourceXmlContent = GetSourceXml(kRescheduleOnRestartTrue, null);
|
||||
XmlDocument xmlDoc = new XmlDocument();
|
||||
xmlDoc.LoadXml(sourceXmlContent);
|
||||
|
||||
|
||||
AndroidNotificationPostProcessor.AppendAndroidMetadataField(null, xmlDoc, "do_something", "true");
|
||||
|
||||
Assert.IsTrue(xmlDoc.InnerXml.Contains(kRescheduleOnRestartTrue));
|
||||
Assert.IsTrue(xmlDoc.InnerXml.Contains("<meta-data android:name=\"do_something\" android:value=\"true\" />"));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void AppendPermissionToManifest_WhenNoPresentWorks()
|
||||
{
|
||||
string sourceXmlContent = GetSourceXml(null, null);
|
||||
XmlDocument xmlDoc = new XmlDocument();
|
||||
xmlDoc.LoadXml(sourceXmlContent);
|
||||
|
||||
|
||||
AndroidNotificationPostProcessor.AppendAndroidPermissionField(null, xmlDoc, "android.permission.RECEIVE_BOOT_COMPLETED");
|
||||
|
||||
Assert.IsTrue(xmlDoc.InnerXml.Contains(kReceiveBookCompletedPermission));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void AppendPermissionToManifest_WhenAlreadyPresentWorks()
|
||||
{
|
||||
string sourceXmlContent = GetSourceXml(null, kReceiveBookCompletedPermission);
|
||||
XmlDocument xmlDoc = new XmlDocument();
|
||||
xmlDoc.LoadXml(sourceXmlContent);
|
||||
|
||||
|
||||
AndroidNotificationPostProcessor.AppendAndroidPermissionField(null, xmlDoc, "android.permission.RECEIVE_BOOT_COMPLETED");
|
||||
|
||||
Assert.IsTrue(xmlDoc.InnerXml.Contains(kReceiveBookCompletedPermission));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void InjectAndroidManifest_AddsScheduleExactWhenEnabled()
|
||||
{
|
||||
InjectAndroidManifest_AddsPermissionWhenEnabled(AndroidExactSchedulingOption.AddScheduleExactPermission, kScheduleExactAlarmPermission);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void InjectAndroidManifest_AddsUseExactWhenEnabled()
|
||||
{
|
||||
InjectAndroidManifest_AddsPermissionWhenEnabled(AndroidExactSchedulingOption.AddUseExactAlarmPermission, kUseExactAlarmPermission);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void InjectAndroidManifest_AddsBatteryOptimizationsWhenEnabled()
|
||||
{
|
||||
InjectAndroidManifest_AddsPermissionWhenEnabled(AndroidExactSchedulingOption.AddRequestIgnoreBatteryOptimizationsPermission, kRequestIgnoreBatteryOptimizationsPermission);
|
||||
//InjectAndroidManifest_AddsPermissionWhenEnabled(AndroidExactSchedulingOption.AddRequestIgnoreBatteryOptimizationsPermission, "android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS");
|
||||
}
|
||||
|
||||
public void InjectAndroidManifest_AddsPermissionWhenEnabled(AndroidExactSchedulingOption flag, string permission)
|
||||
{
|
||||
string sourceXmlContent = GetSourceXml(null, null);
|
||||
XmlDocument xmlDoc = new XmlDocument();
|
||||
xmlDoc.LoadXml(sourceXmlContent);
|
||||
var settings = new AndroidNotificationPostProcessor.ManifestSettings()
|
||||
{
|
||||
ExactAlarm = AndroidExactSchedulingOption.ExactWhenAvailable | flag,
|
||||
};
|
||||
|
||||
AndroidNotificationPostProcessor.InjectAndroidManifest("test", xmlDoc, settings);
|
||||
|
||||
Assert.IsTrue(xmlDoc.InnerXml.Contains(kExactSchedulingOn));
|
||||
Assert.IsTrue(xmlDoc.InnerXml.Contains(permission));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void InjectAndroidManifest_DoesNotAddScheduleExactWhenExactNotEnabled()
|
||||
{
|
||||
InjectAndroidManifest_DoesNotAddPermissionWhenExactNotEnabled("android.permission.SCHEDULE_EXACT_ALARM");
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void InjectAndroidManifest_DoesNotAddUseExactWhenExactNotEnabled()
|
||||
{
|
||||
InjectAndroidManifest_DoesNotAddPermissionWhenExactNotEnabled("android.permission.USE_EXACT_ALARM");
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void InjectAndroidManifest_DoesNotAddBatteryOptimizationsWhenExactNotEnabled()
|
||||
{
|
||||
InjectAndroidManifest_DoesNotAddPermissionWhenExactNotEnabled("android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS");
|
||||
}
|
||||
|
||||
public void InjectAndroidManifest_DoesNotAddPermissionWhenExactNotEnabled(string permission)
|
||||
{
|
||||
string sourceXmlContent = GetSourceXml(null, null);
|
||||
XmlDocument xmlDoc = new XmlDocument();
|
||||
xmlDoc.LoadXml(sourceXmlContent);
|
||||
var settings = new AndroidNotificationPostProcessor.ManifestSettings()
|
||||
{
|
||||
// AndroidExactSchedulingOption.ExactWhenAvailable absent, so this one is ignored
|
||||
ExactAlarm = AndroidExactSchedulingOption.AddScheduleExactPermission,
|
||||
};
|
||||
|
||||
AndroidNotificationPostProcessor.InjectAndroidManifest("test", xmlDoc, settings);
|
||||
|
||||
Assert.IsTrue(xmlDoc.InnerXml.Contains(kExactSchedulingOff));
|
||||
Assert.IsFalse(xmlDoc.InnerXml.Contains(permission));
|
||||
}
|
||||
|
||||
#endif
|
||||
}
|
||||
}
|
||||
Vendored
Executable
+11
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ad29723af4e864cf2bce62d266ce900a
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Vendored
Executable
+21
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"name": "Unity.Notifications.Tests",
|
||||
"references": [
|
||||
"Unity.Notifications",
|
||||
"Unity.Notifications.iOS"
|
||||
],
|
||||
"optionalUnityReferences": [
|
||||
"TestAssemblies"
|
||||
],
|
||||
"includePlatforms": [
|
||||
"Editor"
|
||||
],
|
||||
"excludePlatforms": [],
|
||||
"allowUnsafeCode": false,
|
||||
"overrideReferences": true,
|
||||
"precompiledReferences": [],
|
||||
"autoReferenced": false,
|
||||
"defineConstraints": [
|
||||
"UNITY_INCLUDE_TESTS"
|
||||
]
|
||||
}
|
||||
Vendored
Executable
+7
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c29b1cefd8e67404885a0dafaded033c
|
||||
AssemblyDefinitionImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Reference in New Issue
Block a user