Skip to content

Commit f8f1c30

Browse files
committed
.
1 parent c13a5db commit f8f1c30

File tree

10 files changed

+124
-206
lines changed

10 files changed

+124
-206
lines changed

src/Verify.Tests/Converters/ReEntrantConverterTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,14 @@ public static void InheritedInit()
77
VerifierSettings.RegisterFileConverter<Target>(Convert);
88
}
99

10-
static ConversionResult Convert(Stream target, IReadOnlyDictionary<string, object> settings)
10+
static ConversionResult Convert(Stream target, VerifySettings settings)
1111
{
1212
var reader = new StreamReader(target);
1313
var readToEnd = reader.ReadToEnd();
1414
return Convert(new Target {Property = readToEnd}, settings);
1515
}
1616

17-
static ConversionResult Convert(Target instance, IReadOnlyDictionary<string, object> settings)
17+
static ConversionResult Convert(Target instance, VerifySettings settings)
1818
{
1919
var stream = new MemoryStream();
2020
var writer = new StreamWriter(stream);
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
namespace VerifyTests;
2+
3+
static class XmlScrubber
4+
{
5+
public static string Scrub(XContainer target, VerifySettings settings)
6+
{
7+
var counter = Counter.Current;
8+
var serialization = settings.serialization;
9+
var elements = target
10+
.Descendants()
11+
.ToList();
12+
13+
foreach (var element in elements)
14+
{
15+
if (serialization.TryGetScrubOrIgnoreByName(element.Name.LocalName, out var scrubOrIgnore))
16+
{
17+
if (scrubOrIgnore == ScrubOrIgnore.Ignore)
18+
{
19+
element.Remove();
20+
}
21+
else
22+
{
23+
element.Value = "Scrubbed";
24+
}
25+
26+
continue;
27+
}
28+
29+
ScrubAttributes(element, serialization, settings, counter);
30+
}
31+
32+
foreach (var node in target.DescendantNodes())
33+
{
34+
switch (node)
35+
{
36+
case XText text:
37+
text.Value = ConvertValue(text.Value, settings, counter);
38+
continue;
39+
case XComment comment:
40+
comment.Value = ConvertValue(comment.Value, settings, counter);
41+
continue;
42+
}
43+
}
44+
45+
return target.ToString();
46+
}
47+
48+
static string ConvertValue(string value, VerifySettings settings, Counter counter)
49+
{
50+
var span = value.AsSpan();
51+
if (counter.TryConvert(span, out var result))
52+
{
53+
return result;
54+
}
55+
56+
return ApplyScrubbers.ApplyForPropertyValue(span, settings, counter).ToString();
57+
}
58+
59+
static void ScrubAttributes(XElement node, SerializationSettings serialization, VerifySettings settings, Counter counter)
60+
{
61+
foreach (var attribute in node
62+
.Attributes()
63+
.ToList())
64+
{
65+
if (serialization.TryGetScrubOrIgnoreByName(attribute.Name.LocalName, out var scrubOrIgnore))
66+
{
67+
if (scrubOrIgnore == ScrubOrIgnore.Ignore)
68+
{
69+
attribute.Remove();
70+
}
71+
else
72+
{
73+
attribute.Value = "Scrubbed";
74+
}
75+
76+
continue;
77+
}
78+
79+
var span = attribute.Value.AsSpan();
80+
if (counter.TryConvert(span, out var result))
81+
{
82+
attribute.Value = result;
83+
}
84+
else
85+
{
86+
attribute.Value = ApplyScrubbers.ApplyForPropertyValue(span, settings, counter).ToString();
87+
}
88+
}
89+
}
90+
}
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
namespace VerifyTests;
22

3-
public delegate Task<ConversionResult> AsyncConversion<in T>(T target, IReadOnlyDictionary<string, object> context);
3+
public delegate Task<ConversionResult> AsyncConversion<in T>(T target, VerifySettings settings);
44

5-
public delegate Task<ConversionResult> AsyncConversion(object target, IReadOnlyDictionary<string, object> context);
5+
public delegate Task<ConversionResult> AsyncConversion(object target, VerifySettings settings);
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
namespace VerifyTests;
22

3-
public delegate ConversionResult Conversion<in T>(T target, IReadOnlyDictionary<string, object> context);
3+
public delegate ConversionResult Conversion<in T>(T target, VerifySettings settings);
44

5-
public delegate ConversionResult Conversion(object target, IReadOnlyDictionary<string, object> context);
5+
public delegate ConversionResult Conversion(object target, VerifySettings settings);
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
namespace VerifyTests;
22

3-
public delegate Task<ConversionResult> AsyncStreamConversion(string? name, Stream target, IReadOnlyDictionary<string, object> context);
3+
public delegate Task<ConversionResult> AsyncStreamConversion(string? name, Stream target, VerifySettings settings);
44

5-
public delegate ConversionResult StreamConversion(string? name, Stream target, IReadOnlyDictionary<string, object> context);
5+
public delegate ConversionResult StreamConversion(string? name, Stream target, VerifySettings settings);

src/Verify/Splitters/Settings_Extension.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,22 +16,22 @@ public static void RegisterFileConverter(
1616
Conversion<Stream> conversion) =>
1717
RegisterFileConverter(
1818
fromExtension,
19-
(stream, context) => Task.FromResult(conversion(stream, context)));
19+
(stream, settings) => Task.FromResult(conversion(stream, settings)));
2020

2121
[Obsolete("Use RegisterStreamConverter instead")]
2222
public static void RegisterFileConverter(
2323
string fromExtension,
2424
AsyncConversion<Stream> conversion) =>
2525
RegisterStreamConverter(
2626
fromExtension,
27-
(_, stream, context) => conversion(stream, context));
27+
(_, stream, settings) => conversion(stream, settings));
2828

2929
public static void RegisterStreamConverter(
3030
string extension,
3131
StreamConversion conversion) =>
3232
RegisterStreamConverter(
3333
extension,
34-
(name, stream, context) => Task.FromResult(conversion(name, stream, context)));
34+
(name, stream, settings) => Task.FromResult(conversion(name, stream, settings)));
3535

3636
public static void RegisterStreamConverter(
3737
string extension,

src/Verify/Splitters/Settings_Typed.cs

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,22 @@ public static partial class VerifierSettings
77
static void InitBuiltInTypedConverters() =>
88
typedConverters =
99
[
10+
// XContainer (XDocument, XElement) - scrub and return as xml
11+
new(
12+
(target, settings) => Task.FromResult(new ConversionResult(null, "xml", XmlScrubber.Scrub((XContainer) target, settings))),
13+
(target, _) => target is XContainer),
14+
15+
// XmlNode - convert to XDocument, scrub, and return as xml
16+
new(
17+
(target, settings) =>
18+
{
19+
using var reader = new XmlNodeReader((XmlNode) target);
20+
reader.MoveToContent();
21+
var xdoc = XDocument.Load(reader);
22+
return Task.FromResult(new ConversionResult(null, "xml", XmlScrubber.Scrub(xdoc, settings)));
23+
},
24+
(target, _) => target is XmlNode),
25+
1026
// StringBuilder - use "txt" extension
1127
new(
1228
(target, _) => Task.FromResult(new ConversionResult(null, "txt", (StringBuilder) target)),
@@ -36,7 +52,7 @@ public static void RegisterFileConverter<T>(
3652
{
3753
InnerVerifier.ThrowIfVerifyHasBeenRun();
3854
RegisterFileConverter(
39-
(target, context) => Task.FromResult(conversion(target, context)),
55+
(target, settings) => Task.FromResult(conversion(target, settings)),
4056
canConvert);
4157
}
4258

@@ -45,7 +61,7 @@ public static void RegisterFileConverter<T>(
4561
CanConvert<T>? canConvert = null)
4662
{
4763
InnerVerifier.ThrowIfVerifyHasBeenRun();
48-
var converter = new TypeConverter((target, context) => conversion((T) target, context), DefaultCanConvert(canConvert));
64+
var converter = new TypeConverter((target, settings) => conversion((T) target, settings), DefaultCanConvert(canConvert));
4965
// Insert at beginning so user converters take precedence over built-in converters
5066
typedConverters.Insert(0, converter);
5167
}
@@ -56,7 +72,7 @@ public static void RegisterFileConverter(
5672
{
5773
InnerVerifier.ThrowIfVerifyHasBeenRun();
5874
RegisterFileConverter(
59-
(target, context) => Task.FromResult(conversion(target, context)),
75+
(target, settings) => Task.FromResult(conversion(target, settings)),
6076
canConvert);
6177
}
6278

src/Verify/Verifier/InnerVerifier_Inner.cs

Lines changed: 1 addition & 105 deletions
Original file line numberDiff line numberDiff line change
@@ -142,25 +142,6 @@ async Task<VerifyResult> VerifyInner(object? root, Func<Task>? cleanup, IEnumera
142142
return (results, cleanup, false, converterInfos);
143143
}
144144

145-
// Handle XContainer (XDocument, XElement) - apply scrubbers
146-
if (data is XContainer container)
147-
{
148-
var xmlString = ConvertXmlToString(container);
149-
results.Add(new("xml", xmlString, target.Name));
150-
return (results, cleanup, true, converterInfos);
151-
}
152-
153-
// Handle XmlNode - apply scrubbers
154-
if (data is XmlNode node)
155-
{
156-
using var reader = new XmlNodeReader(node);
157-
reader.MoveToContent();
158-
var xdoc = XDocument.Load(reader);
159-
var xmlString = ConvertXmlToString(xdoc);
160-
results.Add(new("xml", xmlString, target.Name));
161-
return (results, cleanup, true, converterInfos);
162-
}
163-
164145
// Handle FileStream (get extension from filename) - apply scrubbers
165146
if (data is FileStream fileStream)
166147
{
@@ -226,7 +207,7 @@ async Task<VerifyResult> VerifyInner(object? root, Func<Task>? cleanup, IEnumera
226207
// Try typed converter - apply scrubbers
227208
if (VerifierSettings.TryGetTypedConverter(data, settings, out var converter))
228209
{
229-
var conversionResult = await converter.Conversion(data, settings.Context);
210+
var conversionResult = await converter.Conversion(data, settings);
230211
if (conversionResult.Cleanup != null)
231212
{
232213
cleanup += conversionResult.Cleanup;
@@ -314,91 +295,6 @@ async Task<VerifyResult> VerifyInner(object? root, Func<Task>? cleanup, IEnumera
314295
return (results, cleanup, converterInfos);
315296
}
316297

317-
string ConvertXmlToString(XContainer target)
318-
{
319-
var serialization = settings.serialization;
320-
var elements = target
321-
.Descendants()
322-
.ToList();
323-
324-
foreach (var element in elements)
325-
{
326-
if (serialization.TryGetScrubOrIgnoreByName(element.Name.LocalName, out var scrubOrIgnore))
327-
{
328-
if (scrubOrIgnore == ScrubOrIgnore.Ignore)
329-
{
330-
element.Remove();
331-
}
332-
else
333-
{
334-
element.Value = "Scrubbed";
335-
}
336-
337-
continue;
338-
}
339-
340-
ScrubXmlAttributes(element, serialization);
341-
}
342-
343-
foreach (var node in target.DescendantNodes())
344-
{
345-
switch (node)
346-
{
347-
case XText text:
348-
text.Value = ConvertXmlValue(text.Value);
349-
continue;
350-
case XComment comment:
351-
comment.Value = ConvertXmlValue(comment.Value);
352-
continue;
353-
}
354-
}
355-
356-
return target.ToString();
357-
}
358-
359-
string ConvertXmlValue(string value)
360-
{
361-
var span = value.AsSpan();
362-
if (counter.TryConvert(span, out var result))
363-
{
364-
return result;
365-
}
366-
367-
return ApplyScrubbers.ApplyForPropertyValue(span, settings, counter).ToString();
368-
}
369-
370-
void ScrubXmlAttributes(XElement node, SerializationSettings serialization)
371-
{
372-
foreach (var attribute in node
373-
.Attributes()
374-
.ToList())
375-
{
376-
if (serialization.TryGetScrubOrIgnoreByName(attribute.Name.LocalName, out var scrubOrIgnore))
377-
{
378-
if (scrubOrIgnore == ScrubOrIgnore.Ignore)
379-
{
380-
attribute.Remove();
381-
}
382-
else
383-
{
384-
attribute.Value = "Scrubbed";
385-
}
386-
387-
continue;
388-
}
389-
390-
var span = attribute.Value.AsSpan();
391-
if (counter.TryConvert(span, out var result))
392-
{
393-
attribute.Value = result;
394-
}
395-
else
396-
{
397-
attribute.Value = ApplyScrubbers.ApplyForPropertyValue(span, settings, counter).ToString();
398-
}
399-
}
400-
}
401-
402298
bool TryGetRootTarget(object? root, bool ignoreNullRoot, [NotNullWhen(true)] out ResolvedTarget? target)
403299
{
404300
var appends = VerifierSettings.GetJsonAppenders(settings);

src/Verify/Verifier/InnerVerifier_Stream.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ public async Task<VerifyResult> VerifyStream(Stream? stream, string extension, o
126126
}
127127

128128
var targetStream = target.StreamData;
129-
var result = await conversion(target.Name, targetStream, settings.Context);
129+
var result = await conversion(target.Name, targetStream, settings);
130130
if (result.Cleanup != null)
131131
{
132132
cleanup += result.Cleanup;

0 commit comments

Comments
 (0)