@@ -34,14 +34,14 @@ final class TestSchedulerTests: XCTestCase {
3434
3535 // this should order by time, then id
3636
37- let t0 = TestSchedulerTask ( id: 0 , time: 200 , action: { } )
38- let t1 = TestSchedulerTask ( id: 1 , time: 200 , action: { } )
39- let t2 = TestSchedulerTask ( id: 2 , time: 300 , action: { } )
40- let t3 = TestSchedulerTask ( id: 3 , time: 300 , action: { } )
41- let t4 = TestSchedulerTask ( id: 4 , time: 400 , action: { } )
42- let t5 = TestSchedulerTask ( id: 5 , time: 400 , action: { } )
43- let t6 = TestSchedulerTask ( id: 6 , time: 100 , action: { } )
44- let t7 = TestSchedulerTask ( id: 7 , time: 100 , action: { } )
37+ let t0 = TestSchedulerTask ( id: 0 , time: 200 , interval : 0 , action: { } )
38+ let t1 = TestSchedulerTask ( id: 1 , time: 200 , interval : 0 , action: { } )
39+ let t2 = TestSchedulerTask ( id: 2 , time: 300 , interval : 0 , action: { } )
40+ let t3 = TestSchedulerTask ( id: 3 , time: 300 , interval : 0 , action: { } )
41+ let t4 = TestSchedulerTask ( id: 4 , time: 400 , interval : 0 , action: { } )
42+ let t5 = TestSchedulerTask ( id: 5 , time: 400 , interval : 0 , action: { } )
43+ let t6 = TestSchedulerTask ( id: 6 , time: 100 , interval : 0 , action: { } )
44+ let t7 = TestSchedulerTask ( id: 7 , time: 100 , interval : 0 , action: { } )
4545
4646 let unsorted = [ t0, t1, t2, t3, t4, t5, t6, t7, ]
4747 let sorted = [ t6, t7, t0, t1, t2, t3, t4, t5, ]
@@ -208,6 +208,90 @@ final class TestSchedulerTests: XCTestCase {
208208
209209 XCTAssertEqual ( expected, results. recordedOutput)
210210 }
211+
212+ func testSchedulesAndCancelsRepeatingTask( ) {
213+
214+ let subject = TestScheduler ( initialClock: 0 )
215+ let publisher1 = PassthroughSubject < VirtualTime , Never > ( )
216+ let results = subject. createTestableSubscriber ( VirtualTime . self, Never . self)
217+
218+ subject. schedule ( after: 100 , { publisher1. subscribe ( results) } )
219+ let cancellable = subject. schedule (
220+ after: 200 ,
221+ interval: 2 ,
222+ tolerance: subject. minimumTolerance,
223+ options: nil ,
224+ { publisher1. send ( subject. now) }
225+ )
226+ subject. schedule ( after: 210 , { cancellable. cancel ( ) } )
227+ subject. resume ( )
228+
229+ let expected : TestSequence < VirtualTime , Never > = [
230+ ( 100 , . subscription) ,
231+ ( 200 , . input( 200 ) ) ,
232+ ( 202 , . input( 202 ) ) ,
233+ ( 204 , . input( 204 ) ) ,
234+ ( 206 , . input( 206 ) ) ,
235+ ( 208 , . input( 208 ) ) ,
236+ ( 210 , . input( 210 ) ) ,
237+ ]
238+
239+ XCTAssertEqual ( expected, results. recordedOutput)
240+ }
241+
242+ func testIgnoresTasksAfterMaxClock( ) {
243+ let subject = TestScheduler ( initialClock: 0 , maxClock: 500 )
244+ let publisher1 = PassthroughSubject < VirtualTime , Never > ( )
245+ let results = subject. createTestableSubscriber ( VirtualTime . self, Never . self)
246+
247+ subject. schedule ( after: 100 , { publisher1. subscribe ( results) } )
248+ let cancellable = subject. schedule (
249+ after: 0 ,
250+ interval: 100 ,
251+ tolerance: subject. minimumTolerance,
252+ options: nil ,
253+ { publisher1. send ( subject. now) }
254+ )
255+ subject. resume ( )
256+ cancellable. cancel ( )
257+
258+ let expected : TestSequence < VirtualTime , Never > = [
259+ ( 100 , . subscription) ,
260+ ( 100 , . input( 100 ) ) ,
261+ ( 200 , . input( 200 ) ) ,
262+ ( 300 , . input( 300 ) ) ,
263+ ( 400 , . input( 400 ) ) ,
264+ ( 500 , . input( 500 ) ) ,
265+ ]
266+
267+ XCTAssertEqual ( expected, results. recordedOutput)
268+ }
269+
270+ func testRemovesTaskCancelledWithinOwnAction( ) {
271+ let subject = TestScheduler ( initialClock: 0 , maxClock: 500 )
272+ let publisher1 = PassthroughSubject < VirtualTime , Never > ( )
273+ let results = subject. createTestableSubscriber ( VirtualTime . self, Never . self)
274+ var cancellables = Set < AnyCancellable > ( )
275+
276+ subject. schedule ( after: 100 , { publisher1. subscribe ( results) } )
277+ subject. schedule (
278+ after: 200 ,
279+ interval: 100 ,
280+ tolerance: subject. minimumTolerance,
281+ options: nil ) {
282+ publisher1. send ( subject. now)
283+ cancellables. removeAll ( )
284+ }
285+ . store ( in: & cancellables)
286+ subject. resume ( )
287+
288+ let expected : TestSequence < VirtualTime , Never > = [
289+ ( 100 , . subscription) ,
290+ ( 200 , . input( 200 ) )
291+ ]
292+
293+ XCTAssertEqual ( expected, results. recordedOutput)
294+ }
211295
212296 static var allTests = [
213297 ( " testSchedulerTasksSortSensibly " , testSchedulerTasksSortSensibly) ,
@@ -216,5 +300,11 @@ final class TestSchedulerTests: XCTestCase {
216300 ( " testSchedulerInvokesDeferredTask " , testSchedulerInvokesDeferredTask) ,
217301 ( " testSchedulerInvokesDeferredTaskScheduledForPastImmediately " , testSchedulerInvokesDeferredTaskScheduledForPastImmediately) ,
218302 ( " testSchedulerRemovesCancelledTasks " , testSchedulerRemovesCancelledTasks) ,
303+ ( " testSchedulerQueues " , testSchedulerQueues) ,
304+ ( " testFiresEventsScheduledBeforeStartCalled " , testFiresEventsScheduledBeforeStartCalled) ,
305+ ( " testTrampolinesImmediatelyScheduledTasks " , testTrampolinesImmediatelyScheduledTasks) ,
306+ ( " testSchedulesRepeatingTask " , testSchedulesAndCancelsRepeatingTask) ,
307+ ( " testIgnoresTasksAfterMaxClock " , testIgnoresTasksAfterMaxClock) ,
308+ ( " testRemovesTaskCancelledWithinOwnAction " , testRemovesTaskCancelledWithinOwnAction)
219309 ]
220310}
0 commit comments