mirror of
https://github.com/Cysharp/R3.git
synced 2026-10-28 23:12:29 +08:00
101 lines
2.5 KiB
C#
101 lines
2.5 KiB
C#
using System.Reactive.Linq;
|
|
|
|
namespace R3.Tests.OperatorTests;
|
|
|
|
public class SkipUntilTest
|
|
{
|
|
[Fact]
|
|
public void EventOther()
|
|
{
|
|
var publisher1 = new Subject<int>();
|
|
var publisher2 = new Subject<int>();
|
|
var isDisposed = false;
|
|
var list = publisher1.SkipUntil(publisher2.Do(onDispose: () => { isDisposed = true; })).ToLiveList();
|
|
|
|
publisher1.OnNext(1);
|
|
publisher1.OnNext(2);
|
|
publisher1.OnNext(3);
|
|
list.AssertEqual([]);
|
|
|
|
publisher2.OnNext(10000);
|
|
isDisposed.ShouldBeTrue();
|
|
|
|
publisher1.OnNext(999999);
|
|
publisher1.OnNext(9999990);
|
|
|
|
list.AssertEqual([999999, 9999990]);
|
|
publisher1.OnCompleted();
|
|
list.AssertIsCompleted();
|
|
}
|
|
|
|
[Fact]
|
|
public void CancellationToken()
|
|
{
|
|
var publisher1 = new Subject<int>();
|
|
var cts = new CancellationTokenSource();
|
|
var list = publisher1.SkipUntil(cts.Token).ToLiveList();
|
|
|
|
publisher1.OnNext(1);
|
|
publisher1.OnNext(2);
|
|
publisher1.OnNext(3);
|
|
list.AssertEqual([]);
|
|
|
|
cts.Cancel();
|
|
|
|
publisher1.OnNext(999999);
|
|
publisher1.OnNext(9999990);
|
|
|
|
list.AssertEqual([999999, 9999990]);
|
|
publisher1.OnCompleted();
|
|
list.AssertIsCompleted();
|
|
}
|
|
|
|
[Fact]
|
|
public async Task TaskT()
|
|
{
|
|
var publisher1 = new Subject<int>();
|
|
var tcs = new TaskCompletionSource();
|
|
var list = publisher1.SkipUntil(tcs.Task).ToLiveList();
|
|
|
|
publisher1.OnNext(1);
|
|
publisher1.OnNext(2);
|
|
publisher1.OnNext(3);
|
|
list.AssertEqual([]);
|
|
|
|
tcs.TrySetResult();
|
|
await Task.Delay(100); // wait for completion
|
|
|
|
|
|
publisher1.OnNext(999999);
|
|
publisher1.OnNext(9999990);
|
|
|
|
list.AssertEqual([999999, 9999990]);
|
|
publisher1.OnCompleted();
|
|
list.AssertIsCompleted();
|
|
}
|
|
|
|
[Fact]
|
|
public void Async()
|
|
{
|
|
SynchronizationContext.SetSynchronizationContext(null);
|
|
|
|
var publisher1 = new Subject<int>();
|
|
var tcs = new TaskCompletionSource();
|
|
var list = publisher1.SkipUntil(async (x,ct) => await tcs.Task).ToLiveList();
|
|
|
|
publisher1.OnNext(1);
|
|
publisher1.OnNext(2);
|
|
publisher1.OnNext(3);
|
|
list.AssertEqual([]);
|
|
|
|
tcs.TrySetResult();
|
|
|
|
publisher1.OnNext(999999);
|
|
publisher1.OnNext(9999990);
|
|
|
|
list.AssertEqual([999999, 9999990]);
|
|
publisher1.OnCompleted();
|
|
list.AssertIsCompleted();
|
|
}
|
|
}
|