//
// DynamicDataRouteTest.cs
//
-// Author:
+// Authors:
// Atsushi Enomoto <atsushi@ximian.com>
+// Marek Habersack <mhabersack@novell.com>
//
-// Copyright (C) 2008 Novell Inc. http://novell.com
+// Copyright (C) 2008-2009 Novell Inc. http://novell.com
//
//
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Collections.Specialized;
+using System.ComponentModel.DataAnnotations;
+using System.Data.SqlClient;
+using System.Data.Linq;
+using System.Data.Linq.Mapping;
+using System.Globalization;
+using System.Linq;
+using System.Reflection;
+using System.Security.Permissions;
+using System.Security.Principal;
using System.Web;
+using System.Web.UI;
using System.Web.DynamicData;
+using System.Web.DynamicData.ModelProviders;
using System.Web.Routing;
+
using NUnit.Framework;
+using MonoTests.stand_alone.WebHarness;
+using MonoTests.SystemWeb.Framework;
+using MonoTests.Common;
+using MonoTests.ModelProviders;
+using MetaModel = System.Web.DynamicData.MetaModel;
+using MetaTable = System.Web.DynamicData.MetaTable;
namespace MonoTests.System.Web.DynamicData
{
[TestFixture]
public class DynamicDataRouteTest
{
+ [TestFixtureSetUp]
+ public void SetUp ()
+ {
+ var dynamicModelProvider = new DynamicDataContainerModelProvider <TestDataContext> ();
+ Utils.RegisterContext (dynamicModelProvider, new ContextConfiguration () { ScaffoldAllTables = true });
+ Utils.RegisterContext (typeof (MyDataContext3));
+ }
+
[Test]
public void ConstructorNull ()
{
Assert.IsNull (r.Table, "#3");
Assert.IsNull (r.ViewName, "#4");
Assert.IsNotNull (r.RouteHandler, "#5");
- Assert.IsNull (r.RouteHandler.Model, "#6");
+ Assert.IsNotNull (r.Model, "#6");
Assert.IsNull (r.RouteHandler.Model, "#7"); // irrelevant to route's MetaModel
}
[Test]
[ExpectedException (typeof (ArgumentNullException))]
[Category ("NotDotNet")] // .NET throws NRE. yuck.
+#if TARGET_DOTNET
+ [Ignore ("Throws a NREX on .NET...")]
+#endif
public void GetActionFromRouteDataNullArg ()
{
new DynamicDataRoute ("x").GetActionFromRouteData (null);
{
var r = new DynamicDataRoute ("x");
var rd = new RouteData ();
- rd.Values ["Action"] = "y";
+ rd.Values["Action"] = "y";
var a = r.GetActionFromRouteData (rd);
Assert.AreEqual ("y", a);
}
[Test]
[ExpectedException (typeof (ArgumentNullException))]
[Category ("NotDotNet")] // .NET throws NRE. yuck.
+#if TARGET_DOTNET
+ [Ignore ("Throws a NREX on .NET...")]
+#endif
public void GetTableFromRouteDataNullArg ()
{
new DynamicDataRoute ("x").GetTableFromRouteData (null);
var r = new DynamicDataRoute ("x");
r.Model = new MetaModel ();
var rd = new RouteData ();
- rd.Values ["Table"] = "y";
+ rd.Values["Table"] = "y";
r.GetTableFromRouteData (rd); // no such table
}
[Test]
- [Category ("NotWorking")]
public void GetTableFromRouteData3 ()
{
var r = new DynamicDataRoute ("x");
- r.Model.RegisterContext (typeof (MyDataContext3));
var rd = new RouteData ();
- rd.Values ["Table"] = "FooTable";
+ rd.Values["Table"] = "FooTable";
var t = r.GetTableFromRouteData (rd);
}
[Test]
- [Ignore ("it requires working HttpContext, and it's somehow not working on both mono and .net")]
public void GetRouteData ()
{
var r = new DynamicDataRoute ("{table}/{action}.aspx");
- HttpContext.Current = new HttpContext (new MyHttpWorkerRequest ());
- RouteData rd = r.GetRouteData (new HttpContextStub ("~/FooTable/List.aspx", String.Empty));
- Assert.IsNotNull (rd.RouteHandler, "#1");
+
+ // We need one which overloads CreateHandler
+ r.RouteHandler = new MyDynamicDataRouteHandler ();
+
+ var wrapper = new MyHttpContextWrapper ();
+ var request = wrapper.Request as MyHttpRequestWrapper;
+ request.SetProperty ("AppRelativeCurrentExecutionFilePath", "~/NoSuchTable/List.aspx");
+ request.SetProperty ("PathInfo", String.Empty);
+
+ // This must be non-null because DynamicData doesn't care to check whether the returned
+ // value is null or not...
+ request.SetProperty ("QueryString", new NameValueCollection ());
+
+ // It appears .NET checks whether the indicated table exists - if not, GetRouteData will return
+ // null (even though the Route class will find a match)
+ RouteData rd = r.GetRouteData (wrapper);
+ Assert.IsNull (rd, "#A1");
+
+ request.SetProperty ("AppRelativeCurrentExecutionFilePath", "~/BazTable/List.aspx");
+ rd = r.GetRouteData (wrapper);
+ Assert.IsNotNull (rd, "#B1");
+ }
+
+ [Test]
+ public void RouteHandler ()
+ {
+ var r = new DynamicDataRoute ("{table}/{action}.aspx");
+
+ Assert.IsNotNull (r.RouteHandler, "#A1");
+ Assert.AreEqual (typeof (DynamicDataRouteHandler), r.RouteHandler.GetType (), "#A1-1");
+
+ r.RouteHandler = null;
+ Assert.IsNull (r.RouteHandler, "#A2");
+ }
+
+ [Test]
+ public void BaseDefaultsModification_1 ()
+ {
+ MetaModel m = MetaModel.Default;
+ var req = new FakeHttpWorkerRequest ();
+ var ctx = new HttpContext (req);
+ HttpContext.Current = ctx;
+
+ RouteCollection routes = RouteTable.Routes;
+ routes.Clear ();
+
+ var ddr = new DynamicDataRoute ("{table}/{action}.aspx") {
+ Action = PageAction.Details,
+ Model = m,
+ RouteHandler = new MyDynamicDataRouteHandler ()
+ };
+
+ routes.Add (ddr);
+
+ Assert.IsNotNull (ddr, "#A1");
+ Assert.IsNull (ddr.Defaults, "#A1-1");
+ var rd = new RouteData ();
+ var hc = new HttpContextWrapper (HttpContext.Current);
+
+ ddr.GetVirtualPath (new RequestContext (hc, rd), null);
+ Assert.IsNotNull (ddr.Defaults, "#B1");
+ Assert.AreEqual (1, ddr.Defaults.Count, "#B1-1");
+ Assert.AreEqual (PageAction.Details, ddr.Defaults["Action"], "#B1-2");
+
+ ddr.Action = "MyAction";
+ ddr.GetVirtualPath (new RequestContext (hc, rd), null);
+ Assert.IsNotNull (ddr.Defaults, "#C1");
+ Assert.AreEqual (1, ddr.Defaults.Count, "#C1-1");
+ Assert.AreEqual (PageAction.Details, ddr.Defaults["Action"], "#B1-2");
+ }
+
+ [Test]
+ public void BaseDefaultsModification_2 ()
+ {
+ MetaModel m = MetaModel.Default;
+ var req = new FakeHttpWorkerRequest ();
+ var ctx = new HttpContext (req);
+ HttpContext.Current = ctx;
+
+ RouteCollection routes = RouteTable.Routes;
+ routes.Clear ();
+
+ var ddr = new DynamicDataRoute ("{table}/{action}.aspx") {
+ Table = "BazTable",
+ Model = m,
+ RouteHandler = new MyDynamicDataRouteHandler ()
+ };
+
+ routes.Add (ddr);
+
+ Assert.IsNotNull (ddr, "#A1");
+ Assert.IsNull (ddr.Defaults, "#A1-1");
+ var rd = new RouteData ();
+ var hc = new HttpContextWrapper (HttpContext.Current);
+
+ ddr.GetVirtualPath (new RequestContext (hc, rd), null);
+ Assert.IsNotNull (ddr.Defaults, "#B1");
+ Assert.AreEqual (1, ddr.Defaults.Count, "#B1-1");
+ Assert.AreEqual ("BazTable", ddr.Defaults["Table"], "#B1-2");
+
+ ddr.Table = "AnotherTable";
+ ddr.GetVirtualPath (new RequestContext (hc, rd), null);
+ Assert.IsNotNull (ddr.Defaults, "#C1");
+ Assert.AreEqual (1, ddr.Defaults.Count, "#C1-1");
+ Assert.AreEqual ("BazTable", ddr.Defaults["Table"], "#C1-2");
+ }
+
+ [Test]
+ public void BaseDefaultsModification_3 ()
+ {
+ MetaModel m = MetaModel.Default;
+ var req = new FakeHttpWorkerRequest ();
+ var ctx = new HttpContext (req);
+ HttpContext.Current = ctx;
+
+ RouteCollection routes = RouteTable.Routes;
+ routes.Clear ();
+
+ var ddr = new DynamicDataRoute ("{table}/{action}.aspx") {
+ Table = "MyTable",
+ Model = m,
+ RouteHandler = new MyDynamicDataRouteHandler ()
+ };
+ routes.Add (ddr);
+ var rd = new RouteData ();
+ var hc = new HttpContextWrapper (HttpContext.Current);
+
+ AssertExtensions.Throws <ArgumentException> (() => {
+ ddr.GetVirtualPath (new RequestContext (hc, rd), null);
+ }, "#A1");
+ }
+
+ [Test]
+ public void BaseDefaultsModification_4 ()
+ {
+ MetaModel m = MetaModel.Default;
+ var req = new FakeHttpWorkerRequest ();
+ var ctx = new HttpContext (req);
+ HttpContext.Current = ctx;
+
+ RouteCollection routes = RouteTable.Routes;
+ routes.Clear ();
+
+ var ddr = new DynamicDataRoute ("{table}/{action}.aspx") {
+ Model = m,
+ RouteHandler = new MyDynamicDataRouteHandler ()
+ };
+ routes.Add (ddr);
+ var rd = new RouteData ();
+ var hc = new HttpContextWrapper (HttpContext.Current);
+
+ Assert.IsNull (ddr.Defaults, "#A1");
+ ddr.GetVirtualPath (new RequestContext (hc, rd), null);
+ Assert.IsNull (ddr.Defaults, "#A2");
+ }
+
+ [Test]
+ public void BaseDefaultsModification_5 ()
+ {
+ MetaModel m = MetaModel.Default;
+ var req = new FakeHttpWorkerRequest ();
+ var ctx = new HttpContext (req);
+ HttpContext.Current = ctx;
+
+ RouteCollection routes = RouteTable.Routes;
+ routes.Clear ();
+
+ var ddr = new DynamicDataRoute ("{table}/{action}.aspx") {
+ Action = null,
+ Model = m,
+ RouteHandler = new MyDynamicDataRouteHandler ()
+ };
+
+ routes.Add (ddr);
+
+ Assert.IsNotNull (ddr, "#A1");
+ Assert.IsNull (ddr.Defaults, "#A1-1");
+ var rd = new RouteData ();
+ var hc = new HttpContextWrapper (HttpContext.Current);
+
+ ddr.GetVirtualPath (new RequestContext (hc, rd), null);
+ Assert.IsNull (ddr.Defaults, "#B1");
+
+ ddr.Action = "MyAction";
+ ddr.GetVirtualPath (new RequestContext (hc, rd), null);
+ Assert.IsNull (ddr.Defaults, "#C1");
+ }
+
+ [Test]
+ public void BaseDefaultsModification_6 ()
+ {
+ MetaModel m = MetaModel.Default;
+ var req = new FakeHttpWorkerRequest ();
+ var ctx = new HttpContext (req);
+ HttpContext.Current = ctx;
+
+ RouteCollection routes = RouteTable.Routes;
+ routes.Clear ();
+
+ var ddr = new DynamicDataRoute ("{table}/{action}.aspx") {
+ Action = String.Empty,
+ Model = m,
+ RouteHandler = new MyDynamicDataRouteHandler ()
+ };
+
+ routes.Add (ddr);
+
+ Assert.IsNotNull (ddr, "#A1");
+ Assert.IsNull (ddr.Defaults, "#A1-1");
+ var rd = new RouteData ();
+ var hc = new HttpContextWrapper (HttpContext.Current);
+
+ ddr.GetVirtualPath (new RequestContext (hc, rd), null);
+ Assert.IsNotNull (ddr.Defaults, "#B1");
+ Assert.AreEqual (1, ddr.Defaults.Count, "#B1-1");
+ Assert.AreEqual (String.Empty, ddr.Defaults["Action"], "#B1-2");
+
+ ddr.Action = "MyAction";
+ ddr.GetVirtualPath (new RequestContext (hc, rd), null);
+ Assert.IsNotNull (ddr.Defaults, "#C1");
+ Assert.AreEqual (1, ddr.Defaults.Count, "#C1-1");
+ Assert.AreEqual (String.Empty, ddr.Defaults["Action"], "#B1-2");
+ }
+
+ [Test]
+ public void BaseDefaultsModification_7 ()
+ {
+ MetaModel m = MetaModel.Default;
+ var req = new FakeHttpWorkerRequest ();
+ var ctx = new HttpContext (req);
+ HttpContext.Current = ctx;
+
+ RouteCollection routes = RouteTable.Routes;
+ routes.Clear ();
+
+ var ddr = new DynamicDataRoute ("{table}/{action}.aspx") {
+ Table = null,
+ Model = m,
+ RouteHandler = new MyDynamicDataRouteHandler ()
+ };
+
+ routes.Add (ddr);
+
+ Assert.IsNotNull (ddr, "#A1");
+ Assert.IsNull (ddr.Defaults, "#A1-1");
+ var rd = new RouteData ();
+ var hc = new HttpContextWrapper (HttpContext.Current);
+
+ ddr.GetVirtualPath (new RequestContext (hc, rd), null);
+ Assert.IsNull (ddr.Defaults, "#B1");
+ }
+
+ [Test]
+ public void BaseDefaultsModification_8 ()
+ {
+ MetaModel m = MetaModel.Default;
+ var req = new FakeHttpWorkerRequest ();
+ var ctx = new HttpContext (req);
+ HttpContext.Current = ctx;
+
+ RouteCollection routes = RouteTable.Routes;
+ routes.Clear ();
+
+ var ddr = new DynamicDataRoute ("{table}/{action}.aspx") {
+ Table = String.Empty,
+ Model = m,
+ RouteHandler = new MyDynamicDataRouteHandler ()
+ };
+
+ routes.Add (ddr);
+ var rd = new RouteData ();
+ var hc = new HttpContextWrapper (HttpContext.Current);
+
+ AssertExtensions.Throws<ArgumentException> (() => {
+ ddr.GetVirtualPath (new RequestContext (hc, rd), null);
+ }, "#A1");
+ }
+
+ [Test]
+ public void BaseDefaultsModification_9 ()
+ {
+ MetaModel m = MetaModel.Default;
+ var req = new FakeHttpWorkerRequest ();
+ var ctx = new HttpContext (req);
+ HttpContext.Current = ctx;
+
+ RouteCollection routes = RouteTable.Routes;
+ routes.Clear ();
+
+ var ddr = new DynamicDataRoute ("{table}/{action}.aspx") {
+ Defaults = new RouteValueDictionary () {
+ {"Action", "InitialAction"}
+ },
+ Action = PageAction.Details,
+ Model = m,
+ RouteHandler = new MyDynamicDataRouteHandler ()
+ };
+
+ routes.Add (ddr);
+
+ Assert.IsNotNull (ddr, "#A1");
+ Assert.IsNotNull (ddr.Defaults, "#A1-1");
+ var rd = new RouteData ();
+ var hc = new HttpContextWrapper (HttpContext.Current);
+
+ ddr.GetVirtualPath (new RequestContext (hc, rd), null);
+ Assert.IsNotNull (ddr.Defaults, "#B1");
+ Assert.AreEqual (1, ddr.Defaults.Count, "#B1-1");
+ Assert.AreEqual (PageAction.Details, ddr.Defaults["Action"], "#B1-2");
+
+ ddr.Action = "MyAction";
+ ddr.GetVirtualPath (new RequestContext (hc, rd), null);
+ Assert.IsNotNull (ddr.Defaults, "#C1");
+ Assert.AreEqual (1, ddr.Defaults.Count, "#C1-1");
+ Assert.AreEqual (PageAction.Details, ddr.Defaults["Action"], "#B1-2");
+ }
+
+ [Test]
+ public void BaseDefaultsModification_10 ()
+ {
+ MetaModel m = MetaModel.Default;
+ var req = new FakeHttpWorkerRequest ();
+ var ctx = new HttpContext (req);
+ HttpContext.Current = ctx;
+
+ RouteCollection routes = RouteTable.Routes;
+ routes.Clear ();
+
+ var ddr = new DynamicDataRoute ("{table}/{action}.aspx") {
+ Defaults = new RouteValueDictionary () {
+ {"Table", "FooWithDefaultsTable"}
+ },
+ Table = "BazTable",
+ Model = m,
+ RouteHandler = new MyDynamicDataRouteHandler ()
+ };
+
+ routes.Add (ddr);
+
+ Assert.IsNotNull (ddr, "#A1");
+ Assert.IsNotNull (ddr.Defaults, "#A1-1");
+ var rd = new RouteData ();
+ var hc = new HttpContextWrapper (HttpContext.Current);
+
+ ddr.GetVirtualPath (new RequestContext (hc, rd), null);
+ Assert.IsNotNull (ddr.Defaults, "#B1");
+ Assert.AreEqual (1, ddr.Defaults.Count, "#B1-1");
+ Assert.AreEqual ("BazTable", ddr.Defaults["Table"], "#B1-2");
+
+ ddr.Table = "AnotherTable";
+ ddr.GetVirtualPath (new RequestContext (hc, rd), null);
+ Assert.IsNotNull (ddr.Defaults, "#C1");
+ Assert.AreEqual (1, ddr.Defaults.Count, "#C1-1");
+ Assert.AreEqual ("BazTable", ddr.Defaults["Table"], "#C1-2");
}
}
}