aspnetcore/test/Microsoft.AspNet.Routing.Tests/RegexConstraintTests.cs

96 lines
3.1 KiB
C#

using System;
using System.Globalization;
using System.Text.RegularExpressions;
using System.Threading;
using Xunit;
namespace Microsoft.AspNet.Routing.Tests
{
public class RegexConstraintTests
{
[Theory]
[InlineData("abc", "abc", true)]
[InlineData("Abc", "abc", true)]
[InlineData("Abc ", "abc", true)]
[InlineData("Abcd", "abc", true)]
[InlineData("^Abcd", "abc", true)]
[InlineData("Abc", " abc", false)]
public void RegexConstraintDoesNotPrepend(string routeValue,
string constraintValue,
bool shouldMatch)
{
// Arrange
var constraint = new RegexConstraint(constraintValue);
var values = new RouteValueDictionary(new {controller = routeValue});
// Assert
Assert.Equal(shouldMatch, constraint.EasyMatch("controller", values));
}
[Fact]
public void RegexConstraintCanTakeARegex_SuccessulMatch()
{
// Arrange
var constraint = new RegexConstraint(new Regex("^abc$"));
var values = new RouteValueDictionary(new { controller = "abc"});
// Assert
Assert.True(constraint.EasyMatch("controller", values));
}
[Fact]
public void RegexConstraintFailsIfKeyIsNotFound()
{
// Arrange
var constraint = new RegexConstraint(new Regex("^abc$"));
var values = new RouteValueDictionary(new { action = "abc" });
// Assert
Assert.False(constraint.EasyMatch("controller", values));
}
[Fact]
public void RegexConstraintCanTakeARegex_FailedMatch()
{
// Arrange
var constraint = new RegexConstraint(new Regex("^abc$"));
var values = new RouteValueDictionary(new { controller = "Abc" });
// Assert
Assert.False(constraint.EasyMatch("controller", values));
}
[Fact]
public void RegexConstraintIsCultureInsensitive()
{
// Arrange
var constraint = new RegexConstraint("^([a-z]+)$");
var values = new RouteValueDictionary(new { controller = "\u0130" });
var currentThread = Thread.CurrentThread;
var backupCulture = currentThread.CurrentCulture;
bool matchInTurkish;
bool matchInUsEnglish;
// Act
try
{
currentThread.CurrentCulture = new CultureInfo("tr-TR"); // Turkish culture
matchInTurkish = constraint.EasyMatch("controller", values);
currentThread.CurrentCulture = new CultureInfo("en-US");
matchInUsEnglish = constraint.EasyMatch("controller", values);
}
finally
{
currentThread.CurrentCulture = backupCulture;
}
// Assert
Assert.False(matchInUsEnglish); // this just verifies the test
Assert.False(matchInTurkish);
}
}
}