@@ -333,7 +333,7 @@ public void FilterTitleRun2()
333
333
var total = 1000 ;
334
334
335
335
var list1 = new List < Thing > ( Enumerable . Range ( 1 , total ) . Select ( i => GetThing ( i , i , i , "Run 1" ) ) . ToList ( ) ) ;
336
- var list2 = new List < Thing > ( Enumerable . Range ( 1 , total ) . Select ( i => GetThing ( i , i , i , "Run 2" ) ) . ToList ( ) ) ;
336
+ var list2 = new List < Thing > ( Enumerable . Range ( 1 , total ) . Select ( i => GetThing ( i , i , i + 1 , "Run 2" ) ) . ToList ( ) ) ;
337
337
338
338
ITrackingCollection < Thing > col = new TrackingCollection < Thing > (
339
339
list1 . ToObservable ( ) ,
@@ -429,8 +429,8 @@ public void OrderByMatchesOriginalOrder()
429
429
var count = 0 ;
430
430
var total = 1000 ;
431
431
432
- var list1 = new List < Thing > ( Enumerable . Range ( 1 , total ) . Select ( i => GetThing ( i , i , total - i , "Run 1" ) ) . ToList ( ) ) ;
433
- var list2 = new List < Thing > ( Enumerable . Range ( 1 , total ) . Select ( i => GetThing ( i , i , total - i , "Run 2" ) ) . ToList ( ) ) ;
432
+ var list1 = new List < Thing > ( Enumerable . Range ( 1 , total ) . Select ( i => GetThing ( i , i , i , "Run 1" ) ) . Reverse ( ) . ToList ( ) ) ;
433
+ var list2 = new List < Thing > ( Enumerable . Range ( 1 , total ) . Select ( i => GetThing ( i , i , i + 1 , "Run 2" ) ) . Reverse ( ) . ToList ( ) ) ;
434
434
435
435
ITrackingCollection < Thing > col = new TrackingCollection < Thing > (
436
436
list1 . ToObservable ( ) ,
@@ -2014,4 +2014,126 @@ public async void AddingBeforeSubscribingWorks()
2014
2014
await Observable . Timeout ( done , TimeSpan . FromMilliseconds ( 500 ) ) ;
2015
2015
Assert . AreEqual ( 2 , col . Count ) ;
2016
2016
}
2017
+
2018
+ [ Test ]
2019
+ public void DoesNotUpdateThingIfTimeIsOlder ( )
2020
+ {
2021
+ ITrackingCollection < Thing > col = new TrackingCollection < Thing > (
2022
+ Observable . Never < Thing > ( ) ,
2023
+ OrderedComparer < Thing > . OrderBy ( x => x . UpdatedAt ) . Compare ) ;
2024
+ col . NewerComparer = OrderedComparer < Thing > . OrderByDescending ( x => x . UpdatedAt ) . Compare ;
2025
+ col . ProcessingDelay = TimeSpan . Zero ;
2026
+
2027
+ var evt = new ManualResetEvent ( false ) ;
2028
+ col . Subscribe ( t =>
2029
+ {
2030
+ evt . Set ( ) ;
2031
+ } , ( ) => { } ) ;
2032
+
2033
+ var createdAndUpdatedTime = DateTimeOffset . Now ;
2034
+ var olderUpdateTime = createdAndUpdatedTime . Subtract ( TimeSpan . FromMinutes ( 1 ) ) ;
2035
+
2036
+ const string originalTitle = "Original Thing" ;
2037
+
2038
+ var originalThing = new Thing ( 1 , originalTitle , createdAndUpdatedTime , createdAndUpdatedTime ) ;
2039
+ col . AddItem ( originalThing ) ;
2040
+
2041
+ evt . WaitOne ( ) ;
2042
+ evt . Reset ( ) ;
2043
+
2044
+ Assert . AreEqual ( originalTitle , col [ 0 ] . Title ) ;
2045
+
2046
+ const string updatedTitle = "Updated Thing" ;
2047
+
2048
+ var updatedThing = new Thing ( 1 , updatedTitle , createdAndUpdatedTime , olderUpdateTime ) ;
2049
+ col . AddItem ( updatedThing ) ;
2050
+
2051
+ evt . WaitOne ( ) ;
2052
+ evt . Reset ( ) ;
2053
+
2054
+ Assert . AreEqual ( originalTitle , col [ 0 ] . Title ) ;
2055
+
2056
+ col . Dispose ( ) ;
2057
+ }
2058
+
2059
+ [ Test ]
2060
+ public void DoesNotUpdateThingIfTimeIsEqual ( )
2061
+ {
2062
+ ITrackingCollection < Thing > col = new TrackingCollection < Thing > (
2063
+ Observable . Never < Thing > ( ) ,
2064
+ OrderedComparer < Thing > . OrderBy ( x => x . UpdatedAt ) . Compare ) ;
2065
+ col . NewerComparer = OrderedComparer < Thing > . OrderByDescending ( x => x . UpdatedAt ) . Compare ;
2066
+ col . ProcessingDelay = TimeSpan . Zero ;
2067
+
2068
+ var evt = new ManualResetEvent ( false ) ;
2069
+ col . Subscribe ( t =>
2070
+ {
2071
+ evt . Set ( ) ;
2072
+ } , ( ) => { } ) ;
2073
+
2074
+ var createdAndUpdatedTime = DateTimeOffset . Now ;
2075
+
2076
+ const string originalTitle = "Original Thing" ;
2077
+
2078
+ var originalThing = new Thing ( 1 , originalTitle , createdAndUpdatedTime , createdAndUpdatedTime ) ;
2079
+ col . AddItem ( originalThing ) ;
2080
+
2081
+ evt . WaitOne ( ) ;
2082
+ evt . Reset ( ) ;
2083
+
2084
+ Assert . AreEqual ( originalTitle , col [ 0 ] . Title ) ;
2085
+
2086
+ const string updatedTitle = "Updated Thing" ;
2087
+
2088
+ var updatedThing = new Thing ( 1 , updatedTitle , createdAndUpdatedTime , createdAndUpdatedTime ) ;
2089
+ col . AddItem ( updatedThing ) ;
2090
+
2091
+ evt . WaitOne ( ) ;
2092
+ evt . Reset ( ) ;
2093
+
2094
+ Assert . AreEqual ( originalTitle , col [ 0 ] . Title ) ;
2095
+
2096
+ col . Dispose ( ) ;
2097
+ }
2098
+
2099
+ [ Test ]
2100
+ public void DoesUpdateThingIfTimeIsNewer ( )
2101
+ {
2102
+ ITrackingCollection < Thing > col = new TrackingCollection < Thing > (
2103
+ Observable . Never < Thing > ( ) ,
2104
+ OrderedComparer < Thing > . OrderBy ( x => x . UpdatedAt ) . Compare ) ;
2105
+ col . NewerComparer = OrderedComparer < Thing > . OrderByDescending ( x => x . UpdatedAt ) . Compare ;
2106
+ col . ProcessingDelay = TimeSpan . Zero ;
2107
+
2108
+ var evt = new ManualResetEvent ( false ) ;
2109
+ col . Subscribe ( t =>
2110
+ {
2111
+ evt . Set ( ) ;
2112
+ } , ( ) => { } ) ;
2113
+
2114
+ var createdAndUpdatedTime = DateTimeOffset . Now ;
2115
+ var newerUpdateTime = createdAndUpdatedTime . Add ( TimeSpan . FromMinutes ( 1 ) ) ;
2116
+
2117
+ const string originalTitle = "Original Thing" ;
2118
+
2119
+ var originalThing = new Thing ( 1 , originalTitle , createdAndUpdatedTime , createdAndUpdatedTime ) ;
2120
+ col . AddItem ( originalThing ) ;
2121
+
2122
+ evt . WaitOne ( ) ;
2123
+ evt . Reset ( ) ;
2124
+
2125
+ Assert . AreEqual ( originalTitle , col [ 0 ] . Title ) ;
2126
+
2127
+ const string updatedTitle = "Updated Thing" ;
2128
+
2129
+ var updatedThing = new Thing ( 1 , updatedTitle , createdAndUpdatedTime , newerUpdateTime ) ;
2130
+ col . AddItem ( updatedThing ) ;
2131
+
2132
+ evt . WaitOne ( ) ;
2133
+ evt . Reset ( ) ;
2134
+
2135
+ Assert . AreEqual ( updatedTitle , col [ 0 ] . Title ) ;
2136
+
2137
+ col . Dispose ( ) ;
2138
+ }
2017
2139
}
0 commit comments