Skip to content

Commit

Permalink
Add simplified verification for basic types (#176)
Browse files Browse the repository at this point in the history
  • Loading branch information
SimonCropp authored Jul 25, 2020
1 parent cecec86 commit 0b488bb
Show file tree
Hide file tree
Showing 36 changed files with 299 additions and 70 deletions.
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

0 comments on commit 0b488bb

Please sign in to comment.