[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
ArgumentOutOfRangeException
occurring in theRun All Unit Tests
step of ourBuild Library (windows-latest)
pipeline:The exception was happening because both
MockPopup
andMockPopupHandler
were both callingHandlerCompleteTCS.SetResult();
inOnClosed
causing a race condition where our test would sometimes fail and sometimes pass.PR Checklist
main
at time of PRAdditional information
This PR updates the PopupTests to use
Assert.ThrowsAnyAsync<OperationCanceledException>()
which will pass when either anOperationCanceledException
is thrown or anTaskCanceledException
is thrown sinceTaskCanceledException
derives 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 aTaskCanceledException
despite the token being canceled whenHandlerCompleteTCS.Task
had already completed; the fix is to manually addtoken.ThrowIfCancellationRequested();
inPopup.OnClosed()
.This PR changes
readonly IPopup poup
->readonly MockPopup popup
because of the discrepancy betweenvoid IPopup.OnDismissedByTappingOutsideOfPopup()
and the awaitableTask MockPopup.OnDismissedByTappingOutsideOfPopup()
. I also added the missingawait
keyword when the tests callMockPopup.OnDismissedByTappingOutsideOfPopup()
.This PR adds
readonly MockPopupHandler popupHandler
toPopupTests
, and assigns this handler toreadonly MockPopup popup
in 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.