From 76fff21677db9836ce96b93ec1e0d40b8c49e0fa Mon Sep 17 00:00:00 2001 From: Jeremy Kuhne Date: Wed, 14 Feb 2018 16:06:04 -0800 Subject: [PATCH] Add some pattern transformation tests (dotnet/corefx#27133) Commit migrated from https://github.com/dotnet/corefx/commit/11182e0c4e65fb1e6fa0596ca9d991e3382c9fb2 --- .../PatternTransformTests.netcoreapp.cs | 126 +++++++++++++++++++++ .../tests/System.IO.FileSystem.Tests.csproj | 1 + 2 files changed, 127 insertions(+) create mode 100644 src/libraries/System.IO.FileSystem/tests/Enumeration/PatternTransformTests.netcoreapp.cs diff --git a/src/libraries/System.IO.FileSystem/tests/Enumeration/PatternTransformTests.netcoreapp.cs b/src/libraries/System.IO.FileSystem/tests/Enumeration/PatternTransformTests.netcoreapp.cs new file mode 100644 index 0000000..d9e8b53 --- /dev/null +++ b/src/libraries/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, "FileThree")); + 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/libraries/System.IO.FileSystem/tests/System.IO.FileSystem.Tests.csproj b/src/libraries/System.IO.FileSystem/tests/System.IO.FileSystem.Tests.csproj index 51e22c9..4bf205f 100644 --- a/src/libraries/System.IO.FileSystem/tests/System.IO.FileSystem.Tests.csproj +++ b/src/libraries/System.IO.FileSystem/tests/System.IO.FileSystem.Tests.csproj @@ -61,6 +61,7 @@ + -- 2.7.4