123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- #if UNITY_2023_1_OR_NEWER
- using System;
- using System.Threading;
- using System.Threading.Tasks;
- using NUnit.Framework;
- using UnityEngine;
- using UnityEngine.TestTools;
- namespace LitMotion.Tests.Runtime
- {
- public class AwaitableTest
- {
- [Test]
- public async Task Test_Awaitable()
- {
- var value = 0f;
- var handle = LMotion.Create(0f, 10f, 1f).Bind(x => value = x);
- await handle.ToAwaitable();
- Assert.That(value, Is.EqualTo(10f));
- }
- [Test]
- public async Task Test_Awaitable_Completed()
- {
- await default(MotionHandle).ToAwaitable();
- }
- [Test]
- public async Task Test_Awaitable_CancelAwait()
- {
- var canceled = false;
- var source = new CancellationTokenSource();
- source.CancelAfter(500);
- var handle = LMotion.Create(0f, 10f, 1f)
- .WithOnCancel(() => canceled = true)
- .RunWithoutBinding();
- try
- {
- await handle.ToAwaitable(source.Token);
- }
- catch (OperationCanceledException)
- {
- Assert.IsTrue(canceled);
- return;
- }
- Assert.Fail();
- }
- [Test]
- public async Task Test_Awaitable_WithCanceledToken()
- {
- var canceled = false;
- var source = new CancellationTokenSource();
- source.Cancel();
- var handle = LMotion.Create(0f, 10f, 1f)
- .WithOnCancel(() => canceled = true)
- .RunWithoutBinding();
- try
- {
- await handle.ToAwaitable(source.Token);
- }
- catch (OperationCanceledException)
- {
- Assert.IsTrue(canceled);
- return;
- }
- Assert.Fail();
- }
- [Test]
- public async Task Test_Awaitable_CancelWhileAwait()
- {
- var canceled = false;
- var handle = LMotion.Create(0f, 10f, 1f)
- .WithOnCancel(() => canceled = true)
- .RunWithoutBinding();
-
- _ = DelayedCall(0.2f, () => handle.Cancel());
- try
- {
- await handle.ToAwaitable();
- }
- catch (OperationCanceledException)
- {
- Assert.IsTrue(canceled);
- return;
- }
- Assert.Fail();
- }
- [Test]
- public async Task Test_CancelWhileAwait_WithCancelOnError()
- {
- LogAssert.ignoreFailingMessages = true;
- var handle = LMotion.Create(0f, 10f, 1f)
- .WithCancelOnError()
- .Bind(x =>
- {
- if (x > 5f) throw new Exception("Test");
- });
- try
- {
- await handle.ToAwaitable();
- }
- catch (OperationCanceledException)
- {
- return;
- }
- Assert.Fail();
- }
- async Awaitable DelayedCall(float delay, Action action)
- {
- await Awaitable.WaitForSecondsAsync(delay);
- action.Invoke();
- }
- }
- }
- #endif
|