Skip to content

Commit 5b767b6

Browse files
committed
2 parents ba87a0d + 6355466 commit 5b767b6

File tree

9 files changed

+78
-14
lines changed

9 files changed

+78
-14
lines changed

docs/serializer-settings.md

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ GuidTarget target = new()
152152

153153
await Verifier.Verify(target);
154154
```
155-
<sup><a href='/src/Verify.Tests/Serialization/SerializationTests.cs#L479-L492' title='Snippet source file'>snippet source</a> | <a href='#snippet-guid' title='Start of snippet'>anchor</a></sup>
155+
<sup><a href='/src/Verify.Tests/Serialization/SerializationTests.cs#L480-L493' title='Snippet source file'>snippet source</a> | <a href='#snippet-guid' title='Start of snippet'>anchor</a></sup>
156156
<!-- endSnippet -->
157157

158158
Results in the following:
@@ -407,7 +407,7 @@ public Task ScopedSerializerFluent()
407407
_ => { _.TypeNameHandling = TypeNameHandling.All; });
408408
}
409409
```
410-
<sup><a href='/src/Verify.Tests/Serialization/SerializationTests.cs#L1214-L1243' title='Snippet source file'>snippet source</a> | <a href='#snippet-scopedserializer' title='Start of snippet'>anchor</a></sup>
410+
<sup><a href='/src/Verify.Tests/Serialization/SerializationTests.cs#L1216-L1245' title='Snippet source file'>snippet source</a> | <a href='#snippet-scopedserializer' title='Start of snippet'>anchor</a></sup>
411411
<!-- endSnippet -->
412412

413413
Result:
@@ -470,7 +470,7 @@ public async Task IgnoreTypeFluent()
470470

471471
}
472472
```
473-
<sup><a href='/src/Verify.Tests/Serialization/SerializationTests.cs#L753-L793' title='Snippet source file'>snippet source</a> | <a href='#snippet-addignoretype' title='Start of snippet'>anchor</a></sup>
473+
<sup><a href='/src/Verify.Tests/Serialization/SerializationTests.cs#L754-L794' title='Snippet source file'>snippet source</a> | <a href='#snippet-addignoretype' title='Start of snippet'>anchor</a></sup>
474474
<!-- endSnippet -->
475475

476476
Result:
@@ -534,7 +534,7 @@ public async Task AddIgnoreInstanceFluent()
534534
_ => { _.IgnoreInstance<Instance>(x => x.Property == "Ignore"); });
535535
}
536536
```
537-
<sup><a href='/src/Verify.Tests/Serialization/SerializationTests.cs#L699-L740' title='Snippet source file'>snippet source</a> | <a href='#snippet-addignoreinstance' title='Start of snippet'>anchor</a></sup>
537+
<sup><a href='/src/Verify.Tests/Serialization/SerializationTests.cs#L700-L741' title='Snippet source file'>snippet source</a> | <a href='#snippet-addignoreinstance' title='Start of snippet'>anchor</a></sup>
538538
<!-- endSnippet -->
539539

540540
Result:
@@ -578,7 +578,7 @@ public Task WithObsoleteProp()
578578
return Verifier.Verify(target);
579579
}
580580
```
581-
<sup><a href='/src/Verify.Tests/Serialization/SerializationTests.cs#L1176-L1197' title='Snippet source file'>snippet source</a> | <a href='#snippet-withobsoleteprop' title='Start of snippet'>anchor</a></sup>
581+
<sup><a href='/src/Verify.Tests/Serialization/SerializationTests.cs#L1177-L1198' title='Snippet source file'>snippet source</a> | <a href='#snippet-withobsoleteprop' title='Start of snippet'>anchor</a></sup>
582582
<!-- endSnippet -->
583583

584584
Result:
@@ -626,7 +626,7 @@ public Task WithObsoletePropIncludedFluent()
626626
.ModifySerialization(_ => { _.IncludeObsoletes(); });
627627
}
628628
```
629-
<sup><a href='/src/Verify.Tests/Serialization/SerializationTests.cs#L1147-L1174' title='Snippet source file'>snippet source</a> | <a href='#snippet-withobsoletepropincluded' title='Start of snippet'>anchor</a></sup>
629+
<sup><a href='/src/Verify.Tests/Serialization/SerializationTests.cs#L1148-L1175' title='Snippet source file'>snippet source</a> | <a href='#snippet-withobsoletepropincluded' title='Start of snippet'>anchor</a></sup>
630630
<!-- endSnippet -->
631631

632632
Result:
@@ -689,7 +689,7 @@ public async Task IgnoreMemberByExpressionFluent()
689689
});
690690
}
691691
```
692-
<sup><a href='/src/Verify.Tests/Serialization/SerializationTests.cs#L881-L922' title='Snippet source file'>snippet source</a> | <a href='#snippet-ignorememberbyexpression' title='Start of snippet'>anchor</a></sup>
692+
<sup><a href='/src/Verify.Tests/Serialization/SerializationTests.cs#L882-L923' title='Snippet source file'>snippet source</a> | <a href='#snippet-ignorememberbyexpression' title='Start of snippet'>anchor</a></sup>
693693
<!-- endSnippet -->
694694

695695
Result:
@@ -757,7 +757,7 @@ public async Task IgnoreMemberByNameFluent()
757757
});
758758
}
759759
```
760-
<sup><a href='/src/Verify.Tests/Serialization/SerializationTests.cs#L972-L1019' title='Snippet source file'>snippet source</a> | <a href='#snippet-ignorememberbyname' title='Start of snippet'>anchor</a></sup>
760+
<sup><a href='/src/Verify.Tests/Serialization/SerializationTests.cs#L973-L1020' title='Snippet source file'>snippet source</a> | <a href='#snippet-ignorememberbyname' title='Start of snippet'>anchor</a></sup>
761761
<!-- endSnippet -->
762762

763763
Result:
@@ -803,7 +803,7 @@ public async Task CustomExceptionPropFluent()
803803
.ModifySerialization(_ => _.IgnoreMembersThatThrow<CustomException>());
804804
}
805805
```
806-
<sup><a href='/src/Verify.Tests/Serialization/SerializationTests.cs#L1047-L1066' title='Snippet source file'>snippet source</a> | <a href='#snippet-ignoremembersthatthrow' title='Start of snippet'>anchor</a></sup>
806+
<sup><a href='/src/Verify.Tests/Serialization/SerializationTests.cs#L1048-L1067' title='Snippet source file'>snippet source</a> | <a href='#snippet-ignoremembersthatthrow' title='Start of snippet'>anchor</a></sup>
807807
<!-- endSnippet -->
808808

809809
Result:
@@ -843,7 +843,7 @@ public async Task ExceptionMessagePropFluent()
843843
_ => _.IgnoreMembersThatThrow<Exception>(x => x.Message == "Ignore"));
844844
}
845845
```
846-
<sup><a href='/src/Verify.Tests/Serialization/SerializationTests.cs#L645-L669' title='Snippet source file'>snippet source</a> | <a href='#snippet-ignoremembersthatthrowexpression' title='Start of snippet'>anchor</a></sup>
846+
<sup><a href='/src/Verify.Tests/Serialization/SerializationTests.cs#L646-L670' title='Snippet source file'>snippet source</a> | <a href='#snippet-ignoremembersthatthrowexpression' title='Start of snippet'>anchor</a></sup>
847847
<!-- endSnippet -->
848848

849849
Result:

src/Directory.Build.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<Project>
33
<PropertyGroup>
44
<NoWarn>CS1591;CS0649;xUnit1026</NoWarn>
5-
<Version>9.0.0-beta.1</Version>
5+
<Version>9.0.0-beta.2</Version>
66
<AssemblyVersion>1.0.0</AssemblyVersion>
77
<PackageTags>Json, Testing, Verify, Snapshot, Approvals</PackageTags>
88
<Description>Enables verification of complex models and documents.</Description>

src/Verify.DerivePaths.Tests/Custom/Tests.Test.verified.txt

Lines changed: 0 additions & 1 deletion
This file was deleted.
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
{
2+
Type: Exception,
3+
Message: The prefix has already been used. This is mostly caused by a conflicting combination of `VerifierSettings.DerivePathInfo()`, `UseMethodName.UseDirectory()`, `UseMethodName.UseTypeName()`, and `UseMethodName.UseMethodName()`. Prefix: {ProjectDirectory}CustomDir/CustomTypeName.Conflict,
4+
StackTrace:
5+
at FileNameBuilder.GetPrefix(Namer namer, String directory, String testPrefix, Assembly assembly)
6+
at VerifyTests.InnerVerifier..ctor(String sourceFile, Type type, VerifySettings settings, MethodInfo method, IReadOnlyList`1 parameters)
7+
at VerifyXunit.Verifier.GetVerifier(VerifySettings settings, String sourceFile)
8+
at VerifyXunit.Verifier.<>c__DisplayClass1_0.<<Verify>b__0>d.MoveNext()
9+
--- End of stack trace from previous location ---
10+
at VerifyTests.SettingsTask.<>c__DisplayClass3_0.<<-ctor>b__0>d.MoveNext()
11+
--- End of stack trace from previous location ---
12+
at VerifyTests.InnerVerifier.ThrowsAsync(Func`1 target)
13+
}

src/Verify.DerivePaths.Tests/Tests.cs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,30 @@ static Tests()
2222
});
2323
}
2424

25+
[Fact]
26+
public async Task ThrowOnConflict()
27+
{
28+
static SettingsTask Run()
29+
{
30+
return Verifier.Verify("Value")
31+
.UseMethodName("Conflict")
32+
.DisableDiff()
33+
.DisableClipboard();
34+
}
35+
36+
try
37+
{
38+
await Run();
39+
}
40+
catch
41+
{
42+
}
43+
44+
await Verifier.ThrowsAsync(() => Run())
45+
.UseMethodName("ThrowOnConflict")
46+
.AddScrubber(builder => builder.Replace(@"\", "/"));
47+
}
48+
2549
[Fact]
2650
public async Task Test()
2751
{

src/Verify.Tests/Comparer/ComparerTests.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ public async Task Instance()
2626
VerifySettings settings = new();
2727
settings.UseComparer(Compare);
2828
await Verifier.Verify("TheText", settings);
29+
FileNameBuilder.ClearPrefixList();
2930
await Verifier.Verify("thetext", settings);
3031
}
3132

@@ -48,6 +49,7 @@ public async Task Static()
4849
VerifySettings settings = new();
4950
settings.UseExtension("staticComparerExt");
5051
await Verifier.Verify("TheText", settings);
52+
FileNameBuilder.ClearPrefixList();
5153
await Verifier.Verify("thetext", settings);
5254
}
5355

src/Verify.Tests/Serialization/SerializationTests.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -454,6 +454,7 @@ public async Task NamedTuple()
454454
public async Task PartialNamedTuple()
455455
{
456456
var exception = await Assert.ThrowsAsync<Exception>(() => Verifier.Verify(() => MethodWithPartialNamedTuple()));
457+
FileNameBuilder.ClearPrefixList();
457458
await Verifier.Verify(exception.Message);
458459
}
459460

@@ -1201,6 +1202,7 @@ public Task WithObsoleteProp()
12011202
public async Task Tuple()
12021203
{
12031204
var exception = await Assert.ThrowsAsync<Exception>(() => Verifier.Verify(() => MethodWithTuple()));
1205+
FileNameBuilder.ClearPrefixList();
12041206
await Verifier.Verify(exception.Message);
12051207
}
12061208

src/Verify.Tests/Tests.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,19 +196,27 @@ public async Task StringWithDifferingNewline()
196196
File.Delete(fullPath);
197197
File.WriteAllText(fullPath, "a\r\nb");
198198
await Verifier.Verify("a\r\nb");
199+
FileNameBuilder.ClearPrefixList();
199200
await Verifier.Verify("a\rb");
201+
FileNameBuilder.ClearPrefixList();
200202
await Verifier.Verify("a\nb");
203+
FileNameBuilder.ClearPrefixList();
201204

202205
File.Delete(fullPath);
203206
File.WriteAllText(fullPath, "a\nb");
204207
await Verifier.Verify("a\r\nb");
208+
FileNameBuilder.ClearPrefixList();
205209
await Verifier.Verify("a\rb");
210+
FileNameBuilder.ClearPrefixList();
206211
await Verifier.Verify("a\nb");
212+
FileNameBuilder.ClearPrefixList();
207213

208214
File.Delete(fullPath);
209215
File.WriteAllText(fullPath, "a\rb");
210216
await Verifier.Verify("a\r\nb");
217+
FileNameBuilder.ClearPrefixList();
211218
await Verifier.Verify("a\rb");
219+
FileNameBuilder.ClearPrefixList();
212220
await Verifier.Verify("a\nb");
213221
}
214222

src/Verify/Naming/FileNameBuilder.cs

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,31 @@
1-
using System.IO;
1+
using System;
2+
using System.Collections.Concurrent;
3+
using System.IO;
4+
using System.Linq;
25
using System.Reflection;
36
using System.Text;
47
using VerifyTests;
58

69
static class FileNameBuilder
710
{
11+
static ConcurrentBag<string> prefixList= new ();
812
public static string GetPrefix(Namer namer, string directory, string testPrefix, Assembly assembly)
913
{
1014
StringBuilder builder = new(Path.Combine(directory, testPrefix));
1115
AppendFileParts(namer, builder, assembly);
12-
return builder.ToString();
16+
var prefix = builder.ToString();
17+
if (!prefixList.Contains(prefix))
18+
{
19+
prefixList.Add(prefix);
20+
return prefix;
21+
}
22+
23+
throw new Exception($"The prefix has already been used. This is mostly caused by a conflicting combination of `VerifierSettings.DerivePathInfo()`, `UseMethodName.UseDirectory()`, `UseMethodName.UseTypeName()`, and `UseMethodName.UseMethodName()`. Prefix: {prefix}");
24+
}
25+
26+
internal static void ClearPrefixList()
27+
{
28+
prefixList = new ConcurrentBag<string>();
1329
}
1430

1531
public static string GetVerifiedPattern(string extension, Namer namer, string testPrefix, Assembly assembly)

0 commit comments

Comments
 (0)