public void ShouldSortValuesAlphabeticallyByName()
		{
			var valuesIn = new Dictionary<string, string>
				{
					 { "controller", "foo" },
					 { "action", "bar" },
					 { "z", "a" },
					 { "b", "b" },
					 { "a", "z" }
				};

			var routeValues = new RouteValues(valuesIn);

			routeValues.Sort();

			Assert.That(routeValues.Values[0].Name, Is.EqualTo("a"));
			Assert.That(routeValues.Values[1].Name, Is.EqualTo("b"));
			Assert.That(routeValues.Values[2].Name, Is.EqualTo("z"));
		}
			public void ShouldPutOptionalRouteValuesAfterSameNamedOnes()
			{
				var valuesIn = new Dictionary<string, object>
					{
						 { "controller", "foo" },
						 { "action", "bar" },
						 { "a", RouteParameter.Optional }
					};

				var routeValues = new RouteValues(valuesIn);

				routeValues.Add(new RouteValue("a", "zzz", RouteValueOrigin.Params));

				routeValues.Sort();

				Assert.That(routeValues.Values[0].Name, Is.EqualTo("a"));
				Assert.That(routeValues.Values[1].Name, Is.EqualTo("a"));
				Assert.That(routeValues.Values[0].Value, Is.EqualTo("zzz"));
				Assert.That(routeValues.Values[1].Value, Is.EqualTo(RouteParameter.Optional));
			}
		public void ShouldPutOptionalRouteValuesinPlace()
		{
			var valuesIn = new Dictionary<string, object>
				{
					 { "controller", "foo" },
					 { "action", "bar" },
					 { "z", "a" },
					 { "b", "b" },
					 { "a", RouteParameter.Optional }
				};

			var routeValues = new RouteValues(valuesIn);

			routeValues.Sort();

			Assert.That(routeValues.Values[0].Name, Is.EqualTo("a"));
			Assert.That(routeValues.Values[1].Name, Is.EqualTo("b"));
			Assert.That(routeValues.Values[2].Name, Is.EqualTo("z"));
		}
			public void SameNamedValuesAreSortedByOrigin()
			{
				var routeValues = new RouteValues();

				routeValues.Add(new RouteValue("a", "ccc", RouteValueOrigin.Params));
				routeValues.Add(new RouteValue("a", "aaa", RouteValueOrigin.Body));
				routeValues.Add(new RouteValue("a", "bbb", RouteValueOrigin.Path));

				routeValues.Sort();

				Assert.That(routeValues.Values[0].Name, Is.EqualTo("a"));
				Assert.That(routeValues.Values[1].Name, Is.EqualTo("a"));
				Assert.That(routeValues.Values[2].Name, Is.EqualTo("a"));

				Assert.That(routeValues.Values[0].Origin, Is.EqualTo(RouteValueOrigin.Path));
				Assert.That(routeValues.Values[1].Origin, Is.EqualTo(RouteValueOrigin.Params));
				Assert.That(routeValues.Values[2].Origin, Is.EqualTo(RouteValueOrigin.Body));
			}