Files
R3/tests/R3.Tests/OperatorTests/SkipUntilTest.cs
2024-01-02 02:47:22 +09:00

77 lines
1.9 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.Should().BeTrue();
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();
}
}