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

Add simplified verification for basic types #176

Merged
merged 15 commits into from
Jul 25, 2020
2 changes: 1 addition & 1 deletion docs/build-server.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,5 +52,5 @@ if (BuildServerDetector.Detected)
});
}
```
<sup><a href='/src/Verify.Tests/Snippets/Snippets.cs#L65-L79' title='File snippet `derivetestdirectory` was extracted from'>snippet source</a> | <a href='#snippet-derivetestdirectory' title='Navigate to start of snippet `derivetestdirectory`'>anchor</a></sup>
<sup><a href='/src/Verify.Tests/Snippets/Snippets.cs#L84-L98' title='File snippet `derivetestdirectory` was extracted from'>snippet source</a> | <a href='#snippet-derivetestdirectory' title='Navigate to start of snippet `derivetestdirectory`'>anchor</a></sup>
<!-- endsnippet -->
4 changes: 2 additions & 2 deletions docs/clipboard.md
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ settings.DisableClipboard();
```cs
VerifierSettings.DisableClipboard();
```
<sup><a href='/src/Verify.Tests/Snippets/Snippets.cs#L56-L60' title='File snippet `disableclipboardglobal` was extracted from'>snippet source</a> | <a href='#snippet-disableclipboardglobal' title='Navigate to start of snippet `disableclipboardglobal`'>anchor</a></sup>
<sup><a href='/src/Verify.Tests/Snippets/Snippets.cs#L75-L79' title='File snippet `disableclipboardglobal` was extracted from'>snippet source</a> | <a href='#snippet-disableclipboardglobal' title='Navigate to start of snippet `disableclipboardglobal`'>anchor</a></sup>
<!-- endsnippet -->

If clipboard is disabled for all tests, it can be re-enabled at the test level:
Expand All @@ -88,7 +88,7 @@ If clipboard is disabled for all tests, it can be re-enabled at the test level:
var settings = new VerifySettings();
settings.EnableClipboard();
```
<sup><a href='/src/Verify.Tests/Snippets/Snippets.cs#L46-L51' title='File snippet `enableclipboard` was extracted from'>snippet source</a> | <a href='#snippet-enableclipboard' title='Navigate to start of snippet `enableclipboard`'>anchor</a></sup>
<sup><a href='/src/Verify.Tests/Snippets/Snippets.cs#L65-L70' title='File snippet `enableclipboard` was extracted from'>snippet source</a> | <a href='#snippet-enableclipboard' title='Navigate to start of snippet `enableclipboard`'>anchor</a></sup>
<!-- endsnippet -->


Expand Down
17 changes: 16 additions & 1 deletion docs/mdsource/serializer-settings.source.md
Original file line number Diff line number Diff line change
Expand Up @@ -209,4 +209,19 @@ This can be disabled:

snippet: DisableNewLineEscaping

snippet: SerializationTests.NewLineNotEscapedInProperty.verified.txt
snippet: SerializationTests.NewLineNotEscapedInProperty.verified.txt


## TreatAsString

Certain types, when passed directly in to Verify, are written directly without going through json serialization.

The default mapping is:

snippet: typeToStringMapping

This bypasses the Guid and DateTime scrubbing mentioned above.

Extra types can be added to this mapping:

snippet: TreatAsString
73 changes: 71 additions & 2 deletions docs/serializer-settings.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,8 @@ Serialization settings can be customized at three levels:
* [Ignore member by expressions](#ignore-member-by-expressions)
* [Ignore member by name](#ignore-member-by-name)
* [Members that throw](#members-that-throw)
* [DisableNewLineEscaping](#disablenewlineescaping)<!-- endtoc -->
* [DisableNewLineEscaping](#disablenewlineescaping)
* [TreatAsString](#treatasstring)<!-- endtoc -->


## Not valid json
Expand Down Expand Up @@ -257,7 +258,7 @@ settings.AddExtraSettings(_ =>
_.TypeNameHandling = TypeNameHandling.All;
});
```
<sup><a href='/src/Verify.Tests/Snippets/Snippets.cs#L104-L113' title='File snippet `extrasettings` was extracted from'>snippet source</a> | <a href='#snippet-extrasettings' title='Navigate to start of snippet `extrasettings`'>anchor</a></sup>
<sup><a href='/src/Verify.Tests/Snippets/Snippets.cs#L123-L132' title='File snippet `extrasettings` was extracted from'>snippet source</a> | <a href='#snippet-extrasettings' title='Navigate to start of snippet `extrasettings`'>anchor</a></sup>
<!-- endsnippet -->


Expand Down Expand Up @@ -641,3 +642,71 @@ b\nc'
```
<sup><a href='/src/Verify.Tests/Serialization/SerializationTests.NewLineNotEscapedInProperty.verified.txt#L1-L4' title='File snippet `SerializationTests.NewLineNotEscapedInProperty.verified.txt` was extracted from'>snippet source</a> | <a href='#snippet-SerializationTests.NewLineNotEscapedInProperty.verified.txt' title='Navigate to start of snippet `SerializationTests.NewLineNotEscapedInProperty.verified.txt`'>anchor</a></sup>
<!-- endsnippet -->


## TreatAsString

Certain types, when passed directly in to Verify, are written directly without going through json serialization.

The default mapping is:

<!-- snippet: typeToStringMapping -->
<a id='snippet-typetostringmapping'/></a>
```cs
{typeof(string), (target, settings) => (string) target},
{typeof(bool), (target, settings) => ((bool) target).ToString()},
{typeof(short), (target, settings) => ((short) target).ToString()},
{typeof(ushort), (target, settings) => ((ushort) target).ToString()},
{typeof(int), (target, settings) => ((int) target).ToString()},
{typeof(uint), (target, settings) => ((uint) target).ToString()},
{typeof(long), (target, settings) => ((long) target).ToString()},
{typeof(ulong), (target, settings) => ((ulong) target).ToString()},
{typeof(decimal), (target, settings) => ((decimal) target).ToString(CultureInfo.InvariantCulture)},
{typeof(float), (target, settings) => ((float) target).ToString(CultureInfo.InvariantCulture)},
{typeof(Guid), (target, settings) => ((Guid) target).ToString()},
{typeof(DateTime), (target, settings) =>
{
var dateTime = (DateTime) target;
return dateTime.ToString("yyyy-MM-ddTHH:mm:ss.FFFFFFFz");
}
},
{typeof(DateTimeOffset), (target, settings) =>
{
var dateTimeOffset = (DateTimeOffset) target;
return dateTimeOffset.ToString("yyyy-MM-ddTHH:mm:ss.FFFFFFFz");
}
},
{typeof(XmlNode), (target, settings) =>
{
var converted = (XmlNode) target;
var document = XDocument.Parse(converted.OuterXml);
settings.UseExtension("xml");
return document.ToString();
}
},
{typeof(XDocument), (target, settings) =>
{
var converted = (XDocument) target;
settings.UseExtension("xml");
return converted.ToString();
}
}
```
<sup><a href='/src/Verify/Serialization/VerifierSettings.cs#L18-L57' title='File snippet `typetostringmapping` was extracted from'>snippet source</a> | <a href='#snippet-typetostringmapping' title='Navigate to start of snippet `typetostringmapping`'>anchor</a></sup>
<!-- endsnippet -->

This bypasses the Guid and DateTime scrubbing mentioned above.

Extra types can be added to this mapping:

<!-- snippet: TreatAsString -->
<a id='snippet-treatasstring'/></a>
```cs
VerifierSettings.TreatAsString<ClassWithToString>(
(target, verifySettings) =>
{
return target.Property;
});
```
<sup><a href='/src/Verify.Tests/Snippets/Snippets.cs#L46-L54' title='File snippet `treatasstring` was extracted from'>snippet source</a> | <a href='#snippet-treatasstring' title='Navigate to start of snippet `treatasstring`'>anchor</a></sup>
<!-- endsnippet -->
2 changes: 1 addition & 1 deletion docs/verify-options.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ This can be done using `AutoVerify()`:
var settings = new VerifySettings();
settings.AutoVerify();
```
<sup><a href='/src/Verify.Tests/Snippets/Snippets.cs#L84-L89' title='File snippet `autoverify` was extracted from'>snippet source</a> | <a href='#snippet-autoverify' title='Navigate to start of snippet `autoverify`'>anchor</a></sup>
<sup><a href='/src/Verify.Tests/Snippets/Snippets.cs#L103-L108' title='File snippet `autoverify` was extracted from'>snippet source</a> | <a href='#snippet-autoverify' title='Navigate to start of snippet `autoverify`'>anchor</a></sup>
<!-- endsnippet -->

Note that auto accepted changes in `.verified.` files remain visible in source control tooling.
Expand Down
18 changes: 0 additions & 18 deletions src/Verify.MSTest/VerifyBase_Text.cs

This file was deleted.

18 changes: 0 additions & 18 deletions src/Verify.NUnit/Verifier_Text.cs

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
2000-01-01T01:01:01+0
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
ebced679-45d3-4653-8791-3d969c4a986c
1 change: 1 addition & 0 deletions src/Verify.Tests/SimpleTypeTests.Null.verified.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
null
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
null
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
True
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
2000-01-01T01:01:01+0
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
2000-01-01T01:01:01.001+1
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
1
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
ebced679-45d3-4653-8791-3d969c4a986c
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
1
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
1
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
1
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
1
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
theString
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
1
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
1
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
1
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
<body>
<node>text</node>
</body>
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
?xml: {
@version: '1.0',
@encoding: 'UTF-8'
},
body: {
node: 'text'
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
theString
77 changes: 77 additions & 0 deletions src/Verify.Tests/SimpleTypeTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Xml;
using System.Xml.Linq;
using VerifyTests;
using VerifyXunit;
using Xunit;

[UsesVerify]
public class SimpleTypeTests
{
[Theory]
[MemberData(nameof(GetData))]
public Task Run(object arg)
{
var settings = new VerifySettings();
settings.UseParameters(arg.GetType());
return Verifier.Verify(arg, settings);
}

[Fact]
public Task StringWrappedInTask()
{
return Verifier.Verify(Task.FromResult("theString"));
}

[Fact]
public Task NullWrappedInTask()
{
return Verifier.Verify(Task.FromResult<object?>(null));
}

[Fact]
public Task Null()
{
return Verifier.Verify((object?)null);
}

[Fact]
public Task DateTimeWrappedInTask()
{
return Verifier.Verify(Task.FromResult(new DateTime(2000, 1, 1, 1, 1, 1, DateTimeKind.Utc)));
}

[Fact]
public Task GuidWrappedInTask()
{
return Verifier.Verify(Task.FromResult(new Guid("ebced679-45d3-4653-8791-3d969c4a986c")));
}

public static IEnumerable<object[]> GetData()
{
yield return new object[] {"theString"};
yield return new object[] {true};
yield return new object[] {(long) 1};
yield return new object[] {(short) 1};
yield return new object[] {1};
yield return new object[] {(uint) 1};
yield return new object[] {(ulong) 1};
yield return new object[] {(ushort) 1};
yield return new object[] {(decimal) 1};
yield return new object[] {(float) 1};
yield return new object[] {new Guid("ebced679-45d3-4653-8791-3d969c4a986c")};
var xml = @"<?xml version=""1.0"" encoding=""UTF-8""?>
<body>
<node>text</node>
</body>";
var xmlDocument = new XmlDocument();
xmlDocument.LoadXml(xml);
yield return new object[] {xmlDocument};
var xDocument = XDocument.Parse(xml);
yield return new object[] {xDocument};
yield return new object[] {new DateTime(2000, 1, 1, 1, 1, 1, DateTimeKind.Utc)};
yield return new object[] {new DateTimeOffset(2000, 1, 1, 1, 1, 1, 1, TimeSpan.FromHours(1))};
}
}
19 changes: 19 additions & 0 deletions src/Verify.Tests/Snippets/Snippets.cs
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,25 @@ void DisableClipboard()
#endregion
}

void TreatAsString()
{
#region TreatAsString

VerifierSettings.TreatAsString<ClassWithToString>(
(target, verifySettings) =>
{
return target.Property;
});

#endregion
}

class ClassWithToString
{
public string Property { get; set; } = null!;
}


void EnableClipboard()
{
#region EnableClipboard
Expand Down
2 changes: 1 addition & 1 deletion src/Verify.Tests/Tests.TaskResult.verified.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
'value'
value
4 changes: 2 additions & 2 deletions src/Verify.Tests/Tests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -124,9 +124,9 @@ static async IAsyncEnumerable<string> AsyncEnumerableMethod()
}

[Fact]
public async Task AsyncEnumerable()
public Task AsyncEnumerable()
{
await Verifier.Verify(AsyncEnumerableMethod());
return Verifier.Verify(AsyncEnumerableMethod());
}

static async IAsyncEnumerable<DisposableTarget> AsyncEnumerableDisposableMethod(DisposableTarget target)
Expand Down
18 changes: 0 additions & 18 deletions src/Verify.Xunit/Verifier_Text.cs

This file was deleted.

Loading