增加sdk
This commit is contained in:
+263
@@ -0,0 +1,263 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using NUnit.Framework;
|
||||
using UnityEngine;
|
||||
using UnityEngine.TestTools;
|
||||
using Unity.Notifications;
|
||||
|
||||
class UnifiedNotificationsSendingTests
|
||||
{
|
||||
[OneTimeSetUp]
|
||||
public void BeforeTests()
|
||||
{
|
||||
var args = NotificationCenterArgs.Default;
|
||||
args.AndroidChannelId = "Unified";
|
||||
args.AndroidChannelName = "Unified";
|
||||
args.AndroidChannelDescription = "Unified notifications";
|
||||
NotificationCenter.Initialize(args);
|
||||
NotificationCenter.OnNotificationReceived += OnNotificationReceived;
|
||||
}
|
||||
|
||||
[OneTimeTearDown]
|
||||
public void AfterAllTests()
|
||||
{
|
||||
NotificationCenter.CancelAllScheduledNotifications();
|
||||
}
|
||||
|
||||
[SetUp]
|
||||
public void BeforeEachTest()
|
||||
{
|
||||
NotificationCenter.CancelAllScheduledNotifications();
|
||||
receivedNotificationCount = 0;
|
||||
lastNotification = null;
|
||||
}
|
||||
|
||||
uint receivedNotificationCount = 0;
|
||||
Notification? lastNotification;
|
||||
void OnNotificationReceived(Notification notification)
|
||||
{
|
||||
++receivedNotificationCount;
|
||||
lastNotification = notification;
|
||||
}
|
||||
|
||||
IEnumerator WaitForNotification(float timeout)
|
||||
{
|
||||
var startCount = receivedNotificationCount;
|
||||
float timePassed = 0;
|
||||
while (receivedNotificationCount == startCount && timePassed < timeout)
|
||||
{
|
||||
yield return null;
|
||||
timePassed += Time.deltaTime;
|
||||
}
|
||||
}
|
||||
|
||||
[UnityTest]
|
||||
[UnityPlatform(new[] { RuntimePlatform.Android, RuntimePlatform.IPhonePlayer })]
|
||||
public IEnumerator SendNotificationAllOptionsRoundtrip()
|
||||
{
|
||||
var notification = new Notification()
|
||||
{
|
||||
Identifier = 15,
|
||||
Title = "Test",
|
||||
Text = "Testing",
|
||||
Data = "TestData",
|
||||
Badge = 2,
|
||||
};
|
||||
NotificationCenter.ScheduleNotification(notification, new NotificationIntervalSchedule(TimeSpan.FromSeconds(2)));
|
||||
|
||||
yield return new WaitForSeconds(0.5f); // test notification is trully delayed
|
||||
yield return WaitForNotification(60.0f);
|
||||
|
||||
Assert.AreEqual(1, receivedNotificationCount);
|
||||
Assert.IsTrue(lastNotification.HasValue);
|
||||
var n = lastNotification.Value;
|
||||
Assert.AreEqual(15, n.Identifier);
|
||||
Assert.AreEqual("Test", n.Title);
|
||||
Assert.AreEqual("Testing", n.Text);
|
||||
Assert.AreEqual("TestData", n.Data);
|
||||
Assert.AreEqual(2, n.Badge);
|
||||
}
|
||||
|
||||
[UnityTest]
|
||||
[UnityPlatform(new[] { RuntimePlatform.Android, RuntimePlatform.IPhonePlayer })]
|
||||
public IEnumerator ScheduleNotificationAtSpecificTime()
|
||||
{
|
||||
var notification = new Notification()
|
||||
{
|
||||
Title = "AtTime",
|
||||
Text = "AtSpecificTime",
|
||||
};
|
||||
NotificationCenter.ScheduleNotification(notification, new NotificationDateTimeSchedule(DateTime.Now.AddSeconds(2)));
|
||||
|
||||
yield return new WaitForSeconds(0.5f); // test notification is trully delayed
|
||||
yield return WaitForNotification(60.0f);
|
||||
|
||||
Assert.AreEqual(1, receivedNotificationCount);
|
||||
Assert.IsTrue(lastNotification.HasValue);
|
||||
var n = lastNotification.Value;
|
||||
Assert.AreEqual("AtTime", n.Title);
|
||||
Assert.AreEqual("AtSpecificTime", n.Text);
|
||||
Assert.AreNotEqual(0, n.Identifier); // ID should be auto-generated
|
||||
}
|
||||
|
||||
[UnityTest]
|
||||
[UnityPlatform(new[] { RuntimePlatform.Android, RuntimePlatform.IPhonePlayer })]
|
||||
public IEnumerator ScheduleAndCancelNotification_DoesNotArrive()
|
||||
{
|
||||
var notification = new Notification()
|
||||
{
|
||||
Title = "Cancel",
|
||||
Text = "To be cancelled",
|
||||
};
|
||||
int id = NotificationCenter.ScheduleNotification(notification, new NotificationDateTimeSchedule(DateTime.Now.AddSeconds(3)));
|
||||
|
||||
yield return new WaitForSeconds(0.5f);
|
||||
NotificationCenter.CancelScheduledNotification(id);
|
||||
yield return WaitForNotification(6.0f);
|
||||
|
||||
Assert.AreEqual(0, receivedNotificationCount);
|
||||
}
|
||||
|
||||
[UnityTest]
|
||||
[UnityPlatform(new[] { RuntimePlatform.Android })]
|
||||
public IEnumerator ScheduleNotification_WithExplicitCategory_UsesAndroidChannel()
|
||||
{
|
||||
#if UNITY_ANDROID
|
||||
const string category = "the_category";
|
||||
Unity.Notifications.Android.AndroidNotificationCenter.RegisterNotificationChannel(
|
||||
new Unity.Notifications.Android.AndroidNotificationChannel()
|
||||
{
|
||||
Id = category,
|
||||
Name = "Category",
|
||||
Description = "For category testing",
|
||||
Importance = Unity.Notifications.Android.Importance.Default,
|
||||
}
|
||||
);
|
||||
Unity.Notifications.Android.AndroidNotificationCenter.OnNotificationReceived += OnAndroidNotification;
|
||||
|
||||
yield return ScheduleNotification_WithExplicitCategory(category);
|
||||
|
||||
Unity.Notifications.Android.AndroidNotificationCenter.OnNotificationReceived -= OnAndroidNotification;
|
||||
|
||||
Assert.IsNotNull(lastAndroidNotification);
|
||||
Assert.AreEqual(category, lastAndroidNotification.Channel);
|
||||
#else
|
||||
yield break;
|
||||
#endif
|
||||
}
|
||||
|
||||
#if UNITY_ANDROID
|
||||
Unity.Notifications.Android.AndroidNotificationIntentData lastAndroidNotification;
|
||||
void OnAndroidNotification(Unity.Notifications.Android.AndroidNotificationIntentData intentData)
|
||||
{
|
||||
lastAndroidNotification = intentData;
|
||||
}
|
||||
#endif
|
||||
|
||||
[UnityTest]
|
||||
[UnityPlatform(new[] { RuntimePlatform.IPhonePlayer })]
|
||||
public IEnumerator ScheduleNotification_WithExplicitCategory_UsesiOSCategory()
|
||||
{
|
||||
#if UNITY_IOS
|
||||
const string category = "the_category";
|
||||
yield return ScheduleNotification_WithExplicitCategory(category);
|
||||
|
||||
var notification = (Unity.Notifications.iOS.iOSNotification)lastNotification.Value;
|
||||
Assert.AreEqual(category, notification.CategoryIdentifier);
|
||||
#else
|
||||
yield break;
|
||||
#endif
|
||||
}
|
||||
|
||||
public IEnumerator ScheduleNotification_WithExplicitCategory(string category)
|
||||
{
|
||||
var notification = new Notification()
|
||||
{
|
||||
Title = "With category",
|
||||
Text = "Sent to category",
|
||||
};
|
||||
NotificationCenter.ScheduleNotification(notification, category, new NotificationDateTimeSchedule(DateTime.Now.AddSeconds(3)));
|
||||
yield return WaitForNotification(60.0f);
|
||||
|
||||
Assert.AreEqual(1, receivedNotificationCount);
|
||||
Assert.IsTrue(lastNotification.HasValue);
|
||||
var n = lastNotification.Value;
|
||||
Assert.AreEqual("With category", n.Title);
|
||||
Assert.AreEqual("Sent to category", n.Text);
|
||||
}
|
||||
|
||||
[UnityTest]
|
||||
[UnityPlatform(new[] { RuntimePlatform.IPhonePlayer })]
|
||||
public IEnumerator ScheduleNotification_WithoutCategory_UsesNoiOSCategory()
|
||||
{
|
||||
var notification = new Notification()
|
||||
{
|
||||
Title = "Without category",
|
||||
Text = "Sent to no category",
|
||||
};
|
||||
NotificationCenter.ScheduleNotification(notification, new NotificationDateTimeSchedule(DateTime.Now.AddSeconds(3)));
|
||||
yield return WaitForNotification(60.0f);
|
||||
|
||||
Assert.AreEqual(1, receivedNotificationCount);
|
||||
Assert.IsTrue(lastNotification.HasValue);
|
||||
var n = lastNotification.Value;
|
||||
Assert.AreEqual("Without category", n.Title);
|
||||
Assert.AreEqual("Sent to no category", n.Text);
|
||||
|
||||
#if UNITY_IOS
|
||||
var iosNotification = (Unity.Notifications.iOS.iOSNotification)n;
|
||||
Assert.IsNull(iosNotification.CategoryIdentifier);
|
||||
#endif
|
||||
}
|
||||
|
||||
[UnityTest]
|
||||
[UnityPlatform(new[] { RuntimePlatform.Android, RuntimePlatform.IPhonePlayer })]
|
||||
public IEnumerator ScheduleWithSameID_ReplacesNotification()
|
||||
{
|
||||
var notification = new Notification()
|
||||
{
|
||||
Identifier = 123,
|
||||
Title = "Replace",
|
||||
Text = "To be replaced",
|
||||
};
|
||||
NotificationCenter.ScheduleNotification(notification, new NotificationDateTimeSchedule(DateTime.Now.AddSeconds(2)));
|
||||
yield return null;
|
||||
|
||||
notification.Text = "Replacement text";
|
||||
NotificationCenter.ScheduleNotification(notification, new NotificationDateTimeSchedule(DateTime.Now.AddSeconds(3)));
|
||||
|
||||
yield return WaitForNotification(60.0f);
|
||||
yield return new WaitForSeconds(5); // wait a bit more in case the second notification does arrive
|
||||
|
||||
Assert.AreEqual(1, receivedNotificationCount);
|
||||
Assert.IsTrue(lastNotification.HasValue);
|
||||
var n = lastNotification.Value;
|
||||
Assert.AreEqual(123, n.Identifier.Value);
|
||||
Assert.AreEqual("Replace", n.Title);
|
||||
Assert.AreEqual("Replacement text", n.Text);
|
||||
}
|
||||
|
||||
[UnityTest]
|
||||
[UnityPlatform(new[] { RuntimePlatform.Android, RuntimePlatform.IPhonePlayer })]
|
||||
public IEnumerator ScheduleWithoutIDTwice_DeliversTwo()
|
||||
{
|
||||
var notification = new Notification()
|
||||
{
|
||||
Title = "No replace",
|
||||
Text = "Not replaced",
|
||||
};
|
||||
var id1 = NotificationCenter.ScheduleNotification(notification, new NotificationDateTimeSchedule(DateTime.Now.AddSeconds(2)));
|
||||
yield return null;
|
||||
|
||||
var id2 = NotificationCenter.ScheduleNotification(notification, new NotificationDateTimeSchedule(DateTime.Now.AddSeconds(3)));
|
||||
|
||||
Assert.AreNotEqual(id1, id2);
|
||||
|
||||
yield return WaitForNotification(60.0f);
|
||||
// Both could be batched
|
||||
if (receivedNotificationCount < 2)
|
||||
yield return WaitForNotification(60.0f);
|
||||
|
||||
Assert.AreEqual(2, receivedNotificationCount);
|
||||
}
|
||||
}
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: df9756fcdfcd6480aa4dcc1daf2d78cb
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"name": "Unity.Notifications.Unified.Tests",
|
||||
"rootNamespace": "",
|
||||
"references": [
|
||||
"Unity.Notifications.Android",
|
||||
"Unity.Notifications.iOS",
|
||||
"Unity.Notifications.Unified",
|
||||
"UnityEngine.TestRunner",
|
||||
"UnityEditor.TestRunner",
|
||||
"Unity.Notifications"
|
||||
],
|
||||
"includePlatforms": [
|
||||
"Editor",
|
||||
"Android",
|
||||
"iOS"
|
||||
],
|
||||
"excludePlatforms": [],
|
||||
"allowUnsafeCode": false,
|
||||
"overrideReferences": true,
|
||||
"precompiledReferences": [
|
||||
"nunit.framework.dll"
|
||||
],
|
||||
"autoReferenced": false,
|
||||
"defineConstraints": [
|
||||
"UNITY_INCLUDE_TESTS"
|
||||
],
|
||||
"versionDefines": [],
|
||||
"noEngineReferences": false
|
||||
}
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7cc401a5f39bf44dd915187717042be7
|
||||
AssemblyDefinitionImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Reference in New Issue
Block a user