From fac89a5692eaede7e153686dc2bf06902994941c Mon Sep 17 00:00:00 2001 From: Atsushi Eno Date: Fri, 17 Oct 2008 14:59:28 +0000 Subject: [PATCH] 2008-10-17 Atsushi Enomoto * UrlPattern.cs : fixed pattern match for such string that has suffix. (DynamicData uses it.) * RouteTest.cs : added test for DynamicData default pattern. svn path=/trunk/mcs/; revision=116234 --- .../System.Web.Routing/System.Web.Routing/ChangeLog | 5 +++++ .../System.Web.Routing/UrlPattern.cs | 10 ++++++---- .../Test/System.Web.Routing/ChangeLog | 4 ++++ .../Test/System.Web.Routing/RouteTest.cs | 10 ++++++++++ 4 files changed, 25 insertions(+), 4 deletions(-) diff --git a/mcs/class/System.Web.Routing/System.Web.Routing/ChangeLog b/mcs/class/System.Web.Routing/System.Web.Routing/ChangeLog index 4cda19e903b..8e8cc1a47ec 100644 --- a/mcs/class/System.Web.Routing/System.Web.Routing/ChangeLog +++ b/mcs/class/System.Web.Routing/System.Web.Routing/ChangeLog @@ -1,3 +1,8 @@ +2008-10-17 Atsushi Enomoto + + * UrlPattern.cs : fixed pattern match for such string that has + suffix. (DynamicData uses it.) + 2008-10-16 Atsushi Enomoto * RouteValueDictionary.cs : object argument is actually for diff --git a/mcs/class/System.Web.Routing/System.Web.Routing/UrlPattern.cs b/mcs/class/System.Web.Routing/System.Web.Routing/UrlPattern.cs index dc2402997ce..f7ab679842d 100644 --- a/mcs/class/System.Web.Routing/System.Web.Routing/UrlPattern.cs +++ b/mcs/class/System.Web.Routing/System.Web.Routing/UrlPattern.cs @@ -136,12 +136,14 @@ namespace System.Web.Routing int end = t.IndexOf ('}', start + 1); int next = t.IndexOf ('{', end + 1); string key = t.Substring (start + 1, end - start - 1); + string nextToken = next < 0 ? t.Substring (end + 1) : t.Substring (end + 1, next - end - 1); + int vnext = nextToken.Length > 0 ? v.IndexOf (nextToken, vfrom + 1, StringComparison.Ordinal) : -1; + if (next < 0) { - tmp.Add (key, vfrom == 0 ? v : v.Substring (vfrom)); - vfrom = v.Length; + var vs = vnext < 0 ? v.Substring (vfrom) : v.Substring (vfrom, vnext - vfrom); + tmp.Add (key, vs); + vfrom = vs.Length; } else { - string nextToken = t.Substring (end + 1, next - end - 1); - int vnext = v.IndexOf (nextToken, vfrom + 1, StringComparison.Ordinal); if (vnext < 0) return null; // mismatch tmp.Add (key, v.Substring (vfrom, vnext - vfrom)); diff --git a/mcs/class/System.Web.Routing/Test/System.Web.Routing/ChangeLog b/mcs/class/System.Web.Routing/Test/System.Web.Routing/ChangeLog index a0ca7e993f6..0cebbaa11dc 100644 --- a/mcs/class/System.Web.Routing/Test/System.Web.Routing/ChangeLog +++ b/mcs/class/System.Web.Routing/Test/System.Web.Routing/ChangeLog @@ -1,3 +1,7 @@ +2008-10-17 Atsushi Enomoto + + * RouteTest.cs : added test for DynamicData default pattern. + 2008-10-16 Atsushi Enomoto * RouteValueDictionaryTest.cs : new test. diff --git a/mcs/class/System.Web.Routing/Test/System.Web.Routing/RouteTest.cs b/mcs/class/System.Web.Routing/Test/System.Web.Routing/RouteTest.cs index 7e5f749b97e..b309f97e9ba 100644 --- a/mcs/class/System.Web.Routing/Test/System.Web.Routing/RouteTest.cs +++ b/mcs/class/System.Web.Routing/Test/System.Web.Routing/RouteTest.cs @@ -247,6 +247,16 @@ namespace MonoTests.System.Web.Routing Assert.AreEqual (2, rd.Values.Count, "#7-3"); } + [Test] + public void GetRouteData6 () + { + var r = new Route ("{table}/{action}.aspx", null); + var rd = r.GetRouteData (new HttpContextStub ("~/FooTable/List.aspx", String.Empty)); + Assert.IsNotNull (rd, "#1"); + Assert.AreEqual ("FooTable", rd.Values ["table"], "#2"); + Assert.AreEqual ("List", rd.Values ["action"], "#3"); + } + [Test] [ExpectedException (typeof (ArgumentNullException))] public void GetVirtualPathNullContext () -- 2.25.1