Skip to content

Update README.md

Update README.md #31

GitHub Actions / test-results-net6.0 succeeded Mar 22, 2024 in 0s

146 passed, 0 failed and 2 skipped

Tests passed successfully

✅ /home/runner/work/TimeProviderExtensions/TimeProviderExtensions/TestResults/_fv-az740-910_2024-03-22_13_51_05.trx

148 tests were completed in 5s with 146 passed, 0 failed and 2 skipped.

Test suite Passed Failed Skipped Time
Microsoft.Extensions.Time.Testing.Test.ManualTimeProviderTests 20✅ 213ms
Microsoft.Extensions.Time.Testing.Test.TimerTests 19✅ 159ms
TimeProviderExtensions.AutoAdvanceBehaviorTests 3✅ 126ms
TimeProviderExtensions.ManualTimeProviderCancelAfter 1✅ 1ms
TimeProviderExtensions.ManualTimeProviderDelayTests 1✅ 1⚪ 2ms
TimeProviderExtensions.ManualTimeProviderPeriodicTimerTests 13✅ 166ms
TimeProviderExtensions.ManualTimeProviderTests 30✅ 1⚪ 119ms
TimeProviderExtensions.ManualTimeProviderTimestampTests 2✅ 1ms
TimeProviderExtensions.ManualTimeProviderWaitAsyncTests 32✅ 207ms
TimeProviderExtensions.ManualTimerTests 25✅ 31ms

✅ Microsoft.Extensions.Time.Testing.Test.ManualTimeProviderTests

✅ AdvanceGoesForward
✅ AutoAdvance
✅ CreateSource
✅ DefaultCtor
✅ Delay_Cancelled
✅ Delay_InvalidArgs
✅ Delay_Timeout
✅ Delay_Zero
✅ GetTimestampSyncWithUtcNow
✅ LocalTimeZoneIsUtc
✅ RichCtor
✅ SetLocalTimeZoneWorks
✅ TimeCannotGoBackwards
✅ ToStr
✅ ToString_AutoAdvance_off
✅ ToString_AutoAdvance_on
✅ WaitAsync
✅ WaitAsync_Cancel
✅ WaitAsync_InfiniteTimeout
✅ WaitAsync_Timeout

✅ Microsoft.Extensions.Time.Testing.Test.TimerTests

✅ LongPausesTriggerMultipleCallbacks
✅ LongPausesTriggerMultipleCallbacks_Jump
✅ MultipleTimersCallbackInvokedInScheduledOrder
✅ MultipleTimersCallbackInvokedInScheduledOrder_Jump
✅ NoDueTime_TimerDoesntStart
✅ OutOfOrderWakeTimes
✅ TaskDelayWithManualTimeProviderAdvanced
✅ TaskDelayWithManualTimeProviderStopped
✅ Timer_Change_AfterDispose_Test
✅ Timer_Change_AfterDisposeAsync_Test
✅ TimerChangeDueTimeOutOfRangeThrows
✅ TimerChangePeriodOutOfRangeThrows
✅ TimerNonPeriodicPeriodInfinite
✅ TimerNonPeriodicPeriodZero
✅ TimerStartsImmediately
✅ TimerTriggersPeriodically
✅ UtcNowUpdatedBeforeTimerCallback
✅ WaiterRemovedAfterDispose
✅ WaiterRemovedWhenCollectedWithoutDispose

✅ TimeProviderExtensions.AutoAdvanceBehaviorTests

✅ ClockAdvanceAmount_throws_when_lt_zero
✅ TimerAutoTriggerCount_throws_when_lt_zero
✅ TimestampAdvanceAmount_throws_when_lt_zero

✅ TimeProviderExtensions.ManualTimeProviderCancelAfter

✅ CancelAfter_cancels

✅ TimeProviderExtensions.ManualTimeProviderDelayTests

⚪ Delayed_task_is_cancelled
✅ Delayed_task_is_completes

✅ TimeProviderExtensions.ManualTimeProviderPeriodicTimerTests

✅ Cancelling_token_after_WaitForNextTickAsync_safe
✅ GetUtcNow_matches_time_when_WaitForNextTickAsync_is_invoked
✅ PeriodicTimer_WaitForNextTickAsync_cancelled_immediately
✅ PeriodicTimer_WaitForNextTickAsync_cancelled_with_exception
✅ PeriodicTimer_WaitForNextTickAsync_complete_immediately
✅ PeriodicTimer_WaitForNextTickAsync_completes
✅ PeriodicTimer_WaitForNextTickAsync_completes_after_dispose
✅ PeriodicTimer_WaitForNextTickAsync_completes_iterations(expectedCallbacks: 1)
✅ PeriodicTimer_WaitForNextTickAsync_completes_iterations(expectedCallbacks: 2)
✅ PeriodicTimer_WaitForNextTickAsync_completes_iterations(expectedCallbacks: 3)
✅ PeriodicTimer_WaitForNextTickAsync_completes_multiple
✅ PeriodicTimer_WaitForNextTickAsync_exists_on_timer_Dispose
✅ PeriodicTimer_WaitForNextTickAsync_twice_throws

✅ TimeProviderExtensions.ManualTimeProviderTests

✅ Active_timer_with_TimerAutoAdvanceTimes_gt_zero(timerAutoTriggerCount: 1)
✅ Active_timer_with_TimerAutoAdvanceTimes_gt_zero(timerAutoTriggerCount: 10)
✅ ActiveTimers_with_active_timers
✅ ActiveTimers_with_after_timer_state_change
✅ ActiveTimers_with_inactive_timers
✅ ActiveTimers_with_no_timers
✅ Advance_updates_UtcNow
✅ Advance_zero
✅ Callbacks_happens_in_schedule_order
✅ CreateManualTimer_with_custom_timer_type
✅ Delay_callbacks_runs_synchronously
✅ GetElapsedTime_with_TimestampAdvanceAmount_gt_zero
✅ GetLocalNow_with_ClockAdvanceAmount_gt_zero
✅ GetTimestamp_with_TimestampAdvanceAmount_gt_zero
✅ GetUtcNow_with_ClockAdvanceAmount_gt_zero
✅ Inactive_timer_with_TimerAutoAdvanceTimes_gt_zero(timerAutoTriggerCount: 1)
✅ Inactive_timer_with_TimerAutoAdvanceTimes_gt_zero(timerAutoTriggerCount: 10)
✅ Jump_throws_going_back_in_time
✅ Jump_throws_when_lt_zero
✅ Jump_zero
✅ Multi_threaded_Jump
✅ Multi_threaded_SetUtcNow
✅ Multiple_one_of_timers_with_TimerAutoAdvanceTimes_gt_zero
✅ Multiple_periodic_timers_with_TimerAutoAdvanceTimes_gt_zero(timerAutoTriggerCount: 1, timer1ExpectedCallbackCount: 3, timer2ExpectedCallbackCount: 1, expectedSecondsSpend: 3)
✅ Multiple_periodic_timers_with_TimerAutoAdvanceTimes_gt_zero(timerAutoTriggerCount: 10, timer1ExpectedCallbackCount: 30, timer2ExpectedCallbackCount: 10, expectedSecondsSpend: 30)
✅ Setting_AutoAdvanceBehavior_to_null
✅ SetUtcNow_updates_UtcNow
✅ Starting_timer_with_TimerAutoAdvanceTimes_gt_zero(timerAutoTriggerCount: 1)
✅ Starting_timer_with_TimerAutoAdvanceTimes_gt_zero(timerAutoTriggerCount: 10)
✅ Timer_callback_GetUtcNow_AutoAdvance
⚪ WaitAsync_callbacks_runs_synchronously

✅ TimeProviderExtensions.ManualTimeProviderTimestampTests

✅ GetTimestamp_increments_by_ticks
✅ TimestampFrequency_ten_mill

✅ TimeProviderExtensions.ManualTimeProviderWaitAsyncTests

✅ Active_timer_with_TimerAutoAdvanceTimes_one_other_thread
✅ WaitAsync_canceled_immediately_when_cancellationToken_is_set(canceledInvocation: Func`2 { Method = System.Threading.Tasks.Task <.cctor>b__40_12(TimeProviderExtensions.ManualTimeProvider), Target = <>c { } })
✅ WaitAsync_canceled_immediately_when_cancellationToken_is_set(canceledInvocation: Func`2 { Method = System.Threading.Tasks.Task <.cctor>b__40_13(TimeProviderExtensions.ManualTimeProvider), Target = <>c { } })
✅ WaitAsync_completes_immediately_when_task_is_completed(completedInvocation: Func`2 { Method = System.Threading.Tasks.Task <.cctor>b__40_10(TimeProviderExtensions.ManualTimeProvider), Target = <>c { } })
✅ WaitAsync_completes_immediately_when_task_is_completed(completedInvocation: Func`2 { Method = System.Threading.Tasks.Task <.cctor>b__40_11(TimeProviderExtensions.ManualTimeProvider), Target = <>c { } })
✅ WaitAsync_completes_immediately_when_task_is_completed(completedInvocation: Func`2 { Method = System.Threading.Tasks.Task <.cctor>b__40_8(TimeProviderExtensions.ManualTimeProvider), Target = <>c { } })
✅ WaitAsync_completes_immediately_when_task_is_completed(completedInvocation: Func`2 { Method = System.Threading.Tasks.Task <.cctor>b__40_9(TimeProviderExtensions.ManualTimeProvider), Target = <>c { } })
✅ WaitAsync_completes_successfully(validInvocation: Func`2 { Method = System.Threading.Tasks.Task <.cctor>b__40_18(TimeProviderExtensions.ManualTimeProvider), Target = <>c { } })
✅ WaitAsync_completes_successfully(validInvocation: Func`2 { Method = System.Threading.Tasks.Task <.cctor>b__40_19(TimeProviderExtensions.ManualTimeProvider), Target = <>c { } })
✅ WaitAsync_completes_successfully(validInvocation: Func`2 { Method = System.Threading.Tasks.Task <.cctor>b__40_20(TimeProviderExtensions.ManualTimeProvider), Target = <>c { } })
✅ WaitAsync_completes_successfully(validInvocation: Func`2 { Method = System.Threading.Tasks.Task <.cctor>b__40_21(TimeProviderExtensions.ManualTimeProvider), Target = <>c { } })
✅ WaitAsync_of_T_completes_successfully(validInvocation: Func`2 { Method = System.Threading.Tasks.Task`1[System.String] <.cctor>b__40_22(TimeProviderExtensions.ManualTimeProvider), Target = <>c { } })
✅ WaitAsync_of_T_completes_successfully(validInvocation: Func`2 { Method = System.Threading.Tasks.Task`1[System.String] <.cctor>b__40_23(TimeProviderExtensions.ManualTimeProvider), Target = <>c { } })
✅ WaitAsync_throws_immediately_when_timeout_is_zero(immediateTimedoutInvocation: Func`2 { Method = System.Threading.Tasks.Task <.cctor>b__40_14(TimeProviderExtensions.ManualTimeProvider), Target = <>c { } })
✅ WaitAsync_throws_immediately_when_timeout_is_zero(immediateTimedoutInvocation: Func`2 { Method = System.Threading.Tasks.Task <.cctor>b__40_15(TimeProviderExtensions.ManualTimeProvider), Target = <>c { } })
✅ WaitAsync_throws_immediately_when_timeout_is_zero(immediateTimedoutInvocation: Func`2 { Method = System.Threading.Tasks.Task <.cctor>b__40_16(TimeProviderExtensions.ManualTimeProvider), Target = <>c { } })
✅ WaitAsync_throws_immediately_when_timeout_is_zero(immediateTimedoutInvocation: Func`2 { Method = System.Threading.Tasks.Task <.cctor>b__40_17(TimeProviderExtensions.ManualTimeProvider), Target = <>c { } })
✅ WaitAsync_throws_when_timeout_is_reached(invocationWithTime: Func`3 { Method = System.Threading.Tasks.Task <.cctor>b__40_24(TimeProviderExtensions.ManualTimeProvider, System.TimeSpan), Target = <>c { } })
✅ WaitAsync_throws_when_timeout_is_reached(invocationWithTime: Func`3 { Method = System.Threading.Tasks.Task <.cctor>b__40_25(TimeProviderExtensions.ManualTimeProvider, System.TimeSpan), Target = <>c { } })
✅ WaitAsync_throws_when_timeout_is_reached(invocationWithTime: Func`3 { Method = System.Threading.Tasks.Task <.cctor>b__40_26(TimeProviderExtensions.ManualTimeProvider, System.TimeSpan), Target = <>c { } })
✅ WaitAsync_throws_when_timeout_is_reached(invocationWithTime: Func`3 { Method = System.Threading.Tasks.Task <.cctor>b__40_27(TimeProviderExtensions.ManualTimeProvider, System.TimeSpan), Target = <>c { } })
✅ WaitAsync_throws_when_token_is_canceled(invocationWithCancelToken: Func`3 { Method = System.Threading.Tasks.Task <.cctor>b__40_28(TimeProviderExtensions.ManualTimeProvider, System.Threading.CancellationToken), Target = <>c { } })
✅ WaitAsync_throws_when_token_is_canceled(invocationWithCancelToken: Func`3 { Method = System.Threading.Tasks.Task <.cctor>b__40_29(TimeProviderExtensions.ManualTimeProvider, System.Threading.CancellationToken), Target = <>c { } })
✅ WaitAsync_timeout_input_validation(invalidInvocation: Func`2 { Method = System.Threading.Tasks.Task <.cctor>b__40_0(TimeProviderExtensions.ManualTimeProvider), Target = <>c { } })
✅ WaitAsync_timeout_input_validation(invalidInvocation: Func`2 { Method = System.Threading.Tasks.Task <.cctor>b__40_1(TimeProviderExtensions.ManualTimeProvider), Target = <>c { } })
✅ WaitAsync_timeout_input_validation(invalidInvocation: Func`2 { Method = System.Threading.Tasks.Task <.cctor>b__40_2(TimeProviderExtensions.ManualTimeProvider), Target = <>c { } })
✅ WaitAsync_timeout_input_validation(invalidInvocation: Func`2 { Method = System.Threading.Tasks.Task <.cctor>b__40_3(TimeProviderExtensions.ManualTimeProvider), Target = <>c { } })
✅ WaitAsync_timeout_input_validation(invalidInvocation: Func`2 { Method = System.Threading.Tasks.Task <.cctor>b__40_4(TimeProviderExtensions.ManualTimeProvider), Target = <>c { } })
✅ WaitAsync_timeout_input_validation(invalidInvocation: Func`2 { Method = System.Threading.Tasks.Task <.cctor>b__40_5(TimeProviderExtensions.ManualTimeProvider), Target = <>c { } })
✅ WaitAsync_timeout_input_validation(invalidInvocation: Func`2 { Method = System.Threading.Tasks.Task <.cctor>b__40_6(TimeProviderExtensions.ManualTimeProvider), Target = <>c { } })
✅ WaitAsync_timeout_input_validation(invalidInvocation: Func`2 { Method = System.Threading.Tasks.Task <.cctor>b__40_7(TimeProviderExtensions.ManualTimeProvider), Target = <>c { } })
✅ WaitAsync_with_TimerAutoInvokeCount_gt_zero

✅ TimeProviderExtensions.ManualTimerTests

✅ Advancing_causes_multiple_timers_invokes_callback_in_order
✅ Advancing_GetUtcNow_matches_time_at_callback_time
✅ CallbackInvokeCount_with_active_timer
✅ CallbackInvokeCount_with_disposed_timer
✅ CallbackInvokeCount_with_inactive_timer
✅ CallbackTime_with_active_timer
✅ CallbackTime_with_inactive_timer
✅ Change_timer
✅ Change_timer_from_stopped_to_started
✅ CreateTimer_with_infinite_DueTime_and_Period
✅ CreateTimer_with_positive_DueTime_and_infinite_Period
✅ CreateTimer_with_positive_DueTime_and_Period
✅ Disposing_timer_in_callback
✅ IsActive_with_active_timer
✅ IsActive_with_disposed_timer
✅ IsActive_with_inactive_timer
✅ Jumping_causes_multiple_timers_invokes_callback_in_order
✅ Jumping_GetUtcNow_matches_jump_target
✅ Jumping_past_longer_than_recurrence
✅ Timer_callback_invoked_multiple_times_single_advance
✅ ToString_with_disabled_timer
✅ ToString_with_disposed_timer
✅ ToString_with_duetime_periodic_timer
✅ ToString_with_immidiate_invokcation_timer
✅ ToString_with_periodic_timer