Skip to content
Open
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
Original file line number Diff line number Diff line change
@@ -1 +1 @@

emptyString
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
emptyString
17 changes: 17 additions & 0 deletions src/Verify.Tests/LinesScrubberTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,23 @@ public Task FilterLines()
""");
}

[Fact]
public Task ScrubAllLinesToEmpty()
{
// Scrubbing away every line leaves empty content. It is normalized to the
// "emptyString" sentinel (the same one used for Verify(string.Empty)) so that
// empty content is never written as a snapshot nor passed to a string comparer.
var settings = new VerifySettings();
settings.ScrubLines(removeLine: _ => true);
return Verify(
settings: settings,
target: """
a
b
c
""");
}

[Fact]
public Task ScrubLinesContaining_case_sensitive()
{
Expand Down
14 changes: 11 additions & 3 deletions src/Verify/Verifier/InnerVerifier_Inner.cs
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,14 @@ void Scrub(in Target target)
if (target.TryGetStringBuilder(out var builder))
{
ApplyScrubbers.ApplyForExtension(target.Extension, builder, settings, counter);
// Content scrubbed away entirely is normalized to the same sentinel used for an
// empty root string (see TryGetRootTarget). This keeps empty out of the written
// snapshot and, more importantly, out of any registered string comparer, which may
// assume non-empty input.
if (builder.Length == 0)
{
builder.Append("emptyString");
}
}
}

Expand Down Expand Up @@ -170,9 +178,9 @@ bool TryGetRootTarget(object? root,bool ignoreNullRoot, [NotNullWhen(true)] out
}
else
{
var builder = new StringBuilder(stringRoot);
ApplyScrubbers.ApplyForExtension("txt", builder, settings, counter);
target = new("txt", builder);
var textTarget = new Target("txt", new StringBuilder(stringRoot));
Scrub(textTarget);
target = textTarget;
}

return true;
Expand Down
Loading