Skip to content
This repository was archived by the owner on Jun 21, 2023. It is now read-only.

Commit bf674c1

Browse files
authored
Merge pull request #398 from github/fixes/tracking-collection-allow-adding-before-subscribe
Allow manually adding items to TrackingCollection before subscription
2 parents 2fefc54 + 05a2217 commit bf674c1

File tree

2 files changed

+26
-6
lines changed

2 files changed

+26
-6
lines changed

src/GitHub.Exports.Reactive/Collections/TrackingCollection.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -131,9 +131,9 @@ enum TheAction
131131
IConnectableObservable<Unit> cachePump;
132132
ConcurrentQueue<ActionData> cache;
133133

134-
Subject<Unit> signalHaveData;
135-
Subject<Unit> signalNeedData;
136-
Subject<ActionData> dataListener;
134+
ReplaySubject<Unit> signalHaveData;
135+
ReplaySubject<Unit> signalNeedData;
136+
ReplaySubject<ActionData> dataListener;
137137

138138
bool resetting = false;
139139

@@ -1110,11 +1110,11 @@ void Reset()
11101110
originalSourceIsCompleted = false;
11111111
signalOriginalSourceCompletion = false;
11121112
cache = new ConcurrentQueue<ActionData>();
1113-
dataListener = new Subject<ActionData>();
1113+
dataListener = new ReplaySubject<ActionData>();
11141114
disposables.Add(dataListener);
1115-
signalHaveData = new Subject<Unit>();
1115+
signalHaveData = new ReplaySubject<Unit>();
11161116
disposables.Add(signalHaveData);
1117-
signalNeedData = new Subject<Unit>();
1117+
signalNeedData = new ReplaySubject<Unit>();
11181118
disposables.Add(signalNeedData);
11191119
originalSourceCompleted = new ReplaySubject<Unit>();
11201120

src/TrackingCollectionTests/TrackingCollectionTests.cs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1957,4 +1957,24 @@ public void RemovingWithNoObservableSetThrows()
19571957
ITrackingCollection<Thing> col = new TrackingCollection<Thing>();
19581958
Assert.Throws<InvalidOperationException>(() => col.RemoveItem(new Thing()));
19591959
}
1960+
1961+
[Test]
1962+
public async void AddingBeforeSubscribingWorks()
1963+
{
1964+
ITrackingCollection<Thing> col = new TrackingCollection<Thing>(Observable.Empty<Thing>());
1965+
ReplaySubject<Thing> done = new ReplaySubject<Thing>();
1966+
col.AddItem(GetThing(1));
1967+
col.AddItem(GetThing(2));
1968+
var count = 0;
1969+
done.OnNext(null);
1970+
col.Subscribe(t =>
1971+
{
1972+
done.OnNext(t);
1973+
if (++count == 2)
1974+
done.OnCompleted();
1975+
}, () => {});
1976+
1977+
await Observable.Timeout(done, TimeSpan.FromMilliseconds(500));
1978+
Assert.AreEqual(2, col.Count);
1979+
}
19601980
}

0 commit comments

Comments
 (0)