Sub Test_Router_MatchesExactRoot() Dim router Dim result Set router = New Router router.AddRoute "/", "Home" Set result = router.Match("/") AssertNotNothing result, "Router should match the exact '/' route" AssertEquals "Home", result.Item("ControllerName"), "Matched controller name for '/'" End Sub Sub Test_Router_CapturesNamedParam() Dim router Dim result Set router = New Router router.AddRoute "/greet/{name}", "Greet" Set result = router.Match("/greet/Ada") AssertNotNothing result, "Router should match a pattern route" AssertEquals "Greet", result.Item("ControllerName"), "Matched controller name for pattern route" AssertTrue result.Item("Params").Exists("name"), "Captured params should contain 'name'" AssertEquals "Ada", result.Item("Params").Item("name"), "Captured 'name' param value" End Sub Sub Test_Router_ReturnsNothingWhenNoRouteMatches() Dim router Dim result Set router = New Router router.AddRoute "/", "Home" router.AddRoute "/greet/{name}", "Greet" Set result = router.Match("/does-not-exist") AssertIsNothing result, "Router should return Nothing when no pattern matches" End Sub Sub Test_Router_SegmentCountMustMatch() Dim router Dim result Set router = New Router router.AddRoute "/greet/{name}", "Greet" Set result = router.Match("/greet/Ada/extra") AssertIsNothing result, "An extra path segment should not match a shorter pattern" End Sub Sub Test_Router_LiteralSegmentsMatchCaseInsensitively() Dim router Dim result Set router = New Router router.AddRoute "/greet/{name}", "Greet" Set result = router.Match("/GREET/Ada") AssertNotNothing result, "Literal segments should match regardless of case" AssertEquals "Ada", result.Item("Params").Item("name"), "Param value should preserve original case" End Sub Sub Test_Router_FirstRegisteredMatchWins() Dim router Dim result Set router = New Router router.AddRoute "/greet/world", "SpecificGreet" router.AddRoute "/greet/{name}", "Greet" Set result = router.Match("/greet/world") AssertEquals "SpecificGreet", result.Item("ControllerName"), "More specific route registered first should win" End Sub Sub Test_Router_CapturesMultipleNamedParams() Dim router Dim result Set router = New Router router.AddRoute "/greet/{name}/{id}", "Greet" Set result = router.Match("/greet/Ada/42") AssertNotNothing result, "Router should match a pattern with two {param} segments" AssertEquals "Ada", result.Item("Params").Item("name"), "First captured param value" AssertEquals "42", result.Item("Params").Item("id"), "Second captured param value" End Sub Sub Test_Router_SameControllerDifferentSegmentCountsCoexist() Dim router Dim shortResult Dim longResult Set router = New Router router.AddRoute "/greet/{name}", "Greet" router.AddRoute "/greet/{name}/{id}", "Greet" Set shortResult = router.Match("/greet/Ada") Set longResult = router.Match("/greet/Ada/42") AssertFalse shortResult.Item("Params").Exists("id"), "The one-segment route should not capture an 'id'" AssertTrue longResult.Item("Params").Exists("id"), "The two-segment route should capture an 'id'" AssertEquals "42", longResult.Item("Params").Item("id"), "The two-segment route's 'id' value" End Sub RunTest "Router matches the exact root route", "Test_Router_MatchesExactRoot" RunTest "Router captures a named {param} segment", "Test_Router_CapturesNamedParam" RunTest "Router returns Nothing when nothing matches", "Test_Router_ReturnsNothingWhenNoRouteMatches" RunTest "Router requires matching segment counts", "Test_Router_SegmentCountMustMatch" RunTest "Router matches literal segments case-insensitively", "Test_Router_LiteralSegmentsMatchCaseInsensitively" RunTest "Router: first registered match wins", "Test_Router_FirstRegisteredMatchWins" RunTest "Router captures multiple {param} segments in one pattern", "Test_Router_CapturesMultipleNamedParams" RunTest "Router: routes with different segment counts to the same controller coexist", "Test_Router_SameControllerDifferentSegmentCountsCoexist"