|
- 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"
|