aspnetcore/test/Microsoft.AspNetCore.Rewrit.../ModRewrite/ConditionPatternParserTest.cs

116 lines
6.4 KiB
C#

// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using Microsoft.AspNetCore.Rewrite.Internal.ModRewrite;
using Xunit;
namespace Microsoft.AspNetCore.Rewrite.Tests.ModRewrite
{
public class ConditionPatternParserTest
{
[Theory]
[InlineData(">hey", OperationType.Greater, "hey", ConditionType.StringComp)]
[InlineData("<hey", OperationType.Less, "hey", ConditionType.StringComp)]
[InlineData(">=hey", OperationType.GreaterEqual, "hey", ConditionType.StringComp)]
[InlineData("<=hey", OperationType.LessEqual, "hey", ConditionType.StringComp)]
[InlineData("=hey", OperationType.Equal, "hey", ConditionType.StringComp)]
public void ConditionPatternParser_CheckStringComp(string condition, OperationType operation, string variable, ConditionType conditionType)
{
var results = new ConditionPatternParser().ParseActionCondition(condition);
var expected = new ParsedModRewriteInput { OperationType = operation, ConditionType = conditionType, Operand = variable, Invert = false };
Assert.True(CompareConditions(results, expected));
}
[Fact]
public void ConditionPatternParser_CheckRegexEqual()
{
var condition = @"(.*)";
var results = new ConditionPatternParser().ParseActionCondition(condition);
var expected = new ParsedModRewriteInput { ConditionType = ConditionType.Regex, Operand = "(.*)", Invert = false };
Assert.True(CompareConditions(results, expected));
}
[Theory]
[InlineData("-d", OperationType.Directory, ConditionType.PropertyTest)]
[InlineData("-f", OperationType.RegularFile, ConditionType.PropertyTest)]
[InlineData("-F", OperationType.ExistingFile, ConditionType.PropertyTest)]
[InlineData("-h", OperationType.SymbolicLink, ConditionType.PropertyTest)]
[InlineData("-L", OperationType.SymbolicLink, ConditionType.PropertyTest)]
[InlineData("-l", OperationType.SymbolicLink, ConditionType.PropertyTest)]
[InlineData("-s", OperationType.Size, ConditionType.PropertyTest)]
[InlineData("-U", OperationType.ExistingUrl, ConditionType.PropertyTest)]
[InlineData("-x", OperationType.Executable, ConditionType.PropertyTest)]
public void ConditionPatternParser_CheckFileOperations(string condition, OperationType operation, ConditionType cond)
{
var results = new ConditionPatternParser().ParseActionCondition(condition);
var expected = new ParsedModRewriteInput { ConditionType = cond, OperationType = operation, Invert = false };
Assert.True(CompareConditions(results, expected));
}
[Theory]
[InlineData("!-d", OperationType.Directory, ConditionType.PropertyTest)]
[InlineData("!-f", OperationType.RegularFile, ConditionType.PropertyTest)]
[InlineData("!-F", OperationType.ExistingFile, ConditionType.PropertyTest)]
[InlineData("!-h", OperationType.SymbolicLink, ConditionType.PropertyTest)]
[InlineData("!-L", OperationType.SymbolicLink, ConditionType.PropertyTest)]
[InlineData("!-l", OperationType.SymbolicLink, ConditionType.PropertyTest)]
[InlineData("!-s", OperationType.Size, ConditionType.PropertyTest)]
[InlineData("!-U", OperationType.ExistingUrl, ConditionType.PropertyTest)]
[InlineData("!-x", OperationType.Executable, ConditionType.PropertyTest)]
public void ConditionPatternParser_CheckFileOperationsInverted(string condition, OperationType operation, ConditionType cond)
{
var results = new ConditionPatternParser().ParseActionCondition(condition);
var expected = new ParsedModRewriteInput { ConditionType = cond, OperationType = operation, Invert = true };
Assert.True(CompareConditions(results, expected));
}
[Theory]
[InlineData("-gt1", OperationType.Greater, "1", ConditionType.IntComp)]
[InlineData("-lt1", OperationType.Less, "1", ConditionType.IntComp)]
[InlineData("-ge1", OperationType.GreaterEqual, "1", ConditionType.IntComp)]
[InlineData("-le1", OperationType.LessEqual, "1", ConditionType.IntComp)]
[InlineData("-eq1", OperationType.Equal, "1", ConditionType.IntComp)]
[InlineData("-ne1", OperationType.NotEqual, "1", ConditionType.IntComp)]
public void ConditionPatternParser_CheckIntComp(string condition, OperationType operation, string variable, ConditionType cond)
{
var results = new ConditionPatternParser().ParseActionCondition(condition);
var expected = new ParsedModRewriteInput { ConditionType = cond, OperationType = operation, Invert = false, Operand = variable };
Assert.True(CompareConditions(results, expected));
}
[Theory]
[InlineData("", "Unrecognized parameter type: '', terminated at string index: '0'")]
[InlineData("!", "Unrecognized parameter type: '!', terminated at string index: '1'")]
[InlineData(">", "Unrecognized parameter type: '>', terminated at string index: '1'")]
[InlineData("<", "Unrecognized parameter type: '<', terminated at string index: '1'")]
[InlineData("=", "Unrecognized parameter type: '=', terminated at string index: '1'")]
[InlineData(">=", "Unrecognized parameter type: '>=', terminated at string index: '2'")]
[InlineData("<=", "Unrecognized parameter type: '<=', terminated at string index: '2'")]
[InlineData("-a", "Unrecognized parameter type: '-a', terminated at string index: '1'")]
[InlineData("-gewow", "Unrecognized parameter type: '-gewow', terminated at string index: '3'")]
public void ConditionPatternParser_AssertBadInputThrowsFormatException(string input, string expected)
{
var ex = Assert.Throws<FormatException>(() => new ConditionPatternParser().ParseActionCondition(input));
Assert.Equal(expected, ex.Message);
}
private bool CompareConditions(ParsedModRewriteInput i1, ParsedModRewriteInput i2)
{
if (i1.OperationType != i2.OperationType ||
i1.ConditionType != i2.ConditionType ||
i1.Operand != i2.Operand ||
i1.Invert != i2.Invert)
{
return false;
}
return true;
}
}
}