mirror of
https://github.com/Cysharp/R3.git
synced 2026-10-28 06:07:36 +08:00
91 lines
2.4 KiB
C#
91 lines
2.4 KiB
C#
namespace R3.Tests.OperatorTests;
|
|
|
|
public class TimeoutTest
|
|
{
|
|
[Fact]
|
|
public void Timeout()
|
|
{
|
|
var timeProvider = new FakeTimeProvider();
|
|
|
|
var publisher = new Subject<int>();
|
|
var list = publisher.Timeout(TimeSpan.FromSeconds(3), timeProvider).ToLiveList();
|
|
|
|
publisher.OnNext(1);
|
|
list.AssertEqual([1]);
|
|
|
|
timeProvider.Advance(TimeSpan.FromSeconds(2));
|
|
|
|
publisher.OnNext(1000);
|
|
publisher.OnNext(10000);
|
|
list.AssertEqual([1, 1000, 10000]);
|
|
|
|
timeProvider.Advance(TimeSpan.FromSeconds(1));
|
|
list.AssertEqual([1, 1000, 10000]);
|
|
timeProvider.Advance(TimeSpan.FromSeconds(1));
|
|
list.AssertEqual([1, 1000, 10000]);
|
|
timeProvider.Advance(TimeSpan.FromSeconds(1));
|
|
list.AssertIsCompleted();
|
|
list.Result.Exception!.ShouldBeOfType<TimeoutException>();
|
|
}
|
|
|
|
[Fact]
|
|
public void TimeoutFrame()
|
|
{
|
|
var frameProvider = new FakeFrameProvider();
|
|
|
|
var publisher = new Subject<int>();
|
|
var list = publisher.TimeoutFrame(3, frameProvider).ToLiveList();
|
|
|
|
publisher.OnNext(1);
|
|
list.AssertEqual([1]);
|
|
|
|
frameProvider.Advance(2);
|
|
|
|
publisher.OnNext(1000);
|
|
publisher.OnNext(10000);
|
|
list.AssertEqual([1, 1000, 10000]);
|
|
|
|
frameProvider.Advance(1);
|
|
list.AssertEqual([1, 1000, 10000]);
|
|
frameProvider.Advance(1);
|
|
list.AssertEqual([1, 1000, 10000]);
|
|
frameProvider.Advance(1);
|
|
list.AssertIsCompleted();
|
|
list.Result.Exception!.ShouldBeOfType<TimeoutException>();
|
|
}
|
|
|
|
[Fact]
|
|
public void Timeout2()
|
|
{
|
|
var fakeTimeProvider = new FakeTimeProvider();
|
|
using var subject = new R3.Subject<int>();
|
|
|
|
var results =
|
|
subject.Timeout(TimeSpan.FromSeconds(3), fakeTimeProvider)
|
|
.Materialize()
|
|
.ToLiveList();
|
|
|
|
// Timeout
|
|
fakeTimeProvider.Advance(5);
|
|
|
|
results.ShouldBeEmpty();
|
|
}
|
|
|
|
[Fact]
|
|
public void TimeoutFrame2()
|
|
{
|
|
var fakeFrameProvider = new FakeFrameProvider();
|
|
using var subject = new R3.Subject<int>();
|
|
|
|
var results =
|
|
subject.TimeoutFrame(3, fakeFrameProvider)
|
|
.Materialize()
|
|
.ToLiveList();
|
|
|
|
// Timeout
|
|
fakeFrameProvider.Advance(5);
|
|
|
|
results.ShouldBeEmpty();
|
|
}
|
|
}
|