public async Task Async_CancelDuringExecution_Raise() { var sample = new Sample(); var cts = new CancellationTokenSource(); using (var unsubscribers = new UnsubscriberBag()) { sample.TestEvent.Subscribe(async(x, ct) => await RunUntilCanceled(ct)).AddTo(unsubscribers); sample.TestEvent.Subscribe(async(x, ct) => await RunUntilCanceled(ct)).AddTo(unsubscribers); sample.TestEvent.Subscribe(async(x, ct) => { await Task.Delay(10, ct); cts.Cancel(); }).AddTo(unsubscribers); sample.TestEvent.Subscribe(async(x, ct) => await RunUntilCanceled(ct)).AddTo(unsubscribers); sample.TestEvent.Subscribe(async(x, ct) => await RunUntilCanceled(ct)).AddTo(unsubscribers); Assert.Equal(5, sample.SubscibedCount); await Assert.ThrowsAsync <OperationCanceledException>(async() => { await sample.ParallelRaiseTest(cts.Token); }); } Assert.Equal(0, sample.SubscibedCount); return;
public void RaiseTest() { var sample = new Sample(); var flag = false; Assert.Equal(0, sample.SubscibedCount); using (var bag = new UnsubscriberBag()) { sample.TestEvent.Subscribe(x => flag = true).AddTo(bag); Assert.Equal(1, sample.SubscibedCount); sample.RaiseTest(); Assert.True(flag); } Assert.Equal(0, sample.SubscibedCount); }
public async Task Sync_NeverCompleted_Raise(int delegateCount) { var sample = new Sample(); using (var unsubscribers = new UnsubscriberBag()) { for (int i = 0; i < delegateCount; i++) { sample.TestEvent.Subscribe((x, ct) => UniTask.Never(ct)).AddTo(unsubscribers); } Assert.Equal(delegateCount, sample.SubscibedCount); await Assert.ThrowsAsync <OperationCanceledException>(async() => { await sample.ParallelRaiseTest(new CancellationToken(true)); }); } Assert.Equal(0, sample.SubscibedCount); }
public void MultiSubscribe(int subscribeCount) { var sample = new Sample(); var state = 0; var called = new bool[subscribeCount]; Assert.Equal(0, sample.SubscibedCount); using (var bag = new UnsubscriberBag()) { for (int i = 0; i < subscribeCount; i++) { var num = i; sample.TestEvent.Subscribe(x => { called[num] = true; Assert.Equal(num, state); state++; }).AddTo(bag); } Assert.Equal(subscribeCount, sample.SubscibedCount); sample.RaiseTest(); Assert.True(called.All(x => x)); } Assert.Equal(0, sample.SubscibedCount); }
public async Task Async_Completed_Raise(int delegateCount, bool alreadyCanceled) { var sample = new Sample(); using (var unsubscribers = new UnsubscriberBag()) { for (int i = 0; i < delegateCount; i++) { sample.TestEvent.Subscribe(async(x, ct) => await UniTask.CompletedTask).AddTo(unsubscribers); } Assert.Equal(delegateCount, sample.SubscibedCount); if (alreadyCanceled) { await Assert.ThrowsAsync <OperationCanceledException>(async() => { await sample.ParallelRaiseTest(new CancellationToken(true)); }); } else { await sample.ParallelRaiseTest(CancellationToken.None); } } Assert.Equal(0, sample.SubscibedCount); }