[Housekeeping] Fix Unit Test Failure: Catastrophic failure: System.ArgumentOutOfRangeException
#2479
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description of Change
This PR fixes the
ArgumentOutOfRangeExceptionoccurring in theRun All Unit Testsstep of ourBuild Library (windows-latest)pipeline:The exception was happening because both
MockPopupandMockPopupHandlerwere both callingHandlerCompleteTCS.SetResult();inOnClosedcausing a race condition where our test would sometimes fail and sometimes pass.PR Checklist
mainat time of PRAdditional information
This PR updates the PopupTests to use
Assert.ThrowsAnyAsync<OperationCanceledException>()which will pass when either anOperationCanceledExceptionis thrown or anTaskCanceledExceptionis thrown sinceTaskCanceledExceptionderives fromOperationCanceledException;Assert.ThrowsAnyAsync<T>()allows for derived types, whereasAssert.ThrowsAsync<T>()does not allow derived types.This PR fixes an edge case where
await popupDismissedTaskCompletionSource.Task.WaitAsync(token)does not throw aTaskCanceledExceptiondespite the token being canceled whenHandlerCompleteTCS.Taskhad already completed; the fix is to manually addtoken.ThrowIfCancellationRequested();inPopup.OnClosed().This PR changes
readonly IPopup poup->readonly MockPopup popupbecause of the discrepancy betweenvoid IPopup.OnDismissedByTappingOutsideOfPopup()and the awaitableTask MockPopup.OnDismissedByTappingOutsideOfPopup(). I also added the missingawaitkeyword when the tests callMockPopup.OnDismissedByTappingOutsideOfPopup().This PR adds
readonly MockPopupHandler popupHandlertoPopupTests, and assigns this handler toreadonly MockPopup popupin the constructor:popupHandler = CreateElementHandler<MockPopupHandler>(popup);This PR also adds GitHubActionsTestLogger to provide us with more comprehensive logs when tests fail. This will help us solve test errors in the future.