mirror of
https://github.com/Cysharp/R3.git
synced 2026-10-27 21:58:24 +08:00
173 lines
4.5 KiB
C#
173 lines
4.5 KiB
C#
namespace R3.Tests.OperatorTests;
|
|
|
|
public class CombineLatestTest
|
|
{
|
|
[Fact]
|
|
public void CombineLatest()
|
|
{
|
|
var source1 = new Subject<int>();
|
|
var source2 = new Subject<string>();
|
|
|
|
using var list = source1.CombineLatest(source2, ValueTuple.Create).ToLiveList();
|
|
|
|
source1.OnNext(1);
|
|
|
|
list.AssertEmpty();
|
|
|
|
source1.OnNext(2);
|
|
|
|
list.AssertEmpty();
|
|
|
|
source2.OnNext("a");
|
|
|
|
list.AssertEqual([(2, "a")]);
|
|
|
|
source1.OnNext(3);
|
|
|
|
list.AssertEqual([(2, "a"), (3, "a")]);
|
|
|
|
source2.OnNext("b");
|
|
|
|
list.AssertEqual([(2, "a"), (3, "a"), (3, "b")]);
|
|
|
|
source2.OnNext("c");
|
|
|
|
list.AssertEqual([(2, "a"), (3, "a"), (3, "b"), (3, "c")]);
|
|
|
|
source1.OnCompleted();
|
|
|
|
list.AssertIsNotCompleted();
|
|
|
|
source1.OnNext(4);
|
|
source2.OnNext("d");
|
|
|
|
list.AssertEqual([(2, "a"), (3, "a"), (3, "b"), (3, "c"), (3, "d")]);
|
|
|
|
source2.OnCompleted();
|
|
|
|
list.AssertIsCompleted();
|
|
}
|
|
|
|
[Fact]
|
|
public void CombineLatestCompletedCheck()
|
|
{
|
|
{
|
|
var source1 = new Subject<int>();
|
|
var source2 = new Subject<int>();
|
|
var source3 = new Subject<int>();
|
|
using var list = Observable.CombineLatest(source1, source2, source3, ValueTuple.Create).ToLiveList();
|
|
|
|
// no value cached complete
|
|
source1.OnCompleted();
|
|
|
|
list.AssertIsCompleted();
|
|
}
|
|
{
|
|
var source1 = new Subject<int>();
|
|
var source2 = new Subject<int>();
|
|
var source3 = new Subject<int>();
|
|
using var list = Observable.CombineLatest(source1, source2, source3, ValueTuple.Create).ToLiveList();
|
|
|
|
// value cached, ok
|
|
source1.OnNext(1);
|
|
source1.OnCompleted();
|
|
|
|
list.AssertIsNotCompleted();
|
|
}
|
|
}
|
|
|
|
[Fact]
|
|
public void CombineLatestCompletedCheck2()
|
|
{
|
|
var source1 = new Subject<int>();
|
|
var source2 = new Subject<int>();
|
|
var source3 = new Subject<int>();
|
|
|
|
using var list = Observable.CombineLatest(source1, source2, source3, ValueTuple.Create).ToLiveList();
|
|
|
|
source1.OnNext(1);
|
|
source2.OnNext(10);
|
|
source3.OnNext(100);
|
|
|
|
list.AssertEqual((1, 10, 100));
|
|
|
|
source1.OnCompleted();
|
|
list.AssertIsNotCompleted();
|
|
|
|
source2.OnCompleted();
|
|
list.AssertIsNotCompleted();
|
|
|
|
source3.OnNext(200);
|
|
list.AssertEqual((1, 10, 100), (1, 10, 200));
|
|
|
|
source3.OnCompleted();
|
|
list.AssertIsCompleted(); // all completed
|
|
}
|
|
|
|
[Fact]
|
|
public void NthCombineLatestCompletedCheck()
|
|
{
|
|
{
|
|
var source1 = new Subject<int>();
|
|
var source2 = new Subject<int>();
|
|
var source3 = new Subject<int>();
|
|
using var list = Observable.CombineLatest(source1, source2, source3).ToLiveList();
|
|
|
|
// no value cached complete
|
|
source1.OnCompleted();
|
|
|
|
list.AssertIsCompleted();
|
|
}
|
|
{
|
|
var source1 = new Subject<int>();
|
|
var source2 = new Subject<int>();
|
|
var source3 = new Subject<int>();
|
|
using var list = Observable.CombineLatest(source1, source2, source3).ToLiveList();
|
|
|
|
// value cached, ok
|
|
source1.OnNext(1);
|
|
source1.OnCompleted();
|
|
|
|
list.AssertIsNotCompleted();
|
|
}
|
|
}
|
|
|
|
[Fact]
|
|
public void NthCombineLatestCompletedCheck2()
|
|
{
|
|
var source1 = new Subject<int>();
|
|
var source2 = new Subject<int>();
|
|
var source3 = new Subject<int>();
|
|
|
|
using var list = Observable.CombineLatest(source1, source2, source3).ToLiveList();
|
|
|
|
source1.OnNext(1);
|
|
source2.OnNext(10);
|
|
source3.OnNext(100);
|
|
|
|
list.AssertEqual([1, 10, 100]);
|
|
|
|
source1.OnCompleted();
|
|
list.AssertIsNotCompleted();
|
|
|
|
source2.OnCompleted();
|
|
list.AssertIsNotCompleted();
|
|
|
|
source3.OnNext(200);
|
|
list.AssertEqual([1, 10, 100], [1, 10, 200]);
|
|
|
|
source3.OnCompleted();
|
|
list.AssertIsCompleted(); // all completed
|
|
}
|
|
|
|
[Fact]
|
|
public void CombineLatestFactoryAndEmpty()
|
|
{
|
|
var empty = Enumerable.Empty<Observable<int>>();
|
|
var liveList = Observable.CombineLatest(empty).ToLiveList();
|
|
|
|
// not never, return empty
|
|
liveList.IsCompleted.ShouldBeTrue();
|
|
}
|
|
}
|