Add some pattern transformation tests (dotnet/corefx#27133)
authorJeremy Kuhne <jeremy.kuhne@microsoft.com>
Thu, 15 Feb 2018 00:06:04 +0000 (16:06 -0800)
committerGitHub <noreply@github.com>
Thu, 15 Feb 2018 00:06:04 +0000 (16:06 -0800)
Commit migrated from https://github.com/dotnet/corefx/commit/11182e0c4e65fb1e6fa0596ca9d991e3382c9fb2

src/libraries/System.IO.FileSystem/tests/Enumeration/PatternTransformTests.netcoreapp.cs [new file with mode: 0644]
src/libraries/System.IO.FileSystem/tests/System.IO.FileSystem.Tests.csproj

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 (file)
index 0000000..d9e8b53
--- /dev/null
@@ -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();
+        }
+    }
+}
index 51e22c9..4bf205f 100644 (file)
@@ -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 -->