Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/corefx.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Kuhne <jeremy.kuhne@microsoft.com>2018-05-01 23:22:42 +0300
committerJeremy Kuhne <jeremy.kuhne@microsoft.com>2018-05-02 00:47:30 +0300
commit77732da1052923259a7668540ee62bf48d35956e (patch)
tree761a1e549c15325d634fa5ed9b39d42cb9e997d9 /src/System.IO.FileSystem/tests
parent16daef3ad34ca954681a00e9239172baf89e3f2d (diff)
Port #29413 to release branch
Enumerating strings should retain trailing separators (#29413) This is a regression introduced by the enumeration overhaul. We didn't have tests that covered trailing separators in the specified root directory when enumerating. They should be retained as is.
Diffstat (limited to 'src/System.IO.FileSystem/tests')
-rw-r--r--src/System.IO.FileSystem/tests/Directory/GetFiles.cs29
-rw-r--r--src/System.IO.FileSystem/tests/DirectoryInfo/EnumerableAPIs.cs2
-rw-r--r--src/System.IO.FileSystem/tests/DirectoryInfo/GetFiles.cs2
-rw-r--r--src/System.IO.FileSystem/tests/FileSystemTest.cs20
4 files changed, 53 insertions, 0 deletions
diff --git a/src/System.IO.FileSystem/tests/Directory/GetFiles.cs b/src/System.IO.FileSystem/tests/Directory/GetFiles.cs
index 79c22762df..7a8a36bde6 100644
--- a/src/System.IO.FileSystem/tests/Directory/GetFiles.cs
+++ b/src/System.IO.FileSystem/tests/Directory/GetFiles.cs
@@ -147,6 +147,8 @@ namespace System.IO.Tests
public class Directory_GetFiles_str_str_so : Directory_GetFileSystemEntries_str_str_so
{
+ public virtual bool IsDirectoryInfo => false;
+
protected override bool TestFiles { get { return true; } }
protected override bool TestDirectories { get { return false; } }
@@ -164,5 +166,32 @@ namespace System.IO.Tests
{
return Directory.GetFiles(path, searchPattern, option);
}
+
+ [Theory, MemberData(nameof(TrailingSeparators))]
+ public void DirectoryWithTrailingSeparators(string trailing)
+ {
+ // When getting strings back we should retain the root path as specified for Directory.
+ // DirectoryInfo returns the normalized full path in all cases.
+
+ // Add the trailing separator up front for Directory as we want to validate against
+ // the path _with_ the separator on it. Creation doesn't care about trailing, and
+ // Path.Combine doesn't change the existing separators, it just adds the canonical
+ // separator if needed.
+ string root = GetTestFilePath() + (IsDirectoryInfo ? "" : trailing);
+ string rootFile = Path.Combine(root, GetTestFileName());
+ string subDirectory = Path.Combine(root, GetTestFileName());
+ string nestedFile = Path.Combine(subDirectory, GetTestFileName());
+
+ Directory.CreateDirectory(subDirectory);
+ File.Create(rootFile).Dispose();
+ File.Create(nestedFile).Dispose();
+
+ // Add the trailing separator if we haven't (for DI) so we can validate that we
+ // either retain (D) or don't retain (DI) the separators as we specified them.
+ // Note that some of the cases actually match canonical (one standard separator)
+ // so they never change.
+ string[] files = GetEntries(root + (IsDirectoryInfo ? trailing : ""), "*", SearchOption.AllDirectories);
+ FSAssert.EqualWhenOrdered(new string[] { rootFile, nestedFile }, files);
+ }
}
}
diff --git a/src/System.IO.FileSystem/tests/DirectoryInfo/EnumerableAPIs.cs b/src/System.IO.FileSystem/tests/DirectoryInfo/EnumerableAPIs.cs
index 8be99d828c..dd1875a2d5 100644
--- a/src/System.IO.FileSystem/tests/DirectoryInfo/EnumerableAPIs.cs
+++ b/src/System.IO.FileSystem/tests/DirectoryInfo/EnumerableAPIs.cs
@@ -32,6 +32,8 @@ namespace System.IO.Tests
public class DirectoryInfo_EnumerateFiles_str_str_so : Directory_GetFiles_str_str_so
{
+ public override bool IsDirectoryInfo => true;
+
public override string[] GetEntries(string path)
{
return ((new DirectoryInfo(path).EnumerateFiles("*", SearchOption.TopDirectoryOnly).Select(x => x.FullName)).ToArray());
diff --git a/src/System.IO.FileSystem/tests/DirectoryInfo/GetFiles.cs b/src/System.IO.FileSystem/tests/DirectoryInfo/GetFiles.cs
index 85fef80609..13970ae34d 100644
--- a/src/System.IO.FileSystem/tests/DirectoryInfo/GetFiles.cs
+++ b/src/System.IO.FileSystem/tests/DirectoryInfo/GetFiles.cs
@@ -30,6 +30,8 @@ namespace System.IO.Tests
public class DirectoryInfo_GetFiles_str_so : Directory_GetFiles_str_str_so
{
+ public override bool IsDirectoryInfo => true;
+
public override string[] GetEntries(string path)
{
return ((new DirectoryInfo(path).GetFiles("*", SearchOption.TopDirectoryOnly).Select(x => x.FullName)).ToArray());
diff --git a/src/System.IO.FileSystem/tests/FileSystemTest.cs b/src/System.IO.FileSystem/tests/FileSystemTest.cs
index 6f020a00f6..ff21035632 100644
--- a/src/System.IO.FileSystem/tests/FileSystemTest.cs
+++ b/src/System.IO.FileSystem/tests/FileSystemTest.cs
@@ -33,6 +33,26 @@ namespace System.IO.Tests
public static TheoryData ControlWhiteSpace = IOInputs.GetControlWhiteSpace().ToTheoryData();
public static TheoryData NonControlWhiteSpace = IOInputs.GetNonControlWhiteSpace().ToTheoryData();
+ public static TheoryData<string> TrailingSeparators
+ {
+ get
+ {
+ var data = new TheoryData<string>()
+ {
+ "",
+ "" + Path.DirectorySeparatorChar,
+ "" + Path.DirectorySeparatorChar + Path.DirectorySeparatorChar
+ };
+
+ if (PlatformDetection.IsWindows)
+ {
+ data.Add("" + Path.AltDirectorySeparatorChar);
+ }
+
+ return data;
+ }
+ }
+
/// <summary>
/// In some cases (such as when running without elevated privileges),
/// the symbolic link may fail to create. Only run this test if it creates