public void HandlesRouteWithoutDefaults()
		{
			var route = new Route("hello/world", null, null);

			var routeInfo = new RouteInfo();
			var defaultsProcessor = new DefaultsProcessor();
			defaultsProcessor.ProcessDefaults(route, routeInfo);

			Assert.AreEqual(0, routeInfo.Defaults.Count);
			Assert.AreEqual(0, routeInfo.Optional.Count);
		}
		public void HandlesOptionalParameters()
		{
			var routes = new RouteCollection();
			routes.MapRoute(
				name: "Hello",
				url: "hello/world/{id}",
				defaults: new { controller = "Hello", action = "HelloWorld", id = UrlParameter.Optional }
			);

			var routeInfo = new RouteInfo();
			var defaultsProcessor = new DefaultsProcessor();
			defaultsProcessor.ProcessDefaults((Route)routes["Hello"], routeInfo);

			Assert.IsTrue(routeInfo.Optional.Contains("id"));
		}
		public void HandlesAreas()
		{
			var routes = new RouteCollection();
			var areaReg = new AreaRegistrationContext("Foobar", routes);
			areaReg.MapRoute(
				name: "Hello",
				url: "hello/world",
				defaults: new { controller = "Hello", action = "HelloWorld" }
			);

			var routeInfo = new RouteInfo();
			var defaultsProcessor = new DefaultsProcessor();
			defaultsProcessor.ProcessDefaults((Route)routes["Hello"], routeInfo);

			Assert.AreEqual("Foobar", routeInfo.Defaults["area"]);
		}
		public void HandlesMvcControllerAndAction()
		{
			var routes = new RouteCollection();
			routes.MapRoute(
				name: "Hello",
				url: "hello/world",
				defaults: new { controller = "Hello", action = "HelloWorld" }
			);

			var routeInfo = new RouteInfo();
			var defaultsProcessor = new DefaultsProcessor();
			defaultsProcessor.ProcessDefaults((Route)routes["Hello"], routeInfo);

			Assert.AreEqual("Hello", routeInfo.Defaults["controller"]);
			Assert.AreEqual("HelloWorld", routeInfo.Defaults["action"]);
		}
		public void HandlesTwoOptionalParameters()
		{
			var routes = new RouteCollection();
			routes.MapRoute(
				name: "Hello",
				url: "hello/world/{first}/{second}",
				defaults: new { controller = "Hello", action = "Index", first = UrlParameter.Optional, second = UrlParameter.Optional }
			);

			var processor = new DefaultsProcessor();
			var routeInfo = new RouteInfo();
			processor.ProcessDefaults((Route)routes["Hello"], routeInfo);

			Assert.AreEqual(2, routeInfo.Defaults.Count);
			Assert.AreEqual(2, routeInfo.Optional.Count);
			Assert.AreEqual("first", routeInfo.Optional[0]);
			Assert.AreEqual("second", routeInfo.Optional[1]);
		}
		public void HandlesOneOptionalParameter()
		{
			var routes = new RouteCollection();
			routes.MapRoute(
				name: "Hello",
				url: "hello/world/{id}",
				defaults: new { controller = "Hello", action = "Index", id = UrlParameter.Optional }
			);

			var processor = new DefaultsProcessor();
			var routeInfo = new RouteInfo();
			processor.ProcessDefaults((Route)routes["Hello"], routeInfo);

			Assert.AreEqual(2, routeInfo.Defaults.Count);
			Assert.AreEqual("Hello", routeInfo.Defaults["controller"]);
			Assert.AreEqual("Index", routeInfo.Defaults["action"]);
			Assert.AreEqual(1, routeInfo.Optional.Count);
			Assert.AreEqual("id", routeInfo.Optional[0]);
		}