From 76e26bb53d31442b8da244c12a8f27008ec80064 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Thu, 16 Jul 2026 22:18:39 +1000 Subject: [PATCH 1/4] Add mirrorSourceStructure option to UseProjectRelativeDirectory Nests `.verified.` files in sub-directories that mirror the directory structure of the test source files relative to the project directory, so a test in Foo/FooTests.cs writes to Snapshots/Foo instead of a flat Snapshots folder. This makes orphaned snapshots easier to identify when test source files are moved, renamed, or removed. Behavior is unchanged when the option is not set. The derivation is shared via the public PathInfo.DeriveProjectRelative so all six adapters use one implementation. It cannot live on core Extensions/IoHelpers: each adapter has a local Extensions.cs that shadows the core type, and Verify.Fixie is unsigned so it has no InternalsVisibleTo access to core internals. Resolves #1758 --- docs/mdsource/naming.source.md | 8 ++++ docs/naming.md | 8 ++++ src/Verify.Expecto/DerivePaths/Verifier.cs | 12 +++--- src/Verify.Fixie/DerivePaths/Verifier.cs | 12 +++--- src/Verify.MSTest/DerivePaths/Verifier.cs | 12 +++--- src/Verify.MSTest/DerivePaths/VerifyBase.cs | 8 +++- src/Verify.NUnit/DerivePaths/Verifier.cs | 12 +++--- src/Verify.TUnit/DerivePaths/Verifier.cs | 12 +++--- .../DeriveProjectRelativeDirectoryTests.cs | 42 +++++++++++++++++++ ...jectRelativeDirectoryMirrored.verified.txt | 1 + .../SubDir/Tests.Mirror.cs | 13 ++++++ src/Verify.XunitV3.DerivePaths.Tests/Tests.cs | 2 +- src/Verify.XunitV3/DerivePaths/Verifier.cs | 12 +++--- src/Verify/DerivePaths/PathInfo.cs | 33 +++++++++++++++ 14 files changed, 154 insertions(+), 33 deletions(-) create mode 100644 src/Verify.Tests/DeriveProjectRelativeDirectoryTests.cs create mode 100644 src/Verify.XunitV3.DerivePaths.Tests/Relative/SubDir/Tests.ProjectRelativeDirectoryMirrored.verified.txt create mode 100644 src/Verify.XunitV3.DerivePaths.Tests/SubDir/Tests.Mirror.cs diff --git a/docs/mdsource/naming.source.md b/docs/mdsource/naming.source.md index b8b46135a4..43cd3fc85d 100644 --- a/docs/mdsource/naming.source.md +++ b/docs/mdsource/naming.source.md @@ -249,6 +249,14 @@ For example to place all `.verified.` files in a `{ProjectDirectory}\Snapshots` Verifier.UseProjectRelativeDirectory("Snapshots"); ``` +To nest the `.verified.` files in sub-directories that mirror the directory structure of the test source files (relative to the project directory), enable `mirrorSourceStructure`: + +``` +Verifier.UseProjectRelativeDirectory("Snapshots", mirrorSourceStructure: true); +``` + +For example a test in `{ProjectDirectory}\Foo\FooTests.cs` would then have its `.verified.` files placed in `{ProjectDirectory}\Snapshots\Foo`. This can make orphaned snapshots easier to identify when test source files are moved, renamed, or removed. + ### UseSourceFileRelativeDirectory diff --git a/docs/naming.md b/docs/naming.md index b62e2f443d..92313bfc1d 100644 --- a/docs/naming.md +++ b/docs/naming.md @@ -805,6 +805,14 @@ For example to place all `.verified.` files in a `{ProjectDirectory}\Snapshots` Verifier.UseProjectRelativeDirectory("Snapshots"); ``` +To nest the `.verified.` files in sub-directories that mirror the directory structure of the test source files (relative to the project directory), enable `mirrorSourceStructure`: + +``` +Verifier.UseProjectRelativeDirectory("Snapshots", mirrorSourceStructure: true); +``` + +For example a test in `{ProjectDirectory}\Foo\FooTests.cs` would then have its `.verified.` files placed in `{ProjectDirectory}\Snapshots\Foo`. This can make orphaned snapshots easier to identify when test source files are moved, renamed, or removed. + ### UseSourceFileRelativeDirectory diff --git a/src/Verify.Expecto/DerivePaths/Verifier.cs b/src/Verify.Expecto/DerivePaths/Verifier.cs index ad531f804c..205f8a259b 100644 --- a/src/Verify.Expecto/DerivePaths/Verifier.cs +++ b/src/Verify.Expecto/DerivePaths/Verifier.cs @@ -27,12 +27,14 @@ public static void DerivePathInfo(DerivePathInfo derivePathInfo) /// /// Use a directory relative to the project directory for storing for `.verified.` files. /// - public static void UseProjectRelativeDirectory(string directory) => + /// The project relative directory to store `.verified.` files in. + /// + /// If true, nests `.verified.` files in sub-directories that mirror the directory structure of the test source files relative to the project directory. + /// + public static void UseProjectRelativeDirectory(string directory, bool mirrorSourceStructure = false) => DerivePathInfo( - (sourceFile, projectDirectory, typeName, methodName) => new( - directory: Path.Combine(projectDirectory, directory), - typeName: typeName, - methodName: methodName)); + (sourceFile, projectDirectory, typeName, methodName) => + PathInfo.DeriveProjectRelative(directory, mirrorSourceStructure, sourceFile, projectDirectory, typeName, methodName)); /// /// Use a directory relative to the source file directory for storing for `.verified.` files. diff --git a/src/Verify.Fixie/DerivePaths/Verifier.cs b/src/Verify.Fixie/DerivePaths/Verifier.cs index ccef8cd7ae..0ced688ac9 100644 --- a/src/Verify.Fixie/DerivePaths/Verifier.cs +++ b/src/Verify.Fixie/DerivePaths/Verifier.cs @@ -27,12 +27,14 @@ public static void DerivePathInfo(DerivePathInfo derivePathInfo) /// /// Use a directory relative to the project directory for storing for `.verified.` files. /// - public static void UseProjectRelativeDirectory(string directory) => + /// The project relative directory to store `.verified.` files in. + /// + /// If true, nests `.verified.` files in sub-directories that mirror the directory structure of the test source files relative to the project directory. + /// + public static void UseProjectRelativeDirectory(string directory, bool mirrorSourceStructure = false) => DerivePathInfo( - (sourceFile, projectDirectory, type, method) => new( - directory: Path.Combine(projectDirectory, directory), - typeName: type.NameWithParent(), - methodName: method.Name)); + (sourceFile, projectDirectory, type, method) => + PathInfo.DeriveProjectRelative(directory, mirrorSourceStructure, sourceFile, projectDirectory, type.NameWithParent(), method.Name)); /// /// Use a directory relative to the project directory for storing for `.verified.` files. diff --git a/src/Verify.MSTest/DerivePaths/Verifier.cs b/src/Verify.MSTest/DerivePaths/Verifier.cs index 03b82adc2b..9b0d8a0502 100644 --- a/src/Verify.MSTest/DerivePaths/Verifier.cs +++ b/src/Verify.MSTest/DerivePaths/Verifier.cs @@ -27,12 +27,14 @@ public static void DerivePathInfo(DerivePathInfo derivePathInfo) /// /// Use a directory relative to the project directory for storing for `.verified.` files. /// - public static void UseProjectRelativeDirectory(string directory) => + /// The project relative directory to store `.verified.` files in. + /// + /// If true, nests `.verified.` files in sub-directories that mirror the directory structure of the test source files relative to the project directory. + /// + public static void UseProjectRelativeDirectory(string directory, bool mirrorSourceStructure = false) => DerivePathInfo( - (sourceFile, projectDirectory, type, method) => new( - directory: Path.Combine(projectDirectory, directory), - typeName: type.NameWithParent(), - methodName: method.Name)); + (sourceFile, projectDirectory, type, method) => + PathInfo.DeriveProjectRelative(directory, mirrorSourceStructure, sourceFile, projectDirectory, type.NameWithParent(), method.Name)); /// /// Use a directory relative to the source file directory for storing for `.verified.` files. diff --git a/src/Verify.MSTest/DerivePaths/VerifyBase.cs b/src/Verify.MSTest/DerivePaths/VerifyBase.cs index efb16c6bbb..abc1146c38 100644 --- a/src/Verify.MSTest/DerivePaths/VerifyBase.cs +++ b/src/Verify.MSTest/DerivePaths/VerifyBase.cs @@ -19,8 +19,12 @@ public static void DerivePathInfo(DerivePathInfo derivePathInfo) => /// /// Use a directory relative to the project directory for storing for `.verified.` files. /// - public static void UseProjectRelativeDirectory(string directory) => - Verifier.UseProjectRelativeDirectory(directory); + /// The project relative directory to store `.verified.` files in. + /// + /// If true, nests `.verified.` files in sub-directories that mirror the directory structure of the test source files relative to the project directory. + /// + public static void UseProjectRelativeDirectory(string directory, bool mirrorSourceStructure = false) => + Verifier.UseProjectRelativeDirectory(directory, mirrorSourceStructure); /// /// Use a directory relative to the source file directory for storing for `.verified.` files. diff --git a/src/Verify.NUnit/DerivePaths/Verifier.cs b/src/Verify.NUnit/DerivePaths/Verifier.cs index 10ce1ee329..7f30370e6c 100644 --- a/src/Verify.NUnit/DerivePaths/Verifier.cs +++ b/src/Verify.NUnit/DerivePaths/Verifier.cs @@ -27,12 +27,14 @@ public static void DerivePathInfo(DerivePathInfo derivePathInfo) /// /// Use a directory relative to the project directory for storing for `.verified.` files. /// - public static void UseProjectRelativeDirectory(string directory) => + /// The project relative directory to store `.verified.` files in. + /// + /// If true, nests `.verified.` files in sub-directories that mirror the directory structure of the test source files relative to the project directory. + /// + public static void UseProjectRelativeDirectory(string directory, bool mirrorSourceStructure = false) => DerivePathInfo( - (sourceFile, projectDirectory, type, method) => new( - directory: Path.Combine(projectDirectory, directory), - typeName: type.NameWithParent(), - methodName: method.Name)); + (sourceFile, projectDirectory, type, method) => + PathInfo.DeriveProjectRelative(directory, mirrorSourceStructure, sourceFile, projectDirectory, type.NameWithParent(), method.Name)); /// /// Use a directory relative to the source file directory for storing for `.verified.` files. diff --git a/src/Verify.TUnit/DerivePaths/Verifier.cs b/src/Verify.TUnit/DerivePaths/Verifier.cs index 70ac68e90a..2d3ad19704 100644 --- a/src/Verify.TUnit/DerivePaths/Verifier.cs +++ b/src/Verify.TUnit/DerivePaths/Verifier.cs @@ -27,12 +27,14 @@ public static void DerivePathInfo(DerivePathInfo derivePathInfo) /// /// Use a directory relative to the project directory for storing for `.verified.` files. /// - public static void UseProjectRelativeDirectory(string directory) => + /// The project relative directory to store `.verified.` files in. + /// + /// If true, nests `.verified.` files in sub-directories that mirror the directory structure of the test source files relative to the project directory. + /// + public static void UseProjectRelativeDirectory(string directory, bool mirrorSourceStructure = false) => DerivePathInfo( - (sourceFile, projectDirectory, type, method) => new( - directory: Path.Combine(projectDirectory, directory), - typeName: type.NameWithParent(), - methodName: method.Name)); + (sourceFile, projectDirectory, type, method) => + PathInfo.DeriveProjectRelative(directory, mirrorSourceStructure, sourceFile, projectDirectory, type.NameWithParent(), method.Name)); /// /// Use a directory relative to the source file directory for storing for `.verified.` files. diff --git a/src/Verify.Tests/DeriveProjectRelativeDirectoryTests.cs b/src/Verify.Tests/DeriveProjectRelativeDirectoryTests.cs new file mode 100644 index 0000000000..26d794cb9f --- /dev/null +++ b/src/Verify.Tests/DeriveProjectRelativeDirectoryTests.cs @@ -0,0 +1,42 @@ +public class DeriveProjectRelativeDirectoryTests +{ + static readonly string projectDirectory = Path.Combine(Path.GetTempPath(), "project"); + + static string? Derive(string sourceFile, bool mirrorSourceStructure) => + PathInfo.DeriveProjectRelative( + "Snapshots", + mirrorSourceStructure, + sourceFile, + projectDirectory, + "TheType", + "TheMethod") + .Directory; + + [Fact] + public void NotMirroredUsesRoot() + { + var source = Path.Combine(projectDirectory, "Foo", "MyTests.cs"); + Assert.Equal(Path.Combine(projectDirectory, "Snapshots"), Derive(source, false)); + } + + [Fact] + public void MirrorsNestedSourceStructure() + { + var source = Path.Combine(projectDirectory, "Foo", "Bar", "MyTests.cs"); + Assert.Equal(Path.Combine(projectDirectory, "Snapshots", "Foo", "Bar"), Derive(source, true)); + } + + [Fact] + public void MirrorAtProjectRootUsesRoot() + { + var source = Path.Combine(projectDirectory, "MyTests.cs"); + Assert.Equal(Path.Combine(projectDirectory, "Snapshots"), Derive(source, true)); + } + + [Fact] + public void MirrorSourceOutsideProjectUsesRoot() + { + var source = Path.Combine(Path.GetTempPath(), "other", "MyTests.cs"); + Assert.Equal(Path.Combine(projectDirectory, "Snapshots"), Derive(source, true)); + } +} diff --git a/src/Verify.XunitV3.DerivePaths.Tests/Relative/SubDir/Tests.ProjectRelativeDirectoryMirrored.verified.txt b/src/Verify.XunitV3.DerivePaths.Tests/Relative/SubDir/Tests.ProjectRelativeDirectoryMirrored.verified.txt new file mode 100644 index 0000000000..3ee291f7bd --- /dev/null +++ b/src/Verify.XunitV3.DerivePaths.Tests/Relative/SubDir/Tests.ProjectRelativeDirectoryMirrored.verified.txt @@ -0,0 +1 @@ +Value \ No newline at end of file diff --git a/src/Verify.XunitV3.DerivePaths.Tests/SubDir/Tests.Mirror.cs b/src/Verify.XunitV3.DerivePaths.Tests/SubDir/Tests.Mirror.cs new file mode 100644 index 0000000000..b74528b1fa --- /dev/null +++ b/src/Verify.XunitV3.DerivePaths.Tests/SubDir/Tests.Mirror.cs @@ -0,0 +1,13 @@ +// This partial is intentionally located in a sub-directory so that its source file path, +// relative to the project directory, is "SubDir". That exercises the mirrorSourceStructure +// option, nesting the derived `.verified.` file under "Relative/SubDir". +public partial class Tests +{ + [Fact] + public Task ProjectRelativeDirectoryMirrored() + { + VerifierSettings.Reset(); + UseProjectRelativeDirectory("Relative", mirrorSourceStructure: true); + return Verify("Value"); + } +} diff --git a/src/Verify.XunitV3.DerivePaths.Tests/Tests.cs b/src/Verify.XunitV3.DerivePaths.Tests/Tests.cs index 7305da057d..659fc65eb9 100644 --- a/src/Verify.XunitV3.DerivePaths.Tests/Tests.cs +++ b/src/Verify.XunitV3.DerivePaths.Tests/Tests.cs @@ -1,4 +1,4 @@ -public class Tests +public partial class Tests { [Fact] public Task Test() diff --git a/src/Verify.XunitV3/DerivePaths/Verifier.cs b/src/Verify.XunitV3/DerivePaths/Verifier.cs index ead9820af3..d4d337208e 100644 --- a/src/Verify.XunitV3/DerivePaths/Verifier.cs +++ b/src/Verify.XunitV3/DerivePaths/Verifier.cs @@ -27,12 +27,14 @@ public static void DerivePathInfo(DerivePathInfo derivePathInfo) /// /// Use a directory relative to the project directory for storing for `.verified.` files. /// - public static void UseProjectRelativeDirectory(string directory) => + /// The project relative directory to store `.verified.` files in. + /// + /// If true, nests `.verified.` files in sub-directories that mirror the directory structure of the test source files relative to the project directory. + /// + public static void UseProjectRelativeDirectory(string directory, bool mirrorSourceStructure = false) => DerivePathInfo( - (sourceFile, projectDirectory, type, method) => new( - directory: Path.Combine(projectDirectory, directory), - typeName: type.NameWithParent(), - methodName: method.Name)); + (sourceFile, projectDirectory, type, method) => + PathInfo.DeriveProjectRelative(directory, mirrorSourceStructure, sourceFile, projectDirectory, type.NameWithParent(), method.Name)); /// /// Use a directory relative to the source file directory for storing for `.verified.` files. diff --git a/src/Verify/DerivePaths/PathInfo.cs b/src/Verify/DerivePaths/PathInfo.cs index e40b366938..c78518114e 100644 --- a/src/Verify/DerivePaths/PathInfo.cs +++ b/src/Verify/DerivePaths/PathInfo.cs @@ -43,6 +43,39 @@ public static PathInfo DeriveDefault( #endregion + /// + /// Derives a that stores `.verified.` files in relative to + /// . When is true, the files are + /// nested in sub-directories that mirror the directory structure of the test source file relative to the project + /// directory. Source files at, above, or outside the project directory fall back to . + /// + public static PathInfo DeriveProjectRelative( + string directory, + bool mirrorSourceStructure, + string sourceFile, + string projectDirectory, + string? typeName, + string? methodName) + { + var resolved = Path.Combine(projectDirectory, directory); + if (mirrorSourceStructure) + { + var sourceDirectory = Path.GetDirectoryName(sourceFile)!; + var relative = Path.GetRelativePath(projectDirectory, sourceDirectory); + if (relative != "." && + !relative.StartsWith("..", StringComparison.Ordinal) && + !Path.IsPathRooted(relative)) + { + resolved = Path.Combine(resolved, relative); + } + } + + return new( + directory: resolved, + typeName: typeName, + methodName: methodName); + } + internal static PathInfo DeriveDefault( string sourceFile, string projectDirectory, From 7ccda229e34afff5e946ea93a9671d777af2763a Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Thu, 16 Jul 2026 23:19:18 +1000 Subject: [PATCH 2/4] Update Directory.Build.props --- src/Directory.Build.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Directory.Build.props b/src/Directory.Build.props index 9339a0e4c4..ce2860ddef 100644 --- a/src/Directory.Build.props +++ b/src/Directory.Build.props @@ -2,7 +2,7 @@ CA1822;CS1591;CS0649;xUnit1026;xUnit1013;CS1573;VerifyTestsProjectDir;VerifySetParameters;PolyFillTargetsForNuget;xUnit1051;NU1608;NU1109 - 31.24.3 + 31.25.0 enable preview 1.0.0 From 0d15ac9ceaeed0abb47d5c555ee03a4d09a2d790 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Fri, 17 Jul 2026 21:26:55 +1000 Subject: [PATCH 3/4] Keep UseProjectRelativeDirectory binary compatible Adding an optional parameter changed the method signature, so assemblies compiled against the single argument overload would fail at runtime with a MissingMethodException. Restore the single argument overload and mark it obsolete, and apply OverloadResolutionPriority to the mirrorSourceStructure overload so source callers bind to it rather than to the obsolete one. The obsolete overload remains only to keep existing binaries working. Polyfill supplies OverloadResolutionPriorityAttribute for the target frameworks whose BCL lacks it. --- src/Verify.Expecto/DerivePaths/Verifier.cs | 10 ++++++++++ src/Verify.Fixie/DerivePaths/Verifier.cs | 10 ++++++++++ src/Verify.MSTest/DerivePaths/Verifier.cs | 10 ++++++++++ src/Verify.MSTest/DerivePaths/VerifyBase.cs | 10 ++++++++++ src/Verify.NUnit/DerivePaths/Verifier.cs | 10 ++++++++++ src/Verify.TUnit/DerivePaths/Verifier.cs | 10 ++++++++++ src/Verify.XunitV3/DerivePaths/Verifier.cs | 10 ++++++++++ 7 files changed, 70 insertions(+) diff --git a/src/Verify.Expecto/DerivePaths/Verifier.cs b/src/Verify.Expecto/DerivePaths/Verifier.cs index 205f8a259b..21ec0b3516 100644 --- a/src/Verify.Expecto/DerivePaths/Verifier.cs +++ b/src/Verify.Expecto/DerivePaths/Verifier.cs @@ -1,5 +1,7 @@ // ReSharper disable UnusedParameter.Local +using System.Runtime.CompilerServices; + #pragma warning disable VerifyTestsProjectDir namespace VerifyExpecto; @@ -24,6 +26,13 @@ public static void DerivePathInfo(DerivePathInfo derivePathInfo) Verifier.derivePathInfo = derivePathInfo; } + /// + /// Use a directory relative to the project directory for storing for `.verified.` files. + /// + [Obsolete("Use the overload that accepts mirrorSourceStructure.")] + public static void UseProjectRelativeDirectory(string directory) => + UseProjectRelativeDirectory(directory, false); + /// /// Use a directory relative to the project directory for storing for `.verified.` files. /// @@ -31,6 +40,7 @@ public static void DerivePathInfo(DerivePathInfo derivePathInfo) /// /// If true, nests `.verified.` files in sub-directories that mirror the directory structure of the test source files relative to the project directory. /// + [OverloadResolutionPriority(1)] public static void UseProjectRelativeDirectory(string directory, bool mirrorSourceStructure = false) => DerivePathInfo( (sourceFile, projectDirectory, typeName, methodName) => diff --git a/src/Verify.Fixie/DerivePaths/Verifier.cs b/src/Verify.Fixie/DerivePaths/Verifier.cs index 0ced688ac9..ac6bc7b06c 100644 --- a/src/Verify.Fixie/DerivePaths/Verifier.cs +++ b/src/Verify.Fixie/DerivePaths/Verifier.cs @@ -1,5 +1,7 @@ // ReSharper disable UnusedParameter.Local +using System.Runtime.CompilerServices; + #pragma warning disable VerifyTestsProjectDir namespace VerifyFixie; @@ -24,6 +26,13 @@ public static void DerivePathInfo(DerivePathInfo derivePathInfo) Verifier.derivePathInfo = derivePathInfo; } + /// + /// Use a directory relative to the project directory for storing for `.verified.` files. + /// + [Obsolete("Use the overload that accepts mirrorSourceStructure.")] + public static void UseProjectRelativeDirectory(string directory) => + UseProjectRelativeDirectory(directory, false); + /// /// Use a directory relative to the project directory for storing for `.verified.` files. /// @@ -31,6 +40,7 @@ public static void DerivePathInfo(DerivePathInfo derivePathInfo) /// /// If true, nests `.verified.` files in sub-directories that mirror the directory structure of the test source files relative to the project directory. /// + [OverloadResolutionPriority(1)] public static void UseProjectRelativeDirectory(string directory, bool mirrorSourceStructure = false) => DerivePathInfo( (sourceFile, projectDirectory, type, method) => diff --git a/src/Verify.MSTest/DerivePaths/Verifier.cs b/src/Verify.MSTest/DerivePaths/Verifier.cs index 9b0d8a0502..ba257bbf85 100644 --- a/src/Verify.MSTest/DerivePaths/Verifier.cs +++ b/src/Verify.MSTest/DerivePaths/Verifier.cs @@ -1,5 +1,7 @@ // ReSharper disable UnusedParameter.Local +using System.Runtime.CompilerServices; + #pragma warning disable VerifyTestsProjectDir namespace VerifyMSTest; @@ -24,6 +26,13 @@ public static void DerivePathInfo(DerivePathInfo derivePathInfo) Verifier.derivePathInfo = derivePathInfo; } + /// + /// Use a directory relative to the project directory for storing for `.verified.` files. + /// + [Obsolete("Use the overload that accepts mirrorSourceStructure.")] + public static void UseProjectRelativeDirectory(string directory) => + UseProjectRelativeDirectory(directory, false); + /// /// Use a directory relative to the project directory for storing for `.verified.` files. /// @@ -31,6 +40,7 @@ public static void DerivePathInfo(DerivePathInfo derivePathInfo) /// /// If true, nests `.verified.` files in sub-directories that mirror the directory structure of the test source files relative to the project directory. /// + [OverloadResolutionPriority(1)] public static void UseProjectRelativeDirectory(string directory, bool mirrorSourceStructure = false) => DerivePathInfo( (sourceFile, projectDirectory, type, method) => diff --git a/src/Verify.MSTest/DerivePaths/VerifyBase.cs b/src/Verify.MSTest/DerivePaths/VerifyBase.cs index abc1146c38..94da77d957 100644 --- a/src/Verify.MSTest/DerivePaths/VerifyBase.cs +++ b/src/Verify.MSTest/DerivePaths/VerifyBase.cs @@ -1,5 +1,7 @@ // ReSharper disable UnusedParameter.Local +using System.Runtime.CompilerServices; + #pragma warning disable VerifyTestsProjectDir namespace VerifyMSTest; @@ -16,6 +18,13 @@ public partial class VerifyBase public static void DerivePathInfo(DerivePathInfo derivePathInfo) => Verifier.DerivePathInfo(derivePathInfo); + /// + /// Use a directory relative to the project directory for storing for `.verified.` files. + /// + [Obsolete("Use the overload that accepts mirrorSourceStructure.")] + public static void UseProjectRelativeDirectory(string directory) => + Verifier.UseProjectRelativeDirectory(directory, false); + /// /// Use a directory relative to the project directory for storing for `.verified.` files. /// @@ -23,6 +32,7 @@ public static void DerivePathInfo(DerivePathInfo derivePathInfo) => /// /// If true, nests `.verified.` files in sub-directories that mirror the directory structure of the test source files relative to the project directory. /// + [OverloadResolutionPriority(1)] public static void UseProjectRelativeDirectory(string directory, bool mirrorSourceStructure = false) => Verifier.UseProjectRelativeDirectory(directory, mirrorSourceStructure); diff --git a/src/Verify.NUnit/DerivePaths/Verifier.cs b/src/Verify.NUnit/DerivePaths/Verifier.cs index 7f30370e6c..5f530776e8 100644 --- a/src/Verify.NUnit/DerivePaths/Verifier.cs +++ b/src/Verify.NUnit/DerivePaths/Verifier.cs @@ -1,5 +1,7 @@ // ReSharper disable UnusedParameter.Local +using System.Runtime.CompilerServices; + #pragma warning disable VerifyTestsProjectDir namespace VerifyNUnit; @@ -24,6 +26,13 @@ public static void DerivePathInfo(DerivePathInfo derivePathInfo) Verifier.derivePathInfo = derivePathInfo; } + /// + /// Use a directory relative to the project directory for storing for `.verified.` files. + /// + [Obsolete("Use the overload that accepts mirrorSourceStructure.")] + public static void UseProjectRelativeDirectory(string directory) => + UseProjectRelativeDirectory(directory, false); + /// /// Use a directory relative to the project directory for storing for `.verified.` files. /// @@ -31,6 +40,7 @@ public static void DerivePathInfo(DerivePathInfo derivePathInfo) /// /// If true, nests `.verified.` files in sub-directories that mirror the directory structure of the test source files relative to the project directory. /// + [OverloadResolutionPriority(1)] public static void UseProjectRelativeDirectory(string directory, bool mirrorSourceStructure = false) => DerivePathInfo( (sourceFile, projectDirectory, type, method) => diff --git a/src/Verify.TUnit/DerivePaths/Verifier.cs b/src/Verify.TUnit/DerivePaths/Verifier.cs index 2d3ad19704..1615a80a8e 100644 --- a/src/Verify.TUnit/DerivePaths/Verifier.cs +++ b/src/Verify.TUnit/DerivePaths/Verifier.cs @@ -1,5 +1,7 @@ // ReSharper disable UnusedParameter.Local +using System.Runtime.CompilerServices; + #pragma warning disable VerifyTestsProjectDir namespace VerifyTUnit; @@ -24,6 +26,13 @@ public static void DerivePathInfo(DerivePathInfo derivePathInfo) Verifier.derivePathInfo = derivePathInfo; } + /// + /// Use a directory relative to the project directory for storing for `.verified.` files. + /// + [Obsolete("Use the overload that accepts mirrorSourceStructure.")] + public static void UseProjectRelativeDirectory(string directory) => + UseProjectRelativeDirectory(directory, false); + /// /// Use a directory relative to the project directory for storing for `.verified.` files. /// @@ -31,6 +40,7 @@ public static void DerivePathInfo(DerivePathInfo derivePathInfo) /// /// If true, nests `.verified.` files in sub-directories that mirror the directory structure of the test source files relative to the project directory. /// + [OverloadResolutionPriority(1)] public static void UseProjectRelativeDirectory(string directory, bool mirrorSourceStructure = false) => DerivePathInfo( (sourceFile, projectDirectory, type, method) => diff --git a/src/Verify.XunitV3/DerivePaths/Verifier.cs b/src/Verify.XunitV3/DerivePaths/Verifier.cs index d4d337208e..ba0b3d1c7b 100644 --- a/src/Verify.XunitV3/DerivePaths/Verifier.cs +++ b/src/Verify.XunitV3/DerivePaths/Verifier.cs @@ -1,5 +1,7 @@ // ReSharper disable UnusedParameter.Local +using System.Runtime.CompilerServices; + #pragma warning disable VerifyTestsProjectDir namespace VerifyXunit; @@ -24,6 +26,13 @@ public static void DerivePathInfo(DerivePathInfo derivePathInfo) Verifier.derivePathInfo = derivePathInfo; } + /// + /// Use a directory relative to the project directory for storing for `.verified.` files. + /// + [Obsolete("Use the overload that accepts mirrorSourceStructure.")] + public static void UseProjectRelativeDirectory(string directory) => + UseProjectRelativeDirectory(directory, false); + /// /// Use a directory relative to the project directory for storing for `.verified.` files. /// @@ -31,6 +40,7 @@ public static void DerivePathInfo(DerivePathInfo derivePathInfo) /// /// If true, nests `.verified.` files in sub-directories that mirror the directory structure of the test source files relative to the project directory. /// + [OverloadResolutionPriority(1)] public static void UseProjectRelativeDirectory(string directory, bool mirrorSourceStructure = false) => DerivePathInfo( (sourceFile, projectDirectory, type, method) => From 7078267450eedb88b7f753fb99ddae8b1b1a28de Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Fri, 17 Jul 2026 21:35:10 +1000 Subject: [PATCH 4/4] . --- src/Verify.Expecto/DerivePaths/Verifier.cs | 2 -- src/Verify.Fixie/DerivePaths/Verifier.cs | 2 -- src/Verify.MSTest/DerivePaths/Verifier.cs | 2 -- src/Verify.MSTest/DerivePaths/VerifyBase.cs | 2 -- src/Verify.NUnit/DerivePaths/Verifier.cs | 2 -- src/Verify.TUnit/DerivePaths/Verifier.cs | 2 -- src/Verify.XunitV3/DerivePaths/Verifier.cs | 2 -- 7 files changed, 14 deletions(-) diff --git a/src/Verify.Expecto/DerivePaths/Verifier.cs b/src/Verify.Expecto/DerivePaths/Verifier.cs index 21ec0b3516..937c3478aa 100644 --- a/src/Verify.Expecto/DerivePaths/Verifier.cs +++ b/src/Verify.Expecto/DerivePaths/Verifier.cs @@ -1,7 +1,5 @@ // ReSharper disable UnusedParameter.Local -using System.Runtime.CompilerServices; - #pragma warning disable VerifyTestsProjectDir namespace VerifyExpecto; diff --git a/src/Verify.Fixie/DerivePaths/Verifier.cs b/src/Verify.Fixie/DerivePaths/Verifier.cs index ac6bc7b06c..e0cd1d0df6 100644 --- a/src/Verify.Fixie/DerivePaths/Verifier.cs +++ b/src/Verify.Fixie/DerivePaths/Verifier.cs @@ -1,7 +1,5 @@ // ReSharper disable UnusedParameter.Local -using System.Runtime.CompilerServices; - #pragma warning disable VerifyTestsProjectDir namespace VerifyFixie; diff --git a/src/Verify.MSTest/DerivePaths/Verifier.cs b/src/Verify.MSTest/DerivePaths/Verifier.cs index ba257bbf85..ccc13a0dbd 100644 --- a/src/Verify.MSTest/DerivePaths/Verifier.cs +++ b/src/Verify.MSTest/DerivePaths/Verifier.cs @@ -1,7 +1,5 @@ // ReSharper disable UnusedParameter.Local -using System.Runtime.CompilerServices; - #pragma warning disable VerifyTestsProjectDir namespace VerifyMSTest; diff --git a/src/Verify.MSTest/DerivePaths/VerifyBase.cs b/src/Verify.MSTest/DerivePaths/VerifyBase.cs index 94da77d957..9bbe0c0559 100644 --- a/src/Verify.MSTest/DerivePaths/VerifyBase.cs +++ b/src/Verify.MSTest/DerivePaths/VerifyBase.cs @@ -1,7 +1,5 @@ // ReSharper disable UnusedParameter.Local -using System.Runtime.CompilerServices; - #pragma warning disable VerifyTestsProjectDir namespace VerifyMSTest; diff --git a/src/Verify.NUnit/DerivePaths/Verifier.cs b/src/Verify.NUnit/DerivePaths/Verifier.cs index 5f530776e8..288ab70a48 100644 --- a/src/Verify.NUnit/DerivePaths/Verifier.cs +++ b/src/Verify.NUnit/DerivePaths/Verifier.cs @@ -1,7 +1,5 @@ // ReSharper disable UnusedParameter.Local -using System.Runtime.CompilerServices; - #pragma warning disable VerifyTestsProjectDir namespace VerifyNUnit; diff --git a/src/Verify.TUnit/DerivePaths/Verifier.cs b/src/Verify.TUnit/DerivePaths/Verifier.cs index 1615a80a8e..1b002cce00 100644 --- a/src/Verify.TUnit/DerivePaths/Verifier.cs +++ b/src/Verify.TUnit/DerivePaths/Verifier.cs @@ -1,7 +1,5 @@ // ReSharper disable UnusedParameter.Local -using System.Runtime.CompilerServices; - #pragma warning disable VerifyTestsProjectDir namespace VerifyTUnit; diff --git a/src/Verify.XunitV3/DerivePaths/Verifier.cs b/src/Verify.XunitV3/DerivePaths/Verifier.cs index ba0b3d1c7b..5bc1d05c63 100644 --- a/src/Verify.XunitV3/DerivePaths/Verifier.cs +++ b/src/Verify.XunitV3/DerivePaths/Verifier.cs @@ -1,7 +1,5 @@ // ReSharper disable UnusedParameter.Local -using System.Runtime.CompilerServices; - #pragma warning disable VerifyTestsProjectDir namespace VerifyXunit;