Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Add GetFileSystemEntries with SearchOption #878

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 12 additions & 9 deletions src/System.IO.Abstractions.TestingHelpers/MockDirectory.cs
Original file line number Diff line number Diff line change
Expand Up @@ -380,6 +380,15 @@ public override string[] GetFileSystemEntries(string path, string searchPattern)
return dirs.Union(files).ToArray();
}

/// <inheritdoc />
public override string[] GetFileSystemEntries(string path, string searchPattern, SearchOption searchOption)
{
var dirs = GetDirectories(path, searchPattern, searchOption);
var files = GetFiles(path, searchPattern, searchOption);

return dirs.Union(files).ToArray();
}

fgreinacher marked this conversation as resolved.
Show resolved Hide resolved
/// <inheritdoc />
public override DateTime GetLastAccessTime(string path)
{
Expand Down Expand Up @@ -644,25 +653,19 @@ public override IEnumerable<string> EnumerateFiles(string path, string searchPat
/// <inheritdoc />
public override IEnumerable<string> EnumerateFileSystemEntries(string path)
{
var fileSystemEntries = new List<string>(GetFiles(path));
fileSystemEntries.AddRange(GetDirectories(path));
return fileSystemEntries;
return GetFileSystemEntries(path);
}

/// <inheritdoc />
public override IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern)
{
var fileSystemEntries = new List<string>(GetFiles(path, searchPattern));
fileSystemEntries.AddRange(GetDirectories(path, searchPattern));
return fileSystemEntries;
return GetFileSystemEntries(path, searchPattern);
}

/// <inheritdoc />
public override IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern, SearchOption searchOption)
{
var fileSystemEntries = new List<string>(GetFiles(path, searchPattern, searchOption));
fileSystemEntries.AddRange(GetDirectories(path, searchPattern, searchOption));
return fileSystemEntries;
return GetFileSystemEntries(path, searchPattern, searchOption);
}

#if FEATURE_ENUMERATION_OPTIONS
Expand Down
3 changes: 3 additions & 0 deletions src/System.IO.Abstractions/DirectoryBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,9 @@ internal DirectoryBase() { }
/// <inheritdoc cref="IDirectory.GetFileSystemEntries(string,string)"/>
public abstract string[] GetFileSystemEntries(string path, string searchPattern);

/// <inheritdoc cref="IDirectory.GetFileSystemEntries(string,string,SearchOption)"/>
public abstract string[] GetFileSystemEntries(string path, string searchPattern, SearchOption searchOption);

/// <inheritdoc cref="IDirectory.GetLastAccessTime"/>
public abstract DateTime GetLastAccessTime(string path);

Expand Down
6 changes: 6 additions & 0 deletions src/System.IO.Abstractions/DirectoryWrapper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,12 @@ public override string[] GetFileSystemEntries(string path, string searchPattern)
return Directory.GetFileSystemEntries(path, searchPattern);
}

/// <inheritdoc />
public override string[] GetFileSystemEntries(string path, string searchPattern, SearchOption searchOption)
{
return Directory.GetFileSystemEntries(path, searchPattern, searchOption);
}

/// <inheritdoc />
public override DateTime GetLastAccessTime(string path)
{
Expand Down
2 changes: 2 additions & 0 deletions src/System.IO.Abstractions/IDirectory.cs
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,8 @@ public interface IDirectory
string[] GetFileSystemEntries(string path);
/// <inheritdoc cref="Directory.GetFileSystemEntries(string,string)"/>
string[] GetFileSystemEntries(string path, string searchPattern);
/// <inheritdoc cref="Directory.GetFileSystemEntries(string,string,SearchOption)"/>
string[] GetFileSystemEntries(string path, string searchPattern, SearchOption searchOption);
/// <inheritdoc cref="Directory.GetLastAccessTime"/>
DateTime GetLastAccessTime(string path);
/// <inheritdoc cref="Directory.GetLastAccessTimeUtc"/>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using System.Collections.Generic;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Versioning;
using System.Security.AccessControl;
Expand Down Expand Up @@ -956,6 +956,24 @@ public void MockDirectory_GetFileSystemEntries_Returns_Files_And_Directories()
Assert.AreEqual(testPath, entries.Last());
}

[Test]
public void MockDirectory_GetFileSystemEntries_ShouldNotReturnSubDirectory_WithSearchOption()
{
string testPath = XFS.Path(@"c:\foo\bar.txt");
string testDir = XFS.Path(@"c:\foo\bar");
string testSubDir = XFS.Path(@"c:\foo\bar\baz");
var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>
{
{ testPath, new MockFileData("Demo text content") },
{ testSubDir, new MockDirectoryData() },
});

var entries = fileSystem.Directory.GetFileSystemEntries(XFS.Path(@"c:\foo"), "*", SearchOption.TopDirectoryOnly).OrderBy(k => k);
Assert.AreEqual(2, entries.Count());
Assert.AreEqual(testDir, entries.First());
Assert.AreEqual(testPath, entries.Last());
}

[Test]
public void MockDirectory_GetFiles_ShouldThrowArgumentNullException_IfPathParamIsNull()
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
"Void SetAccessControl(System.String, System.Security.AccessControl.DirectorySecurity)"
],
"MissingMembers": [
"System.String[] GetFileSystemEntries(System.String, System.String, System.IO.EnumerationOptions)",
"System.String[] GetFileSystemEntries(System.String, System.String, System.IO.SearchOption)"
"System.String[] GetFileSystemEntries(System.String, System.String, System.IO.EnumerationOptions)"
]
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
],
"MissingMembers": [
"System.IO.Abstractions.IFileSystemInfo ResolveLinkTarget(System.String, Boolean)",
"System.String[] GetFileSystemEntries(System.String, System.String, System.IO.EnumerationOptions)",
"System.String[] GetFileSystemEntries(System.String, System.String, System.IO.SearchOption)"
"System.String[] GetFileSystemEntries(System.String, System.String, System.IO.EnumerationOptions)"
]
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
"System.Collections.Generic.IEnumerable`1[System.String] EnumerateFiles(System.String, System.String, System.IO.EnumerationOptions)",
"System.String[] GetDirectories(System.String, System.String, System.IO.EnumerationOptions)",
"System.String[] GetFileSystemEntries(System.String, System.String, System.IO.EnumerationOptions)",
"System.String[] GetFileSystemEntries(System.String, System.String, System.IO.SearchOption)",
"System.String[] GetFiles(System.String, System.String, System.IO.EnumerationOptions)"
]
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
"Void SetAccessControl(System.String, System.Security.AccessControl.DirectorySecurity)"
],
"MissingMembers": [
"System.String[] GetFileSystemEntries(System.String, System.String, System.IO.EnumerationOptions)",
"System.String[] GetFileSystemEntries(System.String, System.String, System.IO.SearchOption)"
"System.String[] GetFileSystemEntries(System.String, System.String, System.IO.EnumerationOptions)"
]
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
{
"ExtraMembers": [],
"MissingMembers": [
"System.String[] GetFileSystemEntries(System.String, System.String, System.IO.SearchOption)"
]
"MissingMembers": []
}
2 changes: 1 addition & 1 deletion version.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"$schema": "https://raw.githubusercontent.com/AArnott/Nerdbank.GitVersioning/master/src/NerdBank.GitVersioning/version.schema.json",
"version": "17.1",
"version": "17.2",
"assemblyVersion": {
"precision": "major"
},
Expand Down