mirror of
https://github.com/Cysharp/R3.git
synced 2026-10-28 14:21:04 +08:00
104 lines
2.8 KiB
C#
104 lines
2.8 KiB
C#
namespace R3.Tests.OperatorTests;
|
|
|
|
public class DelayTest
|
|
{
|
|
[Fact]
|
|
public void Delay()
|
|
{
|
|
var provider = new FakeTimeProvider();
|
|
var subject = new Subject<int>();
|
|
|
|
var e = new List<Exception>();
|
|
|
|
var list = subject.Delay(TimeSpan.FromSeconds(3), provider).Do(onErrorResume: ex => e.Add(ex)).ToLiveList();
|
|
|
|
subject.OnNext(1);
|
|
subject.OnNext(2);
|
|
subject.OnNext(3);
|
|
subject.OnErrorResume(new Exception("a"));
|
|
subject.OnNext(4);
|
|
subject.OnNext(5);
|
|
|
|
list.AssertEqual([]);
|
|
provider.Advance(TimeSpan.FromSeconds(1));
|
|
list.AssertEqual([]);
|
|
provider.Advance(TimeSpan.FromSeconds(1));
|
|
list.AssertEqual([]);
|
|
e.ShouldBeEmpty();
|
|
provider.Advance(TimeSpan.FromSeconds(1));
|
|
|
|
list.AssertEqual([1, 2, 3, 4, 5]);
|
|
e[0].Message.ShouldBe("a");
|
|
|
|
list.Clear();
|
|
|
|
subject.OnNext(10);
|
|
provider.Advance(TimeSpan.FromSeconds(1));
|
|
subject.OnNext(20);
|
|
provider.Advance(TimeSpan.FromSeconds(1));
|
|
subject.OnNext(30);
|
|
provider.Advance(TimeSpan.FromSeconds(1));
|
|
|
|
list.AssertEqual([10]);
|
|
provider.Advance(TimeSpan.FromSeconds(1));
|
|
list.AssertEqual([10, 20]);
|
|
provider.Advance(TimeSpan.FromSeconds(1));
|
|
list.AssertEqual([10, 20, 30]);
|
|
|
|
subject.OnCompleted();
|
|
list.AssertIsNotCompleted();
|
|
provider.Advance(TimeSpan.FromSeconds(3));
|
|
list.AssertIsCompleted();
|
|
}
|
|
|
|
[Fact]
|
|
public void DelayFrame()
|
|
{
|
|
var provider = new FakeFrameProvider();
|
|
var subject = new Subject<int>();
|
|
|
|
var e = new List<Exception>();
|
|
|
|
var list = subject.DelayFrame((3), provider).Do(onErrorResume: ex => e.Add(ex)).ToLiveList();
|
|
provider.Advance(10);
|
|
|
|
subject.OnNext(1);
|
|
subject.OnNext(2);
|
|
subject.OnNext(3);
|
|
subject.OnErrorResume(new Exception("a"));
|
|
subject.OnNext(4);
|
|
subject.OnNext(5);
|
|
|
|
list.AssertEqual([]);
|
|
provider.Advance((1));
|
|
list.AssertEqual([]);
|
|
provider.Advance((1));
|
|
list.AssertEqual([]);
|
|
e.ShouldBeEmpty();
|
|
provider.Advance((1));
|
|
|
|
list.AssertEqual([1, 2, 3, 4, 5]);
|
|
e[0].Message.ShouldBe("a");
|
|
|
|
list.Clear();
|
|
|
|
subject.OnNext(10);
|
|
provider.Advance((1));
|
|
subject.OnNext(20);
|
|
provider.Advance((1));
|
|
subject.OnNext(30);
|
|
provider.Advance((1));
|
|
|
|
list.AssertEqual([10]);
|
|
provider.Advance((1));
|
|
list.AssertEqual([10, 20]);
|
|
provider.Advance((1));
|
|
list.AssertEqual([10, 20, 30]);
|
|
|
|
subject.OnCompleted();
|
|
list.AssertIsNotCompleted();
|
|
provider.Advance((3));
|
|
list.AssertIsCompleted();
|
|
}
|
|
}
|