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

Commit f6af40a

Browse files
authored
Merge branch 'master' into feature/submodule-changes-progress-on-statusbar
2 parents 49b6610 + c7576a7 commit f6af40a

File tree

14 files changed

+78
-45
lines changed

14 files changed

+78
-45
lines changed

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

Lines changed: 25 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,8 @@ enum TheAction
174174
Add,
175175
Insert,
176176
Remove,
177-
Ignore
177+
Ignore,
178+
End
178179
}
179180

180181
bool isChanging;
@@ -211,7 +212,7 @@ enum TheAction
211212
readonly Dictionary<T, int> filteredIndexCache = new Dictionary<T, int>();
212213

213214
bool originalSourceIsCompleted;
214-
bool signalOriginalSourceCompletion;
215+
bool sourceHasData;
215216
ReplaySubject<Unit> originalSourceCompleted;
216217
public IObservable<Unit> OriginalCompleted => originalSourceCompleted;
217218

@@ -287,6 +288,7 @@ public IObservable<T> Listen(IObservable<T> obs)
287288
})
288289
.Do(data =>
289290
{
291+
sourceHasData = true;
290292
cache.Enqueue(new ActionData(data));
291293
signalHaveData.OnNext(Unit.Default);
292294
})
@@ -296,16 +298,15 @@ public IObservable<T> Listen(IObservable<T> obs)
296298
return;
297299

298300
originalSourceIsCompleted = true;
299-
if (!cache.IsEmpty)
301+
if (!sourceHasData)
300302
{
301-
signalOriginalSourceCompletion = true;
303+
originalSourceCompleted.OnNext(Unit.Default);
304+
originalSourceCompleted.OnCompleted();
302305
}
303306
else
304307
{
305-
originalSourceCompleted.OnNext(Unit.Default);
306-
originalSourceCompleted.OnCompleted();
307-
signalNeedData.OnCompleted();
308-
signalHaveData.OnCompleted();
308+
cache.Enqueue(new ActionData(TheAction.End, null));
309+
signalHaveData.OnNext(Unit.Default);
309310
}
310311
})
311312
.Publish();
@@ -321,16 +322,23 @@ public IObservable<T> Listen(IObservable<T> obs)
321322
{
322323
var delay = CalculateProcessingDelay(interval);
323324
waitHandle.Wait(delay);
324-
dataListener.OnNext(GetFromQueue());
325+
var data = GetFromQueue();
326+
if (!data.Equals(ActionData.Default))
327+
{
328+
dataListener.OnNext(data);
329+
}
325330
return Unit.Default;
326331
})
327332
.Publish();
328333

329334
source = dataListener
330-
.Where(data => data.Item != null)
335+
.Where(data => data.Item != null || data.TheAction == TheAction.End)
331336
.ObserveOn(scheduler)
332337
.Select(data =>
333338
{
339+
if (data.TheAction == TheAction.End)
340+
return data;
341+
334342
data = ProcessItem(data, original);
335343

336344
// if we're removing an item that doesn't exist, ignore it
@@ -351,18 +359,15 @@ public IObservable<T> Listen(IObservable<T> obs)
351359
data = FilteredRemove(data);
352360
return data;
353361
})
354-
.Do(_ =>
362+
.Do(data =>
355363
{
356-
if (ManualProcessing)
364+
if (data.TheAction == TheAction.End)
357365
{
358-
if (signalOriginalSourceCompletion)
359-
{
360-
signalOriginalSourceCompletion = false;
361-
originalSourceCompleted.OnNext(Unit.Default);
362-
originalSourceCompleted.OnCompleted();
363-
}
366+
originalSourceCompleted.OnNext(Unit.Default);
367+
originalSourceCompleted.OnCompleted();
364368
}
365-
else
369+
370+
if (!ManualProcessing)
366371
signalNeedData.OnNext(Unit.Default);
367372
})
368373
.Where(data => data.Item != null)
@@ -1174,7 +1179,7 @@ void Reset()
11741179
pumpDisposables.Clear();
11751180
disposables.Clear();
11761181
originalSourceIsCompleted = false;
1177-
signalOriginalSourceCompletion = false;
1182+
sourceHasData = false;
11781183
cache = new ConcurrentQueue<ActionData>();
11791184
dataListener = new ReplaySubject<ActionData>();
11801185
disposables.Add(dataListener);

test/GitHub.InlineReviews.UnitTests/Properties/AssemblyInfo.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System.Reflection;
22
using System.Runtime.CompilerServices;
33
using System.Runtime.InteropServices;
4+
using NUnit.Framework;
45

56
// General Information about an assembly is controlled through the following
67
// set of attributes. Change these attribute values to modify the information
@@ -34,3 +35,5 @@
3435
// [assembly: AssemblyVersion("1.0.*")]
3536
[assembly: AssemblyVersion("1.0.0.0")]
3637
[assembly: AssemblyFileVersion("1.0.0.0")]
38+
39+
[assembly: Timeout(2 /*minutes*/ * 60 * 1000)]

test/GitHub.InlineReviews.UnitTests/packages.config

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
<package id="Microsoft.Win32.Primitives" version="4.0.1" targetFramework="net461" />
1111
<package id="NSubstitute" version="2.0.3" targetFramework="net461" />
1212
<package id="NUnit" version="3.9.0" targetFramework="net461" />
13+
<package id="NUnit.ConsoleRunner" version="3.7.0" targetFramework="net461" />
1314
<package id="NUnit3TestAdapter" version="3.9.0" targetFramework="net461" />
1415
<package id="Rx-Core" version="2.2.5-custom" targetFramework="net461" />
1516
<package id="Rx-Interfaces" version="2.2.5-custom" targetFramework="net461" />

test/GitHub.UI.UnitTests/GitHub.UI.UnitTests.csproj

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,8 @@
3838
<HintPath>..\..\packages\NSubstitute.2.0.3\lib\net45\NSubstitute.dll</HintPath>
3939
<Private>True</Private>
4040
</Reference>
41-
<Reference Include="nunit.framework, Version=3.6.1.0, Culture=neutral, PublicKeyToken=2638cd05610744eb, processorArchitecture=MSIL">
42-
<HintPath>..\..\packages\NUnit.3.6.1\lib\net45\nunit.framework.dll</HintPath>
43-
<Private>True</Private>
41+
<Reference Include="nunit.framework, Version=3.9.0.0, Culture=neutral, PublicKeyToken=2638cd05610744eb, processorArchitecture=MSIL">
42+
<HintPath>..\..\packages\NUnit.3.9.0\lib\net45\nunit.framework.dll</HintPath>
4443
</Reference>
4544
<Reference Include="PresentationCore" />
4645
<Reference Include="PresentationFramework" />

test/GitHub.UI.UnitTests/Properties/AssemblyInfo.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System.Reflection;
22
using System.Runtime.CompilerServices;
33
using System.Runtime.InteropServices;
4+
using NUnit.Framework;
45

56
// General Information about an assembly is controlled through the following
67
// set of attributes. Change these attribute values to modify the information
@@ -34,3 +35,5 @@
3435
// [assembly: AssemblyVersion("1.0.*")]
3536
[assembly: AssemblyVersion("1.0.0.0")]
3637
[assembly: AssemblyFileVersion("1.0.0.0")]
38+
39+
[assembly: Timeout(2 /*minutes*/ * 60 * 1000)]

test/GitHub.UI.UnitTests/packages.config

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<packages>
33
<package id="NSubstitute" version="2.0.3" targetFramework="net461" />
4-
<package id="NUnit" version="3.6.1" targetFramework="net461" />
4+
<package id="NUnit" version="3.9.0" targetFramework="net461" />
55
<package id="NUnit.ConsoleRunner" version="3.7.0" targetFramework="net461" />
66
<package id="NUnit3TestAdapter" version="3.9.0" targetFramework="net461" />
77
<package id="Serilog" version="2.5.0" targetFramework="net461" />

test/TrackingCollectionTests/ListenerCollectionTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
public class ListenerCollectionTests : TestBase
1010
{
1111
#if !DISABLE_REACTIVE_UI
12-
[TestFixtureSetUp]
12+
[OneTimeSetUp]
1313
public void Setup()
1414
{
1515
Splat.ModeDetector.Current.SetInUnitTestRunner(true);

test/TrackingCollectionTests/Properties/AssemblyInfo.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System.Reflection;
22
using System.Runtime.CompilerServices;
33
using System.Runtime.InteropServices;
4+
using NUnit.Framework;
45

56
// General Information about an assembly is controlled through the following
67
// set of attributes. Change these attribute values to modify the information
@@ -34,3 +35,5 @@
3435
// [assembly: AssemblyVersion("1.0.*")]
3536
[assembly: AssemblyVersion("1.0.0.0")]
3637
[assembly: AssemblyFileVersion("1.0.0.0")]
38+
39+
[assembly: Timeout(2 /*minutes*/ *60*1000)]

test/TrackingCollectionTests/TrackingCollectionTests.cs

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,10 @@
1818
[TestFixture]
1919
public class TrackingTests : TestBase
2020
{
21+
const int Timeout = 2000;
22+
2123
#if !DISABLE_REACTIVE_UI
22-
[TestFixtureSetUp]
24+
[OneTimeSetUp]
2325
public void Setup()
2426
{
2527
Splat.ModeDetector.Current.SetInUnitTestRunner(true);
@@ -1907,7 +1909,7 @@ public async Task MultipleSortingAndFiltering()
19071909
col.NewerComparer = OrderedComparer<Thing>.OrderByDescending(x => x.UpdatedAt).Compare;
19081910
col.Subscribe();
19091911

1910-
await col.OriginalCompleted;
1912+
await col.OriginalCompleted.Timeout(TimeSpan.FromMilliseconds(Timeout));
19111913

19121914
// it's initially sorted by date, so id list should not match
19131915
CollectionAssert.AreNotEqual(list1.Select(x => x.Number).ToEnumerable(), list2.Select(x => x.Number).ToEnumerable());
@@ -1944,7 +1946,7 @@ public async Task MultipleSortingAndFiltering()
19441946
}
19451947

19461948
[Test]
1947-
public void ListeningTwiceWorks()
1949+
public async Task ListeningTwiceWorks()
19481950
{
19491951
var count = 10;
19501952
ITrackingCollection<Thing> col = new TrackingCollection<Thing>();
@@ -1954,13 +1956,15 @@ public void ListeningTwiceWorks()
19541956
var list1 = new List<Thing>(Enumerable.Range(1, count).Select(i => GetThing(i, i, count - i, "Run 1")).ToList());
19551957
var list2 = new List<Thing>(Enumerable.Range(1, count).Select(i => GetThing(i, i, i + count, "Run 2")).ToList());
19561958

1959+
#pragma warning disable 4014
19571960
col.Listen(list1.ToObservable());
19581961
col.Subscribe();
1959-
col.OriginalCompleted.Wait();
1962+
await col.OriginalCompleted.Timeout(TimeSpan.FromMilliseconds(Timeout));
19601963

19611964
col.Listen(list2.ToObservable());
19621965
col.Subscribe();
1963-
col.OriginalCompleted.Wait();
1966+
await col.OriginalCompleted.Timeout(TimeSpan.FromMilliseconds(Timeout));
1967+
#pragma warning restore 4014
19641968

19651969
CollectionAssert.AreEqual(list2, col);
19661970
}
@@ -1980,7 +1984,7 @@ public void RemovingWithNoObservableSetThrows()
19801984
}
19811985

19821986
[Test]
1983-
public async void AddingBeforeSubscribingWorks()
1987+
public async Task AddingBeforeSubscribingWorks()
19841988
{
19851989
ITrackingCollection<Thing> col = new TrackingCollection<Thing>(Observable.Empty<Thing>());
19861990
ReplaySubject<Thing> done = new ReplaySubject<Thing>();
@@ -1995,7 +1999,7 @@ public async void AddingBeforeSubscribingWorks()
19951999
done.OnCompleted();
19962000
}, () => {});
19972001

1998-
await Observable.Timeout(done, TimeSpan.FromMilliseconds(500));
2002+
await done.Timeout(TimeSpan.FromMilliseconds(500));
19992003
Assert.AreEqual(2, col.Count);
20002004
}
20012005

test/TrackingCollectionTests/TrackingCollectionTests.csproj

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,8 @@
4343
<StartupObject />
4444
</PropertyGroup>
4545
<ItemGroup>
46-
<Reference Include="nunit.framework, Version=2.6.4.14350, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL">
47-
<HintPath>..\..\packages\NUnit.2.6.4\lib\nunit.framework.dll</HintPath>
48-
<Private>True</Private>
46+
<Reference Include="nunit.framework, Version=3.9.0.0, Culture=neutral, PublicKeyToken=2638cd05610744eb, processorArchitecture=MSIL">
47+
<HintPath>..\..\packages\NUnit.3.9.0\lib\net45\nunit.framework.dll</HintPath>
4948
</Reference>
5049
<Reference Include="System" />
5150
<Reference Include="System.Reactive.Core, Version=2.2.5.0, Culture=neutral, PublicKeyToken=62aa029873c516b4, processorArchitecture=MSIL">

0 commit comments

Comments
 (0)