Skip to content

Commit bf8f680

Browse files
committed
test: added missing Jump and AutoAdvanceAmount tests
1 parent 489dae4 commit bf8f680

File tree

1 file changed

+86
-2
lines changed

1 file changed

+86
-2
lines changed

test/TimeProviderExtensions.Tests/ManualTimeProviderTests.cs

Lines changed: 86 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -152,14 +152,98 @@ public void Timer_callback_GetUtcNow_AutoAdvance()
152152
var oneSecond = TimeSpan.FromSeconds(1);
153153
var timeProvider = new ManualTimeProvider() { AutoAdvanceAmount = oneSecond };
154154

155-
var t1 = timeProvider.CreateTimer(_ =>
155+
using var t1 = timeProvider.CreateTimer(_ =>
156156
{
157157
timeProvider.GetUtcNow();
158158
}, null, TimeSpan.Zero, oneSecond);
159159

160160
timeProvider.GetUtcNow().Should().Be(timeProvider.Start + oneSecond);
161161
}
162162

163+
[Fact]
164+
public void Advance_zero()
165+
{
166+
var sut = new ManualTimeProvider();
167+
168+
sut.Advance(TimeSpan.Zero);
169+
170+
sut.GetUtcNow().Should().Be(sut.Start);
171+
}
172+
173+
[Fact]
174+
public void Jump_zero()
175+
{
176+
var sut = new ManualTimeProvider();
177+
178+
sut.Jump(TimeSpan.Zero);
179+
180+
sut.GetUtcNow().Should().Be(sut.Start);
181+
}
182+
183+
[Fact]
184+
public void AutoAdvanceAmount_throws_when_lt_zero()
185+
{
186+
var sut = new ManualTimeProvider();
187+
188+
var throws = () => sut.AutoAdvanceAmount = TimeSpan.FromTicks(-1);
189+
190+
throws.Should().Throw<ArgumentOutOfRangeException>();
191+
}
192+
193+
[Fact]
194+
public void Jump_throws_when_lt_zero()
195+
{
196+
var sut = new ManualTimeProvider();
197+
198+
var throws = () => sut.Jump(TimeSpan.FromTicks(-1));
199+
200+
throws.Should().Throw<ArgumentOutOfRangeException>();
201+
}
202+
203+
[Fact]
204+
public void Jump_throws_going_back_in_time()
205+
{
206+
var sut = new ManualTimeProvider();
207+
208+
var throws = () => sut.Jump(sut.GetUtcNow() - TimeSpan.FromTicks(1));
209+
210+
throws.Should().Throw<ArgumentOutOfRangeException>();
211+
}
212+
213+
[Fact]
214+
public async Task Multi_threaded_SetUtcNow()
215+
{
216+
var callbackCount = 0;
217+
var sut = new ManualTimeProvider();
218+
using var timer = sut.CreateTimer(_ =>
219+
{
220+
Thread.Sleep(20);
221+
callbackCount++;
222+
}, null, 1.Seconds(), 1.Seconds());
223+
224+
var tasks = Enumerable.Range(1, 100).Select(_ => Task.Run(() => sut.SetUtcNow(sut.Start + 1.Seconds())));
225+
226+
await Task.WhenAll(tasks).ConfigureAwait(false);
227+
callbackCount.Should().Be(1);
228+
}
229+
230+
[Fact]
231+
public async Task Multi_threaded_Jump()
232+
{
233+
var callbackCount = 0;
234+
var sut = new ManualTimeProvider();
235+
using var timer = sut.CreateTimer(_ =>
236+
{
237+
Thread.Sleep(20);
238+
callbackCount++;
239+
}, null, 1.Seconds(), 1.Seconds());
240+
241+
var tasks = Enumerable.Range(1, 100).Select(_ => Task.Run(() => sut.Jump(sut.Start + 1.Seconds())));
242+
243+
await Task.WhenAll(tasks).ConfigureAwait(false);
244+
callbackCount.Should().Be(1);
245+
}
246+
163247
[Fact]
164248
public void ActiveTimers_with_no_timers()
165249
{
@@ -197,5 +281,5 @@ public void ActiveTimers_with_after_timer_state_change()
197281
sut.Advance(1.Seconds());
198282

199283
sut.ActiveTimers.Should().Be(0);
200-
}
284+
}
201285
}

0 commit comments

Comments
 (0)