diff --git a/src/Libraries/Microsoft.Extensions.TimeProvider.Testing/FakeTimeProvider.cs b/src/Libraries/Microsoft.Extensions.TimeProvider.Testing/FakeTimeProvider.cs index 9a7ab1d252f..43b9e92b1c5 100644 --- a/src/Libraries/Microsoft.Extensions.TimeProvider.Testing/FakeTimeProvider.cs +++ b/src/Libraries/Microsoft.Extensions.TimeProvider.Testing/FakeTimeProvider.cs @@ -175,7 +175,8 @@ public override long GetTimestamp() #pragma warning disable S3236 // Caller information arguments should not be provided explicitly Debug.Assert(TimestampFrequency == TimeSpan.TicksPerSecond, "Assuming frequency equals ticks per second"); #pragma warning restore S3236 // Caller information arguments should not be provided explicitly - return _now.Ticks; + + return GetUtcNow().Ticks; } /// diff --git a/test/Libraries/Microsoft.Extensions.TimeProvider.Testing.Tests/FakeTimeProviderTests.cs b/test/Libraries/Microsoft.Extensions.TimeProvider.Testing.Tests/FakeTimeProviderTests.cs index cf138a91fb3..ba0946f9ec4 100644 --- a/test/Libraries/Microsoft.Extensions.TimeProvider.Testing.Tests/FakeTimeProviderTests.cs +++ b/test/Libraries/Microsoft.Extensions.TimeProvider.Testing.Tests/FakeTimeProviderTests.cs @@ -40,6 +40,63 @@ public void Constructor_DefaultInitialization_SetsExpectedValues() Assert.Equal(timestamp, timestamp2); } + [Fact] + public void GetTimestamp_WithoutAutoAdvance_DoesNotAdvance() + { + var nowOffset = new DateTimeOffset(2000, 1, 1, 0, 0, 0, 0, TimeSpan.Zero); + var timeProvider = new FakeTimeProvider(nowOffset); + + var timestamp1 = timeProvider.GetTimestamp(); + var timestamp2 = timeProvider.GetTimestamp(); + + Assert.Equal(nowOffset, new DateTimeOffset(timestamp1, TimeSpan.Zero)); + Assert.Equal(nowOffset, new DateTimeOffset(timestamp2, TimeSpan.Zero)); + } + + [Fact] + public void GetTimestamp_WithAutoAdvance_AdvancesProperly() + { + var msToElapse = 100; + var nowOffset = new DateTimeOffset(2000, 1, 1, 0, 0, 0, 0, TimeSpan.Zero); + var timeProvider = new FakeTimeProvider(nowOffset) + { + AutoAdvanceAmount = TimeSpan.FromMilliseconds(msToElapse) + }; + + var timestamp1 = timeProvider.GetTimestamp(); + var timestamp2 = timeProvider.GetTimestamp(); + + Assert.Equal(nowOffset, new DateTimeOffset(timestamp1, TimeSpan.Zero)); + Assert.Equal(nowOffset.AddMilliseconds(msToElapse), new DateTimeOffset(timestamp2, TimeSpan.Zero)); + } + + [Fact] + public void GetElapsedTime_CallsGetTimestamp() + { + var timeProvider = new FakeTimeProvider(); + var st = timeProvider.GetTimestamp(); + timeProvider.Advance(TimeSpan.FromSeconds(1)); + var t = timeProvider.GetElapsedTime(st); + + Assert.Equal(TimeSpan.FromSeconds(1), t); + } + + [Fact] + public void GetElapsedTime_WithAutoAdvance_AdvancesProperly() + { + var timeProvider = new FakeTimeProvider + { + AutoAdvanceAmount = TimeSpan.FromSeconds(1) + }; + + var st = timeProvider.GetTimestamp(); + var elapsedTime = timeProvider.GetElapsedTime(st); + var elapsedTime2 = timeProvider.GetElapsedTime(st); + + Assert.Equal(TimeSpan.FromSeconds(1), elapsedTime); + Assert.Equal(TimeSpan.FromSeconds(2), elapsedTime2); + } + [Fact] public void Constructor_InitializesWithCustomDateTimeOffset_AdvancesCorrectly() {