Skip to content

Commit

Permalink
fix: only include FakeTimeProvider in debug mode
Browse files Browse the repository at this point in the history
  • Loading branch information
egil committed May 24, 2023
1 parent 15a9751 commit a56cb14
Show file tree
Hide file tree
Showing 13 changed files with 18 additions and 59 deletions.
2 changes: 0 additions & 2 deletions src/TimeProviderExtensions/ManualTimeProvider.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using Microsoft.Extensions.Time.Testing;
using static Microsoft.Extensions.Time.Testing.FakeTimeProviderTimer;

namespace TimeProviderExtensions;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
#if !RELEASE
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

Expand All @@ -12,7 +13,7 @@ namespace Microsoft.Extensions.Time.Testing;
/// <summary>
/// A synthetic clock used to provide deterministic behavior in tests.
/// </summary>
internal class FakeTimeProvider : TimeProvider
public class FakeTimeProvider : TimeProvider
{
internal static readonly DateTimeOffset Epoch = new(2000, 1, 1, 0, 0, 0, 0, TimeSpan.Zero);

Expand Down Expand Up @@ -182,4 +183,5 @@ private void WakeWaiters(List<FakeTimeProviderTimer.Waiter> waiters)
}
}
}
}
}
#endif
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
#if !RELEASE
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

Expand Down Expand Up @@ -162,4 +163,5 @@ public static long IfOutOfRange(long argument, long min, long max, [CallerArgume

return argument;
}
}
}
#endif
8 changes: 0 additions & 8 deletions test/TimeProviderExtensions.Tests/GlobalSuppressions.cs

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#if TargetMicrosoftTestTimeProvider
#if TargetMicrosoftTestTimeProvider && !RELEASE
using SutTimeProvider = Microsoft.Extensions.Time.Testing.FakeTimeProvider;
#else
using SutTimeProvider = TimeProviderExtensions.ManualTimeProvider;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#if TargetMicrosoftTestTimeProvider
#if TargetMicrosoftTestTimeProvider && !RELEASE
using SutTimeProvider = Microsoft.Extensions.Time.Testing.FakeTimeProvider;
#else
using SutTimeProvider = TimeProviderExtensions.ManualTimeProvider;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#if NET6_0_OR_GREATER
#if TargetMicrosoftTestTimeProvider
#if TargetMicrosoftTestTimeProvider && !RELEASE
using SutTimeProvider = Microsoft.Extensions.Time.Testing.FakeTimeProvider;
#else
using SutTimeProvider = TimeProviderExtensions.ManualTimeProvider;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#if TargetMicrosoftTestTimeProvider
#if TargetMicrosoftTestTimeProvider && !RELEASE
using SutTimeProvider = Microsoft.Extensions.Time.Testing.FakeTimeProvider;
#else
using SutTimeProvider = TimeProviderExtensions.ManualTimeProvider;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#if TargetMicrosoftTestTimeProvider
#if TargetMicrosoftTestTimeProvider && !RELEASE
using SutTimeProvider = Microsoft.Extensions.Time.Testing.FakeTimeProvider;
#else
using SutTimeProvider = TimeProviderExtensions.ManualTimeProvider;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#if TargetMicrosoftTestTimeProvider
#if TargetMicrosoftTestTimeProvider && !RELEASE
using SutTimeProvider = Microsoft.Extensions.Time.Testing.FakeTimeProvider;
#else
using SutTimeProvider = TimeProviderExtensions.ManualTimeProvider;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
#if NET6_0_OR_GREATER
#if TargetMicrosoftTestTimeProvider
#if TargetMicrosoftTestTimeProvider && !RELEASE
using SutTimeProvider = Microsoft.Extensions.Time.Testing.FakeTimeProvider;
#else
using SutTimeProvider = TimeProviderExtensions.ManualTimeProvider;
#endif

namespace TimeProviderExtensions;

internal class ManualTimeProviderWaitAsyncTests
public class ManualTimeProviderWaitAsyncTests
{
internal const uint MaxSupportedTimeout = 0xfffffffe;
private readonly static TimeSpan DelayedTaskDelay = TimeSpan.FromMilliseconds(2);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#if TargetMicrosoftTestTimeProvider
#if TargetMicrosoftTestTimeProvider && !RELEASE
using SutTimeProvider = Microsoft.Extensions.Time.Testing.FakeTimeProvider;
#else
using SutTimeProvider = TimeProviderExtensions.ManualTimeProvider;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#if TargetMicrosoftTestTimeProvider
#if TargetMicrosoftTestTimeProvider && !RELEASE
using SutTimeProvider = Microsoft.Extensions.Time.Testing.FakeTimeProvider;
#else
using SutTimeProvider = TimeProviderExtensions.ManualTimeProvider;
Expand Down Expand Up @@ -182,7 +182,7 @@ await fakeTimeProvider.Delay(
});
}

#if TargetMicrosoftTestTimeProvider
#if TargetMicrosoftTestTimeProvider && !RELEASE

[Fact]
public void TimerChangeDueTimeOutOfRangeThrows()
Expand Down Expand Up @@ -244,40 +244,5 @@ public void WaiterRemovedAfterDispose()
Assert.Equal(2, timer2Counter);
Assert.Equal(1, waitersCountAfter);
}

#if RELEASE // In Release only since this might not work if the timer reference being tracked by the debugger
[Fact]
public void WaiterRemovedWhenCollectedWithoutDispose()
{
var timer1Counter = 0;
var timer2Counter = 0;

var timeProvider = new SutTimeProvider();
var waitersCountStart = timeProvider.Waiters.Count;

var timer1 = timeProvider.CreateTimer(_ => timer1Counter++, null, TimeSpan.FromMilliseconds(1), TimeSpan.FromMilliseconds(1));
var timer2 = timeProvider.CreateTimer(_ => timer2Counter++, null, TimeSpan.FromMilliseconds(1), TimeSpan.FromMilliseconds(1));

var waitersCountDuring = timeProvider.Waiters.Count;

timeProvider.Advance(TimeSpan.FromMilliseconds(1));

// Force the finalizer on timer1 to ensure Dispose is releasing the waiter object
// even when a Timer is not disposed
timer1 = null;
GC.Collect();
GC.WaitForPendingFinalizers();

timeProvider.Advance(TimeSpan.FromMilliseconds(1));

var waitersCountAfter = timeProvider.Waiters.Count;

Assert.Equal(0, waitersCountStart);
Assert.Equal(2, waitersCountDuring);
Assert.Equal(1, timer1Counter);
Assert.Equal(2, timer2Counter);
Assert.Equal(1, waitersCountAfter);
}
#endif
#endif
}

0 comments on commit a56cb14

Please sign in to comment.