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 b8b46135a..43cd3fc85 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 b62e2f443..92313bfc1 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 ad531f804..205f8a259 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 ccef8cd7a..0ced688ac 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 03b82adc2..9b0d8a050 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 efb16c6bb..abc1146c3 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 10ce1ee32..7f30370e6 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 70ac68e90..2d3ad1970 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 000000000..26d794cb9 --- /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 000000000..3ee291f7b --- /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 000000000..b74528b1f --- /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 7305da057..659fc65eb 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 ead9820af..d4d337208 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 e40b36693..c78518114 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 9339a0e4c..ce2860dde 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 205f8a259..21ec0b351 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 0ced688ac..ac6bc7b06 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 9b0d8a050..ba257bbf8 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 abc1146c3..94da77d95 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 7f30370e6..5f530776e 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 2d3ad1970..1615a80a8 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 d4d337208..ba0b3d1c7 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 21ec0b351..937c3478a 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 ac6bc7b06..e0cd1d0df 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 ba257bbf8..ccc13a0db 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 94da77d95..9bbe0c055 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 5f530776e..288ab70a4 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 1615a80a8..1b002cce0 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 ba0b3d1c7..5bc1d05c6 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;