sdk/test/Microsoft.DotNet.ApiCompat..../RegexStringTransformerTests.cs

76 строки
2.8 KiB
C#

// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
using Microsoft.DotNet.ApiCompat;
namespace Microsoft.DotNet.ApiCompatibility.Tests
{
public class RegexStringTransformerTests
{
[Fact]
public void Transform_CaptureGroupPatternDoesNotMatchInput_ReturnsInput()
{
const string CaptureGroupPattern = "(abc)def";
const string ReplacementPattern = "$1";
const string Input = "ghi";
string output = new RegexStringTransformer(CaptureGroupPattern, ReplacementPattern).Transform(Input);
Assert.Equal(Input, output);
}
[Fact]
public void Transform_ReplacementPatternWithoutCaptureGroups_ReturnsReplacementPattern()
{
const string CaptureGroupPattern = "(abc)d*";
const string ReplacementPattern = "xyz";
const string Input = "abc";
string output = new RegexStringTransformer(CaptureGroupPattern, ReplacementPattern).Transform(Input);
Assert.Equal(ReplacementPattern, output);
}
[Fact]
public void Transform_ReplacementPatternWithTooManyReplacementMarkers_ReturnOutputWithoutTransformedReplacementMarkers()
{
const string CaptureGroupPattern = "(abc)(def)ghi";
const string ReplacementPattern = "1:$1, 2:$2, 3:$3";
const string Input = "abcdefghi";
string output = new RegexStringTransformer(CaptureGroupPattern, ReplacementPattern).Transform(Input);
Assert.Equal("1:abc, 2:def, 3:$3", output);
}
[Fact]
public void Transform_SameNumberOfGroupsAndMarkers_ReturnsExpected()
{
const string CaptureGroupPattern = @".+\\(.+)\\(.+)";
const string ReplacementPattern = "lib/$1/$2";
const string Input = @"C:\git\runtime\artifacts\bin\System.Linq\Debug\net7.0-android\System.Linq.dll";
string output = new RegexStringTransformer(CaptureGroupPattern, ReplacementPattern).Transform(Input);
Assert.Equal("lib/net7.0-android/System.Linq.dll", output);
}
[Fact]
public void Transform_MultiplePatterns_ReturnsExpected()
{
var patterns = new (string, string)[]
{
(@".+\\(.+)\\(.+)", "lib/$1/$2"),
(@"(.+)/(net\d.\d)-(.+)/(.+)", "runtimes/$3/$1/$2/$4"),
("runtimes/windows/", "runtimes/win/")
};
const string Input = @"C:\git\runtime\artifacts\bin\System.Linq\Debug\net7.0-android\System.Linq.dll";
string output = new RegexStringTransformer(patterns).Transform(Input);
Assert.Equal("runtimes/android/lib/net7.0/System.Linq.dll", output);
}
}
}