User: johnsimons
Date: 2010/01/14 01:18 PM
Modified:
/MonoRail/trunk/lib/
Newtonsoft.Json.XML, Newtonsoft.Json.dll
/MonoRail/trunk/src/
Changes.txt
/MonoRail/trunk/src/Castle.MonoRail.Framework.Tests/
UrlPartsBuilderTestCase.cs
/MonoRail/trunk/src/Castle.MonoRail.Framework/Services/
DefaultUrlBuilder.cs, UrlParts.cs
/MonoRail/trunk/src/Castle.MonoRail.Framework/ViewComponents/
AbstractPaginationViewComponent.cs
Log:
- Applied Michael Davis patch fixing MR-ISSUE-494
"AbstractPaginationViewComponent with PreserveQueryString = true
double-encodes query string parameters"
- Updated Newtonsoft.Json.dll to v3.5.0.0
File Changes:
Directory: /MonoRail/trunk/src/Castle.MonoRail.Framework.Tests/
===============================================================
File [modified]: UrlPartsBuilderTestCase.cs
Delta lines: +5 -0
===================================================================
--- MonoRail/trunk/src/Changes.txt 2010-01-14 17:27:00 UTC (rev 6667)
+++ MonoRail/trunk/src/Changes.txt 2010-01-14 20:18:34 UTC (rev 6668)
@@ -1,5 +1,10 @@
Unreleased
==========
+- Applied Michael Davis patch fixing MR-ISSUE-494
+ "AbstractPaginationViewComponent with PreserveQueryString = true
double-encodes query string parameters"
+
+- Updated Newtonsoft.Json.dll to v3.5.0.0
+
- Removed HtmlHelper and ValidationHelper
Directory: /MonoRail/trunk/src/Castle.MonoRail.Framework/Services/
==================================================================
File [modified]: DefaultUrlBuilder.cs
Delta lines: +18 -14
===================================================================
--- MonoRail/trunk/src/Castle.MonoRail.Framework/Services/UrlParts.cs
2010-01-14 17:27:00 UTC (rev 6667)
+++ MonoRail/trunk/src/Castle.MonoRail.Framework/Services/UrlParts.cs
2010-01-14 20:18:34 UTC (rev 6668)
@@ -26,6 +26,7 @@
public class UrlParts
{
private readonly StringBuilder url;
+ private readonly IServerUtility serverUtility;
private PathInfoBuilder pathInfoBuilder;
private PathInfoDictBuilder pathInfoDictBuilder;
private bool nextPathBelongsToPathInfo;
@@ -35,10 +36,12 @@
/// <summary>
/// Initializes a new instance of the <see cref="UrlParts"/>
class.
/// </summary>
+ /// <param name="serverUtility">The server utility.</param>
/// <param name="pathPieces">The path pieces.</param>
- public UrlParts(params string[] pathPieces)
+ public UrlParts(IServerUtility serverUtility, params string[]
pathPieces)
{
url = new StringBuilder();
+ this.serverUtility = serverUtility;
AppendPaths(pathPieces);
}
@@ -46,9 +49,10 @@
/// <summary>
/// Pendent
/// </summary>
+ /// <param name="serverUtility">The server utility.</param>
/// <param name="url">The URL.</param>
/// <returns></returns>
- public static UrlParts Parse(string url)
+ public static UrlParts Parse(IServerUtility serverUtility,
string url)
{
if (url == null)
{
@@ -59,11 +63,11 @@
if (uri.IsAbsoluteUri)
{
- return CreateForAbsolutePath(uri);
+ return CreateForAbsolutePath(serverUtility,
uri);
}
else
{
- return CreateForRelativePath(url);
+ return CreateForRelativePath(serverUtility,
url);
}
}
@@ -140,7 +144,7 @@
{
if (queryStringDict != null)
{
- queryString =
CommonUtils.BuildQueryString(queryStringDict);
+ queryString =
CommonUtils.BuildQueryString(serverUtility, queryStringDict, false);
}
return queryString;
@@ -192,7 +196,7 @@
/// Builds the path.
/// </summary>
/// <returns></returns>
- public string BuildPathForLink(IServerUtility serverUtiliy)
+ public string BuildPathForLink()
{
StringBuilder sb = new StringBuilder(url.ToString());
@@ -201,12 +205,12 @@
if (queryStringDict != null && queryStringDict.Count !=
0)
{
sb.Append('?');
-
sb.Append(CommonUtils.BuildQueryString(serverUtiliy, QueryString, true));
+
sb.Append(CommonUtils.BuildQueryString(serverUtility, QueryString, true));
}
else if (!string.IsNullOrEmpty(queryString))
{
sb.Append('?');
- sb.Append(serverUtiliy.HtmlEncode(queryString));
+
sb.Append(serverUtility.HtmlEncode(queryString));
}
return sb.ToString();
@@ -305,7 +309,7 @@
}
}
- private static UrlParts CreateForRelativePath(string url)
+ private static UrlParts CreateForRelativePath(IServerUtility
serverUtility, string url)
{
string path = url;
string qs = null;
@@ -332,18 +336,18 @@
}
}
- UrlParts parts = new UrlParts(path);
+ UrlParts parts = new UrlParts(serverUtility, path);
parts.SetQueryString(qs);
parts.PathInfoDict.Parse(pathInfo);
return parts;
}
- private static UrlParts CreateForAbsolutePath(Uri uri)
+ private static UrlParts CreateForAbsolutePath(IServerUtility
serverUtility, Uri uri)
{
string host = uri.AbsoluteUri.Substring(0,
uri.AbsoluteUri.Length - uri.PathAndQuery.Length);
- UrlParts parts = new UrlParts(host);
+ UrlParts parts = new UrlParts(serverUtility, host);
foreach (string segment in uri.Segments)
{
@@ -356,7 +360,7 @@
return parts;
}
- private static NameValueCollection
CreateQueryStringNameValueCollection(string queryString)
+ private NameValueCollection
CreateQueryStringNameValueCollection(string queryString)
{
NameValueCollection coll = new
NameValueCollection(StringComparer.InvariantCultureIgnoreCase);
@@ -371,7 +375,7 @@
if (pairs.Length == 2)
{
- coll.Add(pairs[0], pairs[1]);
+ coll.Add(pairs[0],
serverUtility.UrlDecode(pairs[1]));
}
else if (pairs.Length == 1)
File [modified]: UrlParts.cs
Delta lines: +4 -4
===================================================================
---
MonoRail/trunk/src/Castle.MonoRail.Framework/ViewComponents/AbstractPaginationViewComponent.cs
2010-01-14 17:27:00 UTC (rev 6667)
+++
MonoRail/trunk/src/Castle.MonoRail.Framework/ViewComponents/AbstractPaginationViewComponent.cs
2010-01-14 20:18:34 UTC (rev 6668)
@@ -214,7 +214,7 @@
urlParts.QueryString[pageParamName] =
pageIndex.ToString();
}
- return urlParts.BuildPathForLink(EngineContext.Server);
+ return urlParts.BuildPathForLink();
}
private void CreateUrlPartBuilder()
@@ -232,17 +232,17 @@
{
if (urlParam != null)
{
- urlParts =
UrlParts.Parse(urlParam.ToString());
+ urlParts =
UrlParts.Parse(EngineContext.Server, urlParam.ToString());
}
else
{
if (!PreserveQueryString)
{
- urlParts = new
UrlParts(EngineContext.Request.FilePath);
+ urlParts = new
UrlParts(EngineContext.Server, EngineContext.Request.FilePath);
}
else
{
- urlParts =
UrlParts.Parse(EngineContext.Request.Url);
+ urlParts =
UrlParts.Parse(EngineContext.Server, EngineContext.Request.Url);
}
}
Directory: /MonoRail/trunk/src/Castle.MonoRail.Framework/ViewComponents/
========================================================================
File [modified]: AbstractPaginationViewComponent.cs
Delta lines: +48 -29
===================================================================
---
MonoRail/trunk/src/Castle.MonoRail.Framework.Tests/UrlPartsBuilderTestCase.cs
2010-01-14 17:27:00 UTC (rev 6667)
+++
MonoRail/trunk/src/Castle.MonoRail.Framework.Tests/UrlPartsBuilderTestCase.cs
2010-01-14 20:18:34 UTC (rev 6668)
@@ -16,14 +16,23 @@
{
using Castle.MonoRail.Framework.Services;
using NUnit.Framework;
+ using Test;
[TestFixture]
public class UrlPartsBuilderTestCase
{
+ private StubServerUtility serverUtil;
+
+ [SetUp]
+ public void Init()
+ {
+ serverUtil = new StubServerUtility();
+ }
+
[Test]
public void CanBuildPathUrls()
{
- UrlParts builder = new UrlParts("controller", "action");
+ UrlParts builder = new UrlParts(serverUtil,
"controller", "action");
Assert.AreEqual("controller/action",
builder.BuildPath());
}
@@ -31,7 +40,7 @@
[Test]
public void BuildPathWithPathInfo()
{
- UrlParts builder = new UrlParts("controller", "action");
+ UrlParts builder = new UrlParts(serverUtil,
"controller", "action");
builder.PathInfo.Add("State").Add("FL");
Assert.AreEqual("controller/action/State/FL",
builder.BuildPath());
@@ -40,7 +49,7 @@
[Test]
public void BuildPathWithPathInfoDictionary()
{
- UrlParts builder = new UrlParts("controller", "action");
+ UrlParts builder = new UrlParts(serverUtil,
"controller", "action");
builder.PathInfoDict["State"] ="FL";
Assert.AreEqual("controller/action/State/FL",
builder.BuildPath());
@@ -49,7 +58,7 @@
[Test]
public void BuildPathWithPathInfoAndQueryString()
{
- UrlParts builder = new UrlParts("controller", "action");
+ UrlParts builder = new UrlParts(serverUtil,
"controller", "action");
builder.PathInfoDict["State"] = "FL";
builder.SetQueryString("type=Residential");
@@ -59,7 +68,7 @@
[Test]
public void PathInfoDictParse_AcceptsNull()
{
- UrlParts builder = new UrlParts("controller", "action");
+ UrlParts builder = new UrlParts(serverUtil,
"controller", "action");
builder.PathInfoDict.Parse(null);
Assert.AreEqual("controller/action",
builder.BuildPath());
@@ -68,7 +77,7 @@
[Test]
public void PathInfoDictParse_AcceptsEmptyString()
{
- UrlParts builder = new UrlParts("controller", "action");
+ UrlParts builder = new UrlParts(serverUtil,
"controller", "action");
builder.PathInfoDict.Parse("");
Assert.AreEqual("controller/action",
builder.BuildPath());
@@ -77,7 +86,7 @@
[Test]
public void PathInfoDictParse_CanHandleMissingSlash()
{
- UrlParts builder = new UrlParts("controller", "action");
+ UrlParts builder = new UrlParts(serverUtil,
"controller", "action");
builder.PathInfoDict.Parse("State/Fl");
Assert.AreEqual("controller/action/State/Fl",
builder.BuildPath());
@@ -86,7 +95,7 @@
[Test]
public void PathInfoDictParse_CanHandleMultipleEntries()
{
- UrlParts builder = new UrlParts("controller", "action");
+ UrlParts builder = new UrlParts(serverUtil,
"controller", "action");
builder.PathInfoDict.Parse("/State/FL/Type/Home");
Assert.AreEqual("controller/action/State/FL/Type/Home",
builder.BuildPath());
@@ -95,7 +104,7 @@
[Test]
public void PathInfoDictParse_CanHandleOddNumberOfEntries()
{
- UrlParts builder = new UrlParts("controller", "action");
+ UrlParts builder = new UrlParts(serverUtil,
"controller", "action");
builder.PathInfoDict.Parse("/State/FL/Type/");
Assert.AreEqual("controller/action/State/FL/Type",
builder.BuildPath());
@@ -104,7 +113,7 @@
[Test]
public void PathInfoDictParse_CanHandleOddNumberOfEntries2()
{
- UrlParts builder = new UrlParts("controller", "action");
+ UrlParts builder = new UrlParts(serverUtil,
"controller", "action");
builder.PathInfoDict.Parse("/State/FL/Type");
Assert.AreEqual("controller/action/State/FL/Type",
builder.BuildPath());
@@ -113,7 +122,7 @@
[Test]
public void ParseCanHandleAbsolutePaths()
{
- UrlParts builder =
UrlParts.Parse("http://localhost/home/index.ext");
+ UrlParts builder = UrlParts.Parse(serverUtil,
"http://localhost/home/index.ext");
Assert.AreEqual(0, builder.PathInfoDict.Count);
@@ -123,7 +132,7 @@
[Test]
public void ParseCanHandleAbsolutePathsWithQueryString()
{
- UrlParts builder =
UrlParts.Parse("http://localhost/home/index.ext?id=1&type=home");
+ UrlParts builder = UrlParts.Parse(serverUtil,
"http://localhost/home/index.ext?id=1&type=home");
Assert.AreEqual(0, builder.PathInfoDict.Count);
Assert.AreEqual("id=1&type=home",
builder.QueryStringAsString());
@@ -134,7 +143,7 @@
[Test]
public void ParseCanHandleAbsolutePathsWithPathInfo()
{
- UrlParts builder =
UrlParts.Parse("http://localhost/home/index.ext/state/fl/");
+ UrlParts builder = UrlParts.Parse(serverUtil,
"http://localhost/home/index.ext/state/fl/");
Assert.AreEqual(1, builder.PathInfoDict.Count);
Assert.AreEqual("fl", builder.PathInfoDict["state"]);
@@ -146,7 +155,7 @@
[Test]
public void ParseCanHandleRelativePaths()
{
- UrlParts builder = UrlParts.Parse("home/index.ext");
+ UrlParts builder = UrlParts.Parse(serverUtil,
"home/index.ext");
Assert.AreEqual("home/index.ext", builder.BuildPath());
}
@@ -154,7 +163,7 @@
[Test]
public void ParseCanHandleRelativePathsWithEmptyPathInfo()
{
- UrlParts builder = UrlParts.Parse("home/index.ext/");
+ UrlParts builder = UrlParts.Parse(serverUtil,
"home/index.ext/");
Assert.AreEqual("home/index.ext", builder.BuildPath());
}
@@ -162,7 +171,7 @@
[Test]
public void ParseCanHandleRelativePathsWithPathInfo()
{
- UrlParts builder =
UrlParts.Parse("home/index.ext/state/fl");
+ UrlParts builder = UrlParts.Parse(serverUtil,
"home/index.ext/state/fl");
Assert.AreEqual(1, builder.PathInfoDict.Count);
Assert.AreEqual("fl", builder.PathInfoDict["state"]);
@@ -174,7 +183,7 @@
[Test]
public void ParseCanHandleRelativePathsWithPathInfo2()
{
- UrlParts builder =
UrlParts.Parse("home/index.ext/state/fl/");
+ UrlParts builder = UrlParts.Parse(serverUtil,
"home/index.ext/state/fl/");
Assert.AreEqual(1, builder.PathInfoDict.Count);
Assert.AreEqual("fl", builder.PathInfoDict["state"]);
@@ -186,7 +195,7 @@
[Test]
public void ParseCanHandleRelativePathsWithQueryString()
{
- UrlParts builder =
UrlParts.Parse("home/index.ext?id=1&name=john");
+ UrlParts builder = UrlParts.Parse(serverUtil,
"home/index.ext?id=1&name=john");
Assert.AreEqual(0, builder.PathInfoDict.Count);
Assert.AreEqual("id=1&name=john",
builder.QueryStringAsString());
@@ -197,7 +206,7 @@
[Test]
public void
ParseCanHandleRelativePathsWithEmptyPathInfoAndQueryString()
{
- UrlParts builder =
UrlParts.Parse("home/index.ext/?id=1&name=john");
+ UrlParts builder = UrlParts.Parse(serverUtil,
"home/index.ext/?id=1&name=john");
Assert.AreEqual(0, builder.PathInfoDict.Count);
Assert.AreEqual("id=1&name=john",
builder.QueryStringAsString());
@@ -208,7 +217,7 @@
[Test]
public void
ParseCanHandleRelativePathsWithPathInfoAndQueryString()
{
- UrlParts builder =
UrlParts.Parse("home/index.ext/state/fl/?id=1&name=john");
+ UrlParts builder = UrlParts.Parse(serverUtil,
"home/index.ext/state/fl/?id=1&name=john");
Assert.AreEqual(1, builder.PathInfoDict.Count);
Assert.AreEqual("fl", builder.PathInfoDict["state"]);
@@ -220,7 +229,7 @@
[Test]
public void ParseCanHandleRelativePathsWithoutExtension()
{
- UrlParts builder = UrlParts.Parse("home/index/state");
+ UrlParts builder = UrlParts.Parse(serverUtil,
"home/index/state");
Assert.AreEqual("home/index/state",
builder.BuildPath());
}
@@ -228,7 +237,7 @@
[Test]
public void
ParseCanHandleRelativePathsWithoutExtensionAndQueryString()
{
- UrlParts builder =
UrlParts.Parse("home/index/state?id=1");
+ UrlParts builder = UrlParts.Parse(serverUtil,
"home/index/state?id=1");
Assert.AreEqual(0, builder.PathInfoDict.Count);
Assert.AreEqual("id=1", builder.QueryStringAsString());
@@ -240,7 +249,7 @@
[Test]
public void
ParseCanHandleRelativePathsWithoutExtensionAndQueryStringContainingDot()
{
- UrlParts builder =
UrlParts.Parse("home/index/state?file=index.pdf");
+ UrlParts builder = UrlParts.Parse(serverUtil,
"home/index/state?file=index.pdf");
Assert.AreEqual(0, builder.PathInfoDict.Count);
Assert.AreEqual("file=index.pdf",
builder.QueryStringAsString());
@@ -250,9 +259,19 @@
}
[Test]
+ public void ParseCanHandleEscapedQueryStringParameters()
+ {
+ UrlParts builder = UrlParts.Parse(serverUtil,
"home/index.ext?date=01%2f01%2f2001");
+
+ Assert.AreEqual("01/01/2001",
builder.QueryString["date"]);
+
+ Assert.AreEqual("home/index.ext?date=01%2f01%2f2001",
builder.BuildPath());
+ }
+
+ [Test]
public void QueryStringParsesStringCorrectly()
{
- UrlParts builder = new UrlParts("home/index.ext");
+ UrlParts builder = new UrlParts(serverUtil,
"home/index.ext");
builder.QueryString["state"] = "FL";
@@ -262,7 +281,7 @@
[Test]
public void QueryStringIsExtractedAndParsed()
{
- UrlParts builder = new UrlParts("home/index.ext");
+ UrlParts builder = new UrlParts(serverUtil,
"home/index.ext");
builder.SetQueryString("City=SP&State=MD");
@@ -274,7 +293,7 @@
[Test]
public void QueryStringCanHandleDuplicatedEntries()
{
- UrlParts builder = new UrlParts("home/index.ext");
+ UrlParts builder = new UrlParts(serverUtil,
"home/index.ext");
builder.SetQueryString("City=SP&State=MD&State=NY");
@@ -284,7 +303,7 @@
[Test]
public void QueryStringCanReplaceEntries()
{
- UrlParts builder = new UrlParts("home/index.ext");
+ UrlParts builder = new UrlParts(serverUtil,
"home/index.ext");
builder.QueryString["page"] = "1";
@@ -302,7 +321,7 @@
[Test]
public void InsertFrontPath_ShouldKeepExistingPath()
{
- UrlParts builder = new UrlParts("controller", "action");
+ UrlParts builder = new UrlParts(serverUtil,
"controller", "action");
builder.PathInfo.Add("State").Add("FL");
builder.InsertFrontPath("http://something");
@@ -313,7 +332,7 @@
[Test]
public void InsertFrontPath_ShouldHandleTwoPathsWithSlash()
{
- UrlParts builder = new UrlParts();
+ UrlParts builder = new UrlParts(serverUtil);
builder.AppendPath("/something");
Directory: /MonoRail/trunk/lib/
===============================
File [modified]: Newtonsoft.Json.XML
Delta lines: +3 -3
===================================================================
--- MonoRail/trunk/src/Castle.MonoRail.Framework/Services/DefaultUrlBuilder.cs
2010-01-14 17:27:00 UTC (rev 6667)
+++ MonoRail/trunk/src/Castle.MonoRail.Framework/Services/DefaultUrlBuilder.cs
2010-01-14 20:18:34 UTC (rev 6668)
@@ -184,7 +184,7 @@
if (encodeForLink)
{
- return url.BuildPathForLink(serverUtil);
+ return url.BuildPathForLink();
}
return url.BuildPath();
@@ -279,7 +279,7 @@
if (parts == null)
{
- parts = new UrlParts(path, controller, action +
(useExtensions ? SafeExt(current.Extension) : ""));
+ parts = new UrlParts(serverUtil, path,
controller, action + (useExtensions ? SafeExt(current.Extension) : ""));
AppendPathInfo(parts, parameters);
}
else
@@ -348,7 +348,7 @@
if (url != null)
{
- return new UrlParts(url);
+ return new UrlParts(serverUtil, url);
}
}
File [modified]: Newtonsoft.Json.dll
Delta lines: None
None
Directory: /MonoRail/trunk/src/
===============================
File [modified]: Changes.txt
Delta lines: +0 -0
===================================================================
--
You received this message because you are subscribed to the Google Groups
"Castle Project Commits" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/castle-project-commits?hl=en.