@@ -2,107 +2,51 @@ namespace TimeProviderExtensions;
2
2
3
3
public class ManualTimeProviderCancelAfter
4
4
{
5
- internal const uint MaxSupportedTimeout = 0xfffffffe ;
6
-
7
- [ Theory ]
8
- [ InlineData ( - 2 ) ]
9
- [ InlineData ( MaxSupportedTimeout + 1 ) ]
10
- public void CancelAfter_throws_ArgumentOutOfRangeException ( double timespanInMilliseconds )
11
- {
12
- using var cts = new CancellationTokenSource ( ) ;
13
- var sut = new ManualTimeProvider ( ) ;
14
-
15
- var throws = ( ) => cts . CancelAfter ( TimeSpan . FromMilliseconds ( timespanInMilliseconds ) , sut ) ;
16
-
17
- throws . Should ( ) . ThrowExactly < ArgumentOutOfRangeException > ( ) ;
18
- }
19
-
20
- [ Fact ]
21
- public void CancelAfter_throws_ArgumentNullException ( )
22
- {
23
- using var cts = new CancellationTokenSource ( ) ;
24
-
25
- var throws = ( ) => cts . CancelAfter ( TimeSpan . Zero , default ( ManualTimeProvider ) ! ) ;
26
-
27
- throws . Should ( ) . ThrowExactly < ArgumentNullException > ( ) ;
28
- }
29
-
30
- [ Fact ]
31
- public void CancelAfter_does_nothing_when_cts_already_canceled ( )
32
- {
33
- using var cts = new CancellationTokenSource ( ) ;
34
- var sut = new ManualTimeProvider ( ) ;
35
-
36
- cts . Cancel ( ) ;
37
- cts . CancelAfter ( TimeSpan . Zero , sut ) ;
38
-
39
- cts . IsCancellationRequested . Should ( ) . BeTrue ( ) ;
40
- }
41
-
42
- [ Fact ]
43
- public void CancelAfter_does_nothing_when_delay_eq_zero ( )
44
- {
45
- using var cts = new CancellationTokenSource ( ) ;
46
- var sut = new ManualTimeProvider ( ) ;
47
-
48
- cts . CancelAfter ( TimeSpan . Zero , sut ) ;
49
-
50
- cts . IsCancellationRequested . Should ( ) . BeFalse ( ) ;
51
- }
52
-
53
- [ Fact ]
54
- public void CancelAfter_does_nothing_when_delay_infinite ( )
55
- {
56
- using var cts = new CancellationTokenSource ( ) ;
57
- var sut = new ManualTimeProvider ( ) ;
58
-
59
- cts . CancelAfter ( TimeSpan . FromMilliseconds ( - 1 ) , sut ) ;
60
-
61
- cts . IsCancellationRequested . Should ( ) . BeFalse ( ) ;
62
- }
63
-
64
5
[ Fact ]
65
6
public void CancelAfter_cancels ( )
66
7
{
67
- using var cts = new CancellationTokenSource ( ) ;
68
- var sut = new ManualTimeProvider ( ) ;
69
8
var delay = TimeSpan . FromMilliseconds ( 42 ) ;
70
-
71
- cts . CancelAfter ( delay , sut ) ;
9
+ var sut = new ManualTimeProvider ( ) ;
10
+ using var cts = sut . CreateCancellationTokenSource ( delay ) ;
72
11
73
12
sut . ForwardTime ( delay ) ;
13
+
74
14
cts . IsCancellationRequested . Should ( ) . BeTrue ( ) ;
75
15
}
76
16
17
+ #if NET8_0_OR_GREATER
18
+ // The following two scenarios are only supported by .NET 8 and up.
77
19
[ Fact ]
78
20
public void CancelAfter_reschedule_longer_cancel ( )
79
21
{
80
- using var cts = new CancellationTokenSource ( ) ;
81
- var sut = new ManualTimeProvider ( ) ;
82
22
var initialDelay = TimeSpan . FromMilliseconds ( 100 ) ;
83
23
var rescheduledDelay = TimeSpan . FromMilliseconds ( 1000 ) ;
24
+ var sut = new ManualTimeProvider ( ) ;
25
+ using var cts = sut . CreateCancellationTokenSource ( initialDelay ) ;
84
26
85
- cts . CancelAfter ( initialDelay , sut ) ;
86
- cts . CancelAfter ( rescheduledDelay , sut ) ;
27
+ cts . CancelAfter ( rescheduledDelay ) ;
87
28
88
29
sut . ForwardTime ( initialDelay ) ;
89
30
cts . IsCancellationRequested . Should ( ) . BeFalse ( ) ;
90
- sut . ForwardTime ( rescheduledDelay ) ;
31
+
32
+ sut . ForwardTime ( rescheduledDelay - initialDelay ) ;
91
33
cts . IsCancellationRequested . Should ( ) . BeTrue ( ) ;
92
34
}
93
35
94
36
[ Fact ]
95
- public void CancelAfter_reschedule_shorter_cancel ( )
37
+ public async void CancelAfter_reschedule_shorter_cancel ( )
96
38
{
97
- using var cts = new CancellationTokenSource ( ) ;
98
- var sut = new ManualTimeProvider ( ) ;
99
39
var initialDelay = TimeSpan . FromMilliseconds ( 1000 ) ;
100
40
var rescheduledDelay = TimeSpan . FromMilliseconds ( 100 ) ;
41
+ var sut = new ManualTimeProvider ( ) ;
42
+ using var cts = sut . CreateCancellationTokenSource ( initialDelay ) ;
101
43
102
- cts . CancelAfter ( initialDelay , sut ) ;
103
- cts . CancelAfter ( rescheduledDelay , sut ) ;
44
+ cts . CancelAfter ( rescheduledDelay ) ;
104
45
105
46
sut . ForwardTime ( rescheduledDelay ) ;
47
+ await Task . Delay ( 1000 ) ;
48
+
106
49
cts . IsCancellationRequested . Should ( ) . BeTrue ( ) ;
107
50
}
51
+ #endif
108
52
}
0 commit comments