File tree 2 files changed +48
-3
lines changed
DynamicData/List/Internal 2 files changed +48
-3
lines changed Original file line number Diff line number Diff line change 1
1
using System ;
2
2
using System . Collections . Generic ;
3
+ using System . Diagnostics . CodeAnalysis ;
3
4
using System . Linq ;
4
-
5
+ using System . Reactive . Subjects ;
5
6
using DynamicData . Binding ;
6
7
using DynamicData . Tests . Domain ;
7
8
11
12
12
13
namespace DynamicData . Tests . List
13
14
{
15
+ public class SortChangedFixture
16
+ {
17
+ private static readonly IComparer < ListItem > DefaultComparer = SortExpressionComparer < ListItem > . Ascending ( x => x . Number ) ;
18
+
19
+
20
+ /// <summary>
21
+ /// See https://github.com/reactivemarbles/DynamicData/issues/473
22
+ /// </summary>
23
+ [ Fact ]
24
+ public void SortsWithoutError ( )
25
+ {
26
+ var source = new SourceList < ListItem > ( ) ;
27
+ var sorter = new Subject < IComparer < ListItem > > ( ) ;
28
+
29
+ source . AddRange ( Enumerable . Range ( 1 , 10 ) . Select ( i => new ListItem ( i ) ) ) ;
30
+
31
+ source . Connect ( )
32
+ . Sort ( sorter )
33
+ . Bind ( out var bound )
34
+ . Subscribe ( ) ;
35
+
36
+ bound . Select ( x => x . Number ) . Should ( ) . BeInAscendingOrder ( ) ;
37
+
38
+ sorter . OnNext ( SortExpressionComparer < ListItem > . Descending ( x => x . Number ) ) ;
39
+
40
+
41
+ bound . Select ( x => x . Number ) . Should ( ) . BeInDescendingOrder ( ) ;
42
+ }
43
+
44
+
45
+ private class ListItem : IComparable < ListItem >
46
+ {
47
+ public int Number { get ; }
48
+
49
+ public ListItem ( int number )
50
+ {
51
+ Number = number ;
52
+ }
53
+
54
+ public int CompareTo ( [ AllowNull ] ListItem other ) => DefaultComparer . Compare ( this , other ) ;
55
+
56
+ }
57
+ }
58
+
14
59
public class SortFixture : IDisposable
15
60
{
16
61
private readonly IComparer < Person > _comparer = SortExpressionComparer < Person > . Ascending ( p => p . Name ) . ThenByAscending ( p => p . Age ) ;
Original file line number Diff line number Diff line change @@ -45,7 +45,7 @@ public IObservable<IChangeSet<T>> Run()
45
45
var original = new List < T > ( ) ;
46
46
var target = new ChangeAwareList < T > ( ) ;
47
47
48
- var changed = _source . Synchronize ( locker ) . Select (
48
+ var dataChanged = _source . Synchronize ( locker ) . Select (
49
49
changes =>
50
50
{
51
51
if ( _resetThreshold > 1 )
@@ -58,7 +58,7 @@ public IObservable<IChangeSet<T>> Run()
58
58
var resort = _resort . Synchronize ( locker ) . Select ( _ => Reorder ( target ) ) ;
59
59
var changeComparer = _comparerObservable . Synchronize ( locker ) . Select ( comparer => ChangeComparer ( target , comparer ) ) ;
60
60
61
- return changed . Merge ( resort ) . Merge ( changeComparer ) . Where ( changes => changes . Count != 0 ) . SubscribeSafe ( observer ) ;
61
+ return changeComparer . Merge ( resort ) . Merge ( dataChanged ) . Where ( changes => changes . Count != 0 ) . SubscribeSafe ( observer ) ;
62
62
} ) ;
63
63
}
64
64
You can’t perform that action at this time.
0 commit comments