diff options
author | Jeremy Kuhne <jeremy.kuhne@microsoft.com> | 2018-02-15 03:06:04 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-02-15 03:06:04 +0300 |
commit | 11182e0c4e65fb1e6fa0596ca9d991e3382c9fb2 (patch) | |
tree | fef2bd55aba44248d5ea3e53b54418893c627b97 /src | |
parent | 1eb5ddf1d0a3dbc0a221769a45d81d2a2b7fa81d (diff) |
Add some pattern transformation tests (#27133)
Diffstat (limited to 'src')
-rw-r--r-- | src/System.IO.FileSystem/tests/Enumeration/PatternTransformTests.netcoreapp.cs | 126 | ||||
-rw-r--r-- | src/System.IO.FileSystem/tests/System.IO.FileSystem.Tests.csproj | 1 |
2 files changed, 127 insertions, 0 deletions
diff --git a/src/System.IO.FileSystem/tests/Enumeration/PatternTransformTests.netcoreapp.cs b/src/System.IO.FileSystem/tests/Enumeration/PatternTransformTests.netcoreapp.cs new file mode 100644 index 0000000000..d9e8b5330d --- /dev/null +++ b/src/System.IO.FileSystem/tests/Enumeration/PatternTransformTests.netcoreapp.cs @@ -0,0 +1,126 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.Linq; +using Xunit; + +namespace System.IO.Tests.Enumeration +{ + public class PatternTransformTests_Directory : FileSystemTest + { + protected virtual string[] GetFiles(string directory, string pattern) + { + return Directory.GetFiles(directory, pattern); + } + + protected virtual string[] GetFiles(string directory, string pattern, EnumerationOptions options) + { + return Directory.GetFiles(directory, pattern, options); + } + + [Theory, + InlineData("."), + InlineData("*.*")] + public void GetFiles_WildcardPatternIsTranslated(string pattern) + { + DirectoryInfo testDirectory = Directory.CreateDirectory(GetTestFilePath()); + FileInfo fileOne = new FileInfo(Path.Combine(testDirectory.FullName, "File.One")); + FileInfo fileTwo = new FileInfo(Path.Combine(testDirectory.FullName, "FileTwo")); + fileOne.Create().Dispose(); + fileTwo.Create().Dispose(); + string[] results = GetFiles(testDirectory.FullName, pattern); + FSAssert.EqualWhenOrdered(new string[] { fileOne.FullName, fileTwo.FullName }, results); + + results = GetFiles(testDirectory.FullName, pattern, new EnumerationOptions { MatchType = MatchType.Dos }); + FSAssert.EqualWhenOrdered(new string[] { fileOne.FullName, fileTwo.FullName }, results); + } + + [Fact] + public void GetFiles_WildcardPatternIsNotTranslated() + { + DirectoryInfo testDirectory = Directory.CreateDirectory(GetTestFilePath()); + FileInfo fileOne = new FileInfo(Path.Combine(testDirectory.FullName, "File.One")); + FileInfo fileTwo = new FileInfo(Path.Combine(testDirectory.FullName, "FileTwo")); + fileOne.Create().Dispose(); + fileTwo.Create().Dispose(); + string[] results = GetFiles(testDirectory.FullName, ".", new EnumerationOptions()); + Assert.Empty(results); + + results = GetFiles(testDirectory.FullName, "*.*", new EnumerationOptions()); + Assert.Equal(new string[] { fileOne.FullName }, results); + } + + [Fact] + public void GetFiles_EmptyPattern() + { + DirectoryInfo testDirectory = Directory.CreateDirectory(GetTestFilePath()); + FileInfo fileOne = new FileInfo(Path.Combine(testDirectory.FullName, "File.One")); + FileInfo fileTwo = new FileInfo(Path.Combine(testDirectory.FullName, "FileTwo")); + fileOne.Create().Dispose(); + fileTwo.Create().Dispose(); + + // We allow for expression to be "foo\" which would translate to "foo\*". + string[] results = GetFiles(testDirectory.Parent.FullName, testDirectory.Name + Path.DirectorySeparatorChar); + FSAssert.EqualWhenOrdered(new string[] { fileOne.FullName, fileTwo.FullName }, results); + + results = GetFiles(testDirectory.Parent.FullName, testDirectory.Name + Path.AltDirectorySeparatorChar); + FSAssert.EqualWhenOrdered(new string[] { fileOne.FullName, fileTwo.FullName }, results); + + results = GetFiles(testDirectory.FullName, string.Empty); + FSAssert.EqualWhenOrdered(new string[] { fileOne.FullName, fileTwo.FullName }, results); + } + + [Fact] + [PlatformSpecific(TestPlatforms.AnyUnix)] + public void GetFiles_EmptyPattern_Unix() + { + DirectoryInfo testDirectory = Directory.CreateDirectory(GetTestFilePath()); + FileInfo fileOne = new FileInfo(Path.Combine(testDirectory.FullName, "File\\One")); + FileInfo fileTwo = new FileInfo(Path.Combine(testDirectory.FullName, "FileTwo")); + fileOne.Create().Dispose(); + fileTwo.Create().Dispose(); + + // We allow for expression to be "foo\" which would translate to "foo\*". On Unix we should not be + // considering the backslash as a directory separator. + string[] results = GetFiles(testDirectory.FullName, "File\\One"); + Assert.Equal(new string[] { fileOne.FullName }, results); + } + + [Fact] + [PlatformSpecific(TestPlatforms.AnyUnix)] + public void GetFiles_ExtendedDosWildcards_Unix() + { + // The extended wildcards ('"', '<', and '>') should not be considered on Unix, even when doing DOS style matching. + // Getting these behaviors requires using the FileSystemEnumerable/Enumerator directly. + DirectoryInfo testDirectory = Directory.CreateDirectory(GetTestFilePath()); + FileInfo fileOne = new FileInfo(Path.Combine(testDirectory.FullName, "File\"One")); + FileInfo fileTwo = new FileInfo(Path.Combine(testDirectory.FullName, "File<Two")); + FileInfo fileThree = new FileInfo(Path.Combine(testDirectory.FullName, "File>Three")); + fileOne.Create().Dispose(); + fileTwo.Create().Dispose(); + fileThree.Create().Dispose(); + + string[] results = GetFiles(testDirectory.FullName, "*\"*"); + Assert.Equal(new string[] { fileOne.FullName }, results); + results = GetFiles(testDirectory.FullName, "*<*"); + Assert.Equal(new string[] { fileTwo.FullName }, results); + results = GetFiles(testDirectory.FullName, "*>*"); + Assert.Equal(new string[] { fileThree.FullName }, results); + } + } + + public class PatternTransformTests_DirectoryInfo : PatternTransformTests_Directory + { + + protected override string[] GetFiles(string directory, string pattern) + { + return new DirectoryInfo(directory).GetFiles(pattern).Select(i => i.FullName).ToArray(); + } + + protected override string[] GetFiles(string directory, string pattern, EnumerationOptions options) + { + return new DirectoryInfo(directory).GetFiles(pattern, options).Select(i => i.FullName).ToArray(); + } + } +} diff --git a/src/System.IO.FileSystem/tests/System.IO.FileSystem.Tests.csproj b/src/System.IO.FileSystem/tests/System.IO.FileSystem.Tests.csproj index 51e22c988f..4bf205f368 100644 --- a/src/System.IO.FileSystem/tests/System.IO.FileSystem.Tests.csproj +++ b/src/System.IO.FileSystem/tests/System.IO.FileSystem.Tests.csproj @@ -61,6 +61,7 @@ <Compile Include="Enumeration\TrimmedPaths.netcoreapp.cs" /> <Compile Include="Enumeration\ErrorHandlingTests.netcoreapp.cs" /> <Compile Include="Enumeration\IncludePredicateTests.netcoreapp.cs" /> + <Compile Include="Enumeration\PatternTransformTests.netcoreapp.cs" /> </ItemGroup> <ItemGroup> <!-- Rewritten --> |