Skip to content

Commit 949150a

Browse files
Copilotilonatommy
andcommitted
Add test for OnNavigateTo callback exception handling in NavigationManagerTest.cs
Co-authored-by: ilonatommy <[email protected]>
1 parent 5129adc commit 949150a

File tree

1 file changed

+92
-0
lines changed

1 file changed

+92
-0
lines changed

src/Components/Components/test/NavigationManagerTest.cs

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -886,6 +886,38 @@ public void OnNotFoundSubscriptionIsTriggeredWhenNotFoundCalled()
886886
// Assert
887887
Assert.True(notFoundTriggered, "The OnNotFound event was not triggered as expected.");
888888
}
889+
890+
[Fact]
891+
public void OnNavigateToCallback_WhenThrows_ShouldBeHandledGracefully()
892+
{
893+
// Arrange
894+
var baseUri = "scheme://host/";
895+
var uri = "scheme://host/test";
896+
var testNavManager = new TestNavigationManagerWithCallback();
897+
var exceptionThrown = false;
898+
var expectedException = new InvalidOperationException("Test exception from OnNavigateTo");
899+
900+
// Configure the onNavigateTo callback to throw an exception
901+
testNavManager.ConfigureOnNavigateToCallback(throwingUri =>
902+
{
903+
exceptionThrown = true;
904+
throw expectedException;
905+
});
906+
907+
// Act
908+
// Initialize the navigation manager with the callback
909+
testNavManager.Initialize(baseUri, uri, testNavManager.GetOnNavigateToCallback());
910+
911+
// Assert
912+
Assert.True(testNavManager.IsInitialized);
913+
914+
// When navigation is triggered, the exception should be handled gracefully
915+
var thrownException = testNavManager.TriggerOnNavigateToCallback(uri);
916+
917+
// Assert
918+
Assert.True(exceptionThrown, "The OnNavigateTo callback should have been called and thrown an exception.");
919+
Assert.Same(expectedException, thrownException);
920+
}
889921

890922
private class TestNavigationManager : NavigationManager
891923
{
@@ -932,4 +964,64 @@ protected override void HandleLocationChangingHandlerException(Exception ex, Loc
932964
_exceptionsThrownFromLocationChangingHandlers.Add(ex);
933965
}
934966
}
967+
968+
private class TestNavigationManagerWithCallback : TestNavigationManager, IHostEnvironmentNavigationManager
969+
{
970+
private Func<string, Task> _onNavigateToCallback;
971+
972+
public TestNavigationManagerWithCallback()
973+
{
974+
}
975+
976+
public void Initialize(string baseUri, string uri, Func<string, Task> onNavigateTo)
977+
{
978+
_onNavigateToCallback = onNavigateTo;
979+
base.Initialize(baseUri, uri);
980+
}
981+
982+
public void ConfigureOnNavigateToCallback(Func<string, Task> callback)
983+
{
984+
_onNavigateToCallback = callback;
985+
}
986+
987+
public Func<string, Task> GetOnNavigateToCallback()
988+
{
989+
return _onNavigateToCallback;
990+
}
991+
992+
public Exception TriggerOnNavigateToCallback(string uri)
993+
{
994+
if (_onNavigateToCallback == null)
995+
{
996+
return null;
997+
}
998+
999+
try
1000+
{
1001+
// Simulate the fire-and-forget pattern used in RemoteNavigationManager
1002+
_ = _onNavigateToCallback(uri);
1003+
return null;
1004+
}
1005+
catch (Exception ex)
1006+
{
1007+
return ex;
1008+
}
1009+
}
1010+
1011+
public bool IsInitialized
1012+
{
1013+
get
1014+
{
1015+
try
1016+
{
1017+
_ = BaseUri; // This will throw if not initialized
1018+
return true;
1019+
}
1020+
catch (InvalidOperationException)
1021+
{
1022+
return false;
1023+
}
1024+
}
1025+
}
1026+
}
9351027
}

0 commit comments

Comments
 (0)