Skip to content

Commit cdea682

Browse files
authored
refactor: throw exception when encountering unsupported EnumerationOptions (#655)
Addresses #653
1 parent c0cd28d commit cdea682

5 files changed

Lines changed: 42 additions & 10 deletions

File tree

src/System.IO.Abstractions.TestingHelpers/MockDirectory.cs

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ public override string[] GetDirectories(string path, string searchPattern, Searc
177177
#if FEATURE_ENUMERATION_OPTIONS
178178
public override string[] GetDirectories(string path, string searchPattern, EnumerationOptions enumerationOptions)
179179
{
180-
return GetDirectories(path, "*", enumerationOptions.RecurseSubdirectories ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly);
180+
return GetDirectories(path, "*", EnumerationOptionsToSearchOption(enumerationOptions));
181181
}
182182
#endif
183183

@@ -206,7 +206,7 @@ public override string[] GetFiles(string path, string searchPattern, SearchOptio
206206
#if FEATURE_ENUMERATION_OPTIONS
207207
public override string[] GetFiles(string path, string searchPattern, EnumerationOptions enumerationOptions)
208208
{
209-
return GetFiles(path, "*", enumerationOptions.RecurseSubdirectories ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly);
209+
return GetFiles(path, "*", EnumerationOptionsToSearchOption(enumerationOptions));
210210
}
211211
#endif
212212

@@ -638,5 +638,42 @@ private string ReplaceLastOccurrence(string source, string find, string replace)
638638
var result = source.Remove(place, find.Length).Insert(place, replace);
639639
return result;
640640
}
641+
642+
#if FEATURE_ENUMERATION_OPTIONS
643+
private SearchOption EnumerationOptionsToSearchOption(EnumerationOptions enumerationOptions)
644+
{
645+
static Exception CreateExceptionForUnsupportedProperty(string propertyName)
646+
{
647+
return new NotSupportedException(
648+
$"Changing EnumerationOptions.{propertyName} is not yet implemented for the mock file system."
649+
);
650+
}
651+
652+
if (enumerationOptions.AttributesToSkip != (FileAttributes.System | FileAttributes.Hidden))
653+
{
654+
throw CreateExceptionForUnsupportedProperty("AttributesToSkip");
655+
}
656+
if (!enumerationOptions.IgnoreInaccessible)
657+
{
658+
throw CreateExceptionForUnsupportedProperty("IgnoreInaccessible");
659+
}
660+
if (enumerationOptions.MatchCasing != MatchCasing.PlatformDefault)
661+
{
662+
throw CreateExceptionForUnsupportedProperty("MatchCasing");
663+
}
664+
if (enumerationOptions.MatchType != MatchType.Simple)
665+
{
666+
throw CreateExceptionForUnsupportedProperty("MatchType");
667+
}
668+
if (enumerationOptions.ReturnSpecialDirectories)
669+
{
670+
throw CreateExceptionForUnsupportedProperty("ReturnSpecialDirectories");
671+
}
672+
673+
return enumerationOptions.RecurseSubdirectories
674+
? SearchOption.AllDirectories
675+
: SearchOption.TopDirectoryOnly;
676+
}
677+
#endif
641678
}
642679
}

src/System.IO.Abstractions.TestingHelpers/System.IO.Abstractions.TestingHelpers.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<AssemblyName>System.IO.Abstractions.TestingHelpers</AssemblyName>
44
<RootNamespace>System.IO.Abstractions.TestingHelpers</RootNamespace>
55
<Description>A set of pre-built mocks to help when testing file system interactions.</Description>
6-
<TargetFrameworks>netstandard2.0;netstandard2.1;net461</TargetFrameworks>
6+
<TargetFrameworks>netstandard2.1;netstandard2.0;net461</TargetFrameworks>
77
<PackageProjectUrl>https://github.com/System-IO-Abstractions/System.IO.Abstractions</PackageProjectUrl>
88
<PackageLicenseExpression>MIT</PackageLicenseExpression>
99
<PackageTags>testing</PackageTags>

tests/System.IO.Abstractions.TestingHelpers.Tests/MockDirectoryInfoTests.cs

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -188,12 +188,7 @@ public void MockDirectoryInfo_EnumerateFileSystemInfos_ShouldReturnDirectoriesAn
188188

189189
var enumerationOptions = new EnumerationOptions()
190190
{
191-
MatchType = MatchType.Win32,
192191
RecurseSubdirectories = true,
193-
IgnoreInaccessible = true,
194-
ReturnSpecialDirectories = false,
195-
AttributesToSkip = FileAttributes.Hidden,
196-
MatchCasing = MatchCasing.PlatformDefault,
197192
};
198193

199194
var result = directoryInfo.EnumerateFileSystemInfos("*", enumerationOptions).ToArray();

tests/System.IO.Abstractions.TestingHelpers.Tests/System.IO.Abstractions.TestingHelpers.Tests.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22
<PropertyGroup>
3-
<TargetFrameworks>netcoreapp2.1;netcoreapp3.0</TargetFrameworks>
3+
<TargetFrameworks>netcoreapp3.1;netcoreapp2.1</TargetFrameworks>
44
<TargetFrameworks Condition="!$([MSBuild]::IsOsUnixLike())">$(TargetFrameworks);net461</TargetFrameworks>
55
<Description>The unit tests for our pre-built mocks</Description>
66
<AssemblyName>System.IO.Abstractions.TestingHelpers.Tests</AssemblyName>

tests/System.IO.Abstractions.Tests/System.IO.Abstractions.Tests.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22
<PropertyGroup>
3-
<TargetFrameworks>netcoreapp3.0;netcoreapp2.1</TargetFrameworks>
3+
<TargetFrameworks>netcoreapp3.1;netcoreapp2.1</TargetFrameworks>
44
<TargetFrameworks Condition="!$([MSBuild]::IsOsUnixLike())">$(TargetFrameworks);net461</TargetFrameworks>
55
<Description>The unit tests for our the core abstractions</Description>
66
<AssemblyName>System.IO.Abstractions.Tests</AssemblyName>

0 commit comments

Comments
 (0)