| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 | #if UNITY_2023_1_OR_NEWERusing 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
 |