Skip to content

Commit

Permalink
Add File scrubber (#677)
Browse files Browse the repository at this point in the history
  • Loading branch information
SimonCropp authored Oct 19, 2022
1 parent 8ae4383 commit 6fec081
Show file tree
Hide file tree
Showing 14 changed files with 120 additions and 35 deletions.
10 changes: 9 additions & 1 deletion docs/mdsource/verify-directory.source.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,12 @@ snippet: VerifyDirectoryFilterXunit

An optional `info` parameter can be supplied to add more context to the test. The instance passed will be json serialized.

snippet: VerifyDirectoryWithInfo
snippet: VerifyDirectoryWithInfo


## FileScrubber

`VerifyDirectory` has an optional parameter `fileScrubber` that allows file specific scrubbing:

snippet: VerifyDirectoryWithFileScrubber

27 changes: 26 additions & 1 deletion docs/verify-directory.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ public Task WithDirectoryFiltered() =>
RecurseSubdirectories = false
});
```
<sup><a href='/src/Verify.Xunit.Tests/Tests.cs#L103-L116' title='Snippet source file'>snippet source</a> | <a href='#snippet-verifydirectoryfilterxunit' title='Start of snippet'>anchor</a></sup>
<sup><a href='/src/Verify.Xunit.Tests/Tests.cs#L120-L133' title='Snippet source file'>snippet source</a> | <a href='#snippet-verifydirectoryfilterxunit' title='Start of snippet'>anchor</a></sup>
<!-- endSnippet -->


Expand All @@ -55,3 +55,28 @@ public Task VerifyDirectoryWithInfo() =>
```
<sup><a href='/src/Verify.Xunit.Tests/Tests.cs#L91-L99' title='Snippet source file'>snippet source</a> | <a href='#snippet-verifydirectorywithinfo' title='Start of snippet'>anchor</a></sup>
<!-- endSnippet -->


## FileScrubber

`VerifyDirectory` has an optional parameter `fileScrubber` that allows file specific scrubbing:

<!-- snippet: VerifyDirectoryWithFileScrubber -->
<a id='snippet-verifydirectorywithfilescrubber'></a>
```cs
[Fact]
public Task VerifyDirectoryWithFileScrubber() =>
VerifyDirectory(
directoryToVerify,
fileScrubber: (path, builder) =>
{
if (Path.GetFileName(path) == "TextDoc.txt")
{
builder.Clear();
builder.Append("New text");
}
});
```
<sup><a href='/src/Verify.Xunit.Tests/Tests.cs#L101-L116' title='Snippet source file'>snippet source</a> | <a href='#snippet-verifydirectorywithfilescrubber' title='Start of snippet'>anchor</a></sup>
<!-- endSnippet -->

12 changes: 8 additions & 4 deletions src/Verify.Expecto/Verifier_Directory.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,11 @@ public static Task<VerifyResult> VerifyDirectory(
EnumerationOptions? options = null,
VerifySettings? settings = null,
object? info = null,
FileScrubber? fileScrubber = null,
[CallerFilePath] string sourceFile = "")
{
var assembly = Assembly.GetCallingAssembly()!;
return Verify(settings, assembly, sourceFile, name, _ => _.VerifyDirectory(path, include, pattern, options, info), true);
return Verify(settings, assembly, sourceFile, name, _ => _.VerifyDirectory(path, include, pattern, options, info, fileScrubber), true);
}

/// <summary>
Expand All @@ -35,8 +36,9 @@ public static Task<VerifyResult> VerifyDirectory(
EnumerationOptions? options = null,
VerifySettings? settings = null,
object? info = null,
FileScrubber? fileScrubber = null,
[CallerFilePath] string sourceFile = "") =>
VerifyDirectory(name, path.FullName, include, pattern, options, settings, sourceFile);
VerifyDirectory(name, path.FullName, include, pattern, options, settings, info, fileScrubber, sourceFile);

#else

Expand All @@ -51,10 +53,11 @@ public static Task<VerifyResult> VerifyDirectory(
SearchOption option = SearchOption.AllDirectories,
VerifySettings? settings = null,
object? info = null,
FileScrubber? fileScrubber = null,
[CallerFilePath] string sourceFile = "")
{
var assembly = Assembly.GetCallingAssembly()!;
return Verify(settings, assembly, sourceFile, name, _ => _.VerifyDirectory(path, include, pattern, option, info), true);
return Verify(settings, assembly, sourceFile, name, _ => _.VerifyDirectory(path, include, pattern, option, info, fileScrubber), true);
}

/// <summary>
Expand All @@ -69,8 +72,9 @@ public static Task<VerifyResult> VerifyDirectory(
SearchOption option = SearchOption.AllDirectories,
VerifySettings? settings = null,
object? info = null,
FileScrubber? fileScrubber = null,
[CallerFilePath] string sourceFile = "") =>
VerifyDirectory(name, path.FullName, include, pattern, option, settings, sourceFile);
VerifyDirectory(name, path.FullName, include, pattern, option, settings, info, fileScrubber, sourceFile);

#endif

Expand Down
28 changes: 16 additions & 12 deletions src/Verify.MSTest/VerifyBase_Directory.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,10 @@ public SettingsTask VerifyDirectory(
string? pattern = null,
EnumerationOptions? options = null,
VerifySettings? settings = null,
[CallerFilePath] string sourceFile = "",
object? info = null) =>
Verify(settings, sourceFile, _ => _.VerifyDirectory(path, include, pattern, options, info), true);
object? info = null,
FileScrubber? fileScrubber = null,
[CallerFilePath] string sourceFile = "") =>
Verify(settings, sourceFile, _ => _.VerifyDirectory(path, include, pattern, options, info, fileScrubber), true);

/// <summary>
/// Verifies the contents of <param name="path"/>.
Expand All @@ -27,9 +28,10 @@ public SettingsTask VerifyDirectory(
string? pattern = null,
EnumerationOptions? options = null,
VerifySettings? settings = null,
[CallerFilePath] string sourceFile = "",
object? info = null) =>
VerifyDirectory(path.FullName, include, pattern, options, settings, sourceFile);
object? info = null,
FileScrubber? fileScrubber = null,
[CallerFilePath] string sourceFile = "") =>
VerifyDirectory(path.FullName, include, pattern, options, settings, info, fileScrubber, sourceFile);
#else

/// <summary>
Expand All @@ -41,9 +43,10 @@ public SettingsTask VerifyDirectory(
string? pattern = null,
SearchOption option = SearchOption.AllDirectories,
VerifySettings? settings = null,
[CallerFilePath] string sourceFile = "",
object? info = null) =>
Verify(settings, sourceFile, _ => _.VerifyDirectory(path, include, pattern, option, info), true);
object? info = null,
FileScrubber? fileScrubber = null,
[CallerFilePath] string sourceFile = "") =>
Verify(settings, sourceFile, _ => _.VerifyDirectory(path, include, pattern, option, info, fileScrubber), true);

/// <summary>
/// Verifies the contents of <param name="path"/>.
Expand All @@ -55,8 +58,9 @@ public SettingsTask VerifyDirectory(
string? pattern = null,
SearchOption option = SearchOption.AllDirectories,
VerifySettings? settings = null,
[CallerFilePath] string sourceFile = "",
object? info = null) =>
VerifyDirectory(path.FullName, include, pattern, option, settings, sourceFile);
object? info = null,
FileScrubber? fileScrubber = null,
[CallerFilePath] string sourceFile = "") =>
VerifyDirectory(path.FullName, include, pattern, option, settings, info, fileScrubber, sourceFile);
#endif
}
12 changes: 8 additions & 4 deletions src/Verify.NUnit/Verifier_Directory.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,9 @@ public static SettingsTask VerifyDirectory(
EnumerationOptions? options = null,
VerifySettings? settings = null,
object? info = null,
FileScrubber? fileScrubber = null,
[CallerFilePath] string sourceFile = "") =>
Verify(settings, sourceFile, _ => _.VerifyDirectory(path, include, pattern, options, info), true);
Verify(settings, sourceFile, _ => _.VerifyDirectory(path, include, pattern, options, info, fileScrubber), true);

/// <summary>
/// Verifies the contents of <param name="path"/>.
Expand All @@ -28,8 +29,9 @@ public static SettingsTask VerifyDirectory(
EnumerationOptions? options = null,
VerifySettings? settings = null,
object? info = null,
FileScrubber? fileScrubber = null,
[CallerFilePath] string sourceFile = "") =>
VerifyDirectory(path.FullName, include, pattern, options, settings, sourceFile);
VerifyDirectory(path.FullName, include, pattern, options, settings, info, fileScrubber, sourceFile);

#else

Expand All @@ -43,8 +45,9 @@ public static SettingsTask VerifyDirectory(
SearchOption option = SearchOption.AllDirectories,
VerifySettings? settings = null,
object? info = null,
FileScrubber? fileScrubber = null,
[CallerFilePath] string sourceFile = "") =>
Verify(settings, sourceFile, _ => _.VerifyDirectory(path, include, pattern, option, info), true);
Verify(settings, sourceFile, _ => _.VerifyDirectory(path, include, pattern, option, info, fileScrubber), true);

/// <summary>
/// Verifies the contents of <param name="path"/>.
Expand All @@ -57,8 +60,9 @@ public static SettingsTask VerifyDirectory(
SearchOption option = SearchOption.AllDirectories,
VerifySettings? settings = null,
object? info = null,
FileScrubber? fileScrubber = null,
[CallerFilePath] string sourceFile = "") =>
VerifyDirectory(path.FullName, include, pattern, option, settings, sourceFile);
VerifyDirectory(path.FullName, include, pattern, option, settings, info, fileScrubber, sourceFile);

#endif

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
New text
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Another text content
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Some text content
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Text content
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
content
17 changes: 17 additions & 0 deletions src/Verify.Xunit.Tests/Tests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,23 @@ public Task VerifyDirectoryWithInfo() =>

#endregion

#region VerifyDirectoryWithFileScrubber

[Fact]
public Task VerifyDirectoryWithFileScrubber() =>
VerifyDirectory(
directoryToVerify,
fileScrubber: (path, builder) =>
{
if (Path.GetFileName(path) == "TextDoc.txt")
{
builder.Clear();
builder.Append("New text");
}
});

#endregion

#if NET6_0_OR_GREATER

#region VerifyDirectoryFilterXunit
Expand Down
12 changes: 8 additions & 4 deletions src/Verify.Xunit/Verifier_Directory.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,9 @@ public static SettingsTask VerifyDirectory(
EnumerationOptions? options = null,
VerifySettings? settings = null,
object? info = null,
FileScrubber? fileScrubber = null,
[CallerFilePath] string sourceFile = "") =>
Verify(settings, sourceFile, _ => _.VerifyDirectory(path, include, pattern, options, info), true);
Verify(settings, sourceFile, _ => _.VerifyDirectory(path, include, pattern, options, info, fileScrubber), true);

/// <summary>
/// Verifies the contents of <param name="path"/>.
Expand All @@ -28,8 +29,9 @@ public static SettingsTask VerifyDirectory(
EnumerationOptions? options = null,
VerifySettings? settings = null,
object? info = null,
FileScrubber? fileScrubber = null,
[CallerFilePath] string sourceFile = "") =>
VerifyDirectory(path.FullName, include, pattern, options, settings, sourceFile);
VerifyDirectory(path.FullName, include, pattern, options, settings, info, fileScrubber, sourceFile);

#else

Expand All @@ -43,8 +45,9 @@ public static SettingsTask VerifyDirectory(
SearchOption option = SearchOption.AllDirectories,
VerifySettings? settings = null,
object? info = null,
FileScrubber? fileScrubber = null,
[CallerFilePath] string sourceFile = "") =>
Verify(settings, sourceFile, _ => _.VerifyDirectory(path, include, pattern, option, info), true);
Verify(settings, sourceFile, _ => _.VerifyDirectory(path, include, pattern, option, info, fileScrubber), true);

/// <summary>
/// Verifies the contents of <param name="path"/>.
Expand All @@ -57,8 +60,9 @@ public static SettingsTask VerifyDirectory(
SearchOption option = SearchOption.AllDirectories,
VerifySettings? settings = null,
object? info = null,
FileScrubber? fileScrubber = null,
[CallerFilePath] string sourceFile = "") =>
VerifyDirectory(path.FullName, include, pattern, option, settings, sourceFile);
VerifyDirectory(path.FullName, include, pattern, option, settings, info, fileScrubber, sourceFile);

#endif
}
3 changes: 3 additions & 0 deletions src/Verify/Verifier/FileScrubber.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
namespace VerifyTests;

public delegate void FileScrubber(string path, StringBuilder builder);
29 changes: 20 additions & 9 deletions src/Verify/Verifier/InnerVerifier_Directory.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,13 @@
{
#if NETSTANDARD2_1 || NETCOREAPP3_0_OR_GREATER || NET5_0_OR_GREATER

public async Task<VerifyResult> VerifyDirectory(string path, Func<string, bool>? include, string? pattern, EnumerationOptions? option, object? info)
public async Task<VerifyResult> VerifyDirectory(
string path,
Func<string, bool>? include,
string? pattern,
EnumerationOptions? option,
object? info,
FileScrubber? fileScrubber)
{
Guard.DirectoryExists(path, nameof(path));
path = Path.GetFullPath(path);
Expand All @@ -18,14 +24,15 @@ public async Task<VerifyResult> VerifyDirectory(string path, Func<string, bool>?
path,
pattern,
option),
info)
info,
fileScrubber)
.ToList();
return await VerifyInner(targets);
}

#else

public async Task<VerifyResult> VerifyDirectory(string path, Func<string, bool>? include, string? pattern, SearchOption option, object? info)
public async Task<VerifyResult> VerifyDirectory(string path, Func<string, bool>? include, string? pattern, SearchOption option, object? info, FileScrubber? fileScrubber)
{
Guard.DirectoryExists(path, nameof(path));
path = Path.GetFullPath(path);
Expand All @@ -37,24 +44,26 @@ public async Task<VerifyResult> VerifyDirectory(string path, Func<string, bool>?
path,
pattern,
option),
info)
info,
fileScrubber)
.ToList();
return await VerifyInner(targets);
}

#endif

async IAsyncEnumerable<Target> ToTargets(string path, Func<string, bool>? include, IEnumerable<string> enumerateFiles, object? info)
async IAsyncEnumerable<Target> ToTargets(string path, Func<string, bool>? include, IEnumerable<string> enumerateFiles, object? info, FileScrubber? fileScrubber)
{
if (info is not null)
{
yield return new(
VerifierSettings.TxtOrJson,
JsonFormatter.AsJson(
settings,
counter,
info));
settings,
counter,
info));
}

if (include == null)
{
include = _ => true;
Expand Down Expand Up @@ -88,9 +97,11 @@ async IAsyncEnumerable<Target> ToTargets(string path, Func<string, bool>? includ

if (FileExtensions.IsText(extension))
{
var builder = await IoHelpers.ReadStringBuilderWithFixedLines(file);
fileScrubber?.Invoke(file, builder);
yield return new(
extension,
await IoHelpers.ReadStringBuilderWithFixedLines(file),
builder,
name);
}
else
Expand Down

0 comments on commit 6fec081

Please sign in to comment.