Added a test case for https://github.com/Cysharp/UniTask/issues/444
parent
73d86259ce
commit
663fa737f3
|
@ -0,0 +1,63 @@
|
|||
using Cysharp.Threading.Tasks;
|
||||
using FluentAssertions;
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Threading;
|
||||
using UnityEngine.TestTools;
|
||||
|
||||
namespace Cysharp.Threading.TasksTests
|
||||
{
|
||||
public class AsyncReactivePropertyTest
|
||||
{
|
||||
private int _callCounter;
|
||||
|
||||
[UnityTest]
|
||||
public IEnumerator WaitCancelWait() => UniTask.ToCoroutine(async () =>
|
||||
{
|
||||
// Test case for https://github.com/Cysharp/UniTask/issues/444
|
||||
|
||||
var property = new AsyncReactiveProperty<int>(0);
|
||||
|
||||
var cts1 = new CancellationTokenSource();
|
||||
var cts2 = new CancellationTokenSource();
|
||||
WaitForProperty(property, cts1.Token);
|
||||
WaitForProperty(property, cts2.Token);
|
||||
|
||||
_callCounter = 0;
|
||||
property.Value = 1;
|
||||
_callCounter.Should().Be(2);
|
||||
|
||||
cts2.Cancel();
|
||||
cts2.Dispose();
|
||||
cts1.Cancel();
|
||||
cts1.Dispose();
|
||||
|
||||
var cts3 = new CancellationTokenSource();
|
||||
WaitForProperty(property, cts3.Token);
|
||||
|
||||
_callCounter = 0;
|
||||
property.Value = 2;
|
||||
_callCounter.Should().Be(1);
|
||||
|
||||
cts3.Cancel();
|
||||
cts3.Dispose();
|
||||
await UniTask.CompletedTask;
|
||||
});
|
||||
|
||||
private async void WaitForProperty(AsyncReactiveProperty<int> property, CancellationToken token)
|
||||
{
|
||||
while (true)
|
||||
{
|
||||
try
|
||||
{
|
||||
await property.WaitAsync(token);
|
||||
_callCounter++;
|
||||
}
|
||||
catch (OperationCanceledException)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 27665955eefb4448969b8cc4dd204600
|
||||
timeCreated: 1676129650
|
Loading…
Reference in New Issue