diff --git a/Directory.Build.props b/Directory.Build.props index 8895d1c58..a02382776 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -14,6 +14,7 @@ $(DefineConstants);FEATURE_ASYNC_FILE;FEATURE_ENUMERATION_OPTIONS;FEATURE_ADVANCED_PATH_OPERATIONS;FEATURE_PATH_JOIN_WITH_SPAN;FEATURE_SPAN $(DefineConstants);FEATURE_FILE_MOVE_WITH_OVERWRITE;FEATURE_SUPPORTED_OS_ATTRIBUTE;FEATURE_FILE_SYSTEM_WATCHER_FILTERS;FEATURE_ENDS_IN_DIRECTORY_SEPARATOR;FEATURE_PATH_JOIN_WITH_PARAMS;FEATURE_PATH_JOIN_WITH_FOUR_PATHS;FEATURE_FILE_SYSTEM_INFO_LINK_TARGET;FEATURE_CREATE_SYMBOLIC_LINK;FEATURE_FILESTREAM_OPTIONS $(DefineConstants);FEATURE_PATH_EXISTS;FEATURE_FILE_SYSTEM_WATCHER_WAIT_WITH_TIMESPAN;FEATURE_FILE_ATTRIBUTES_VIA_HANDLE;FEATURE_CREATE_TEMP_SUBDIRECTORY;FEATURE_READ_LINES_ASYNC;FEATURE_UNIX_FILE_MODE + $(DefineConstants);FEATURE_PATH_SPAN $(DefineConstants);FEATURE_SERIALIZABLE diff --git a/src/TestableIO.System.IO.Abstractions.Wrappers/PathBase.cs b/src/TestableIO.System.IO.Abstractions.Wrappers/PathBase.cs index 0540b8f49..e460df76a 100644 --- a/src/TestableIO.System.IO.Abstractions.Wrappers/PathBase.cs +++ b/src/TestableIO.System.IO.Abstractions.Wrappers/PathBase.cs @@ -43,6 +43,11 @@ internal PathBase() { } /// public abstract string Combine(params string[] paths); + +#if FEATURE_PATH_SPAN + /// + public abstract string Combine(params ReadOnlySpan paths); +#endif /// public abstract string Combine(string path1, string path2); @@ -117,6 +122,11 @@ internal PathBase() { } /// public abstract string Join(ReadOnlySpan path1, ReadOnlySpan path2, ReadOnlySpan path3); +#if FEATURE_PATH_SPAN + /// + public abstract string Join(params ReadOnlySpan paths); +#endif + /// public abstract bool TryJoin(ReadOnlySpan path1, ReadOnlySpan path2, ReadOnlySpan path3, Span destination, out int charsWritten); diff --git a/src/TestableIO.System.IO.Abstractions.Wrappers/PathWrapper.cs b/src/TestableIO.System.IO.Abstractions.Wrappers/PathWrapper.cs index 2b4972e35..230fe6624 100644 --- a/src/TestableIO.System.IO.Abstractions.Wrappers/PathWrapper.cs +++ b/src/TestableIO.System.IO.Abstractions.Wrappers/PathWrapper.cs @@ -56,6 +56,14 @@ public override string Combine(params string[] paths) return Path.Combine(paths); } +#if FEATURE_PATH_SPAN + /// + public override string Combine(params ReadOnlySpan paths) + { + return Path.Combine(paths); + } +#endif + /// public override string Combine(string path1, string path2) { @@ -185,6 +193,14 @@ public override string Join(ReadOnlySpan path1, ReadOnlySpan path2) public override string Join(ReadOnlySpan path1, ReadOnlySpan path2, ReadOnlySpan path3) => Path.Join(path1, path2, path3); +#if FEATURE_PATH_SPAN + /// + public override string Join(params ReadOnlySpan paths) + { + return Path.Join(paths); + } +#endif + /// public override bool TryJoin(ReadOnlySpan path1, ReadOnlySpan path2, Span destination, out int charsWritten) => Path.TryJoin(path1, path2, destination, out charsWritten); diff --git a/src/TestableIO.System.IO.Abstractions/IPath.cs b/src/TestableIO.System.IO.Abstractions/IPath.cs index f4a30a397..79334ae21 100644 --- a/src/TestableIO.System.IO.Abstractions/IPath.cs +++ b/src/TestableIO.System.IO.Abstractions/IPath.cs @@ -33,6 +33,11 @@ public interface IPath : IFileSystemEntity /// string Combine(params string[] paths); +#if FEATURE_PATH_SPAN + /// + string Combine(params ReadOnlySpan paths); +#endif + #if FEATURE_ENDS_IN_DIRECTORY_SEPARATOR /// bool EndsInDirectorySeparator(ReadOnlySpan path); @@ -148,6 +153,11 @@ string Join(ReadOnlySpan path1, ReadOnlySpan path2, ReadOnlySpan path3); +#if FEATURE_PATH_SPAN + /// + string Join(params ReadOnlySpan paths); +#endif + /// bool TryJoin(ReadOnlySpan path1, ReadOnlySpan path2, diff --git a/tests/TestableIO.System.IO.Abstractions.Wrappers.Tests/__snapshots__/ApiParityTests.Path_.NET 9.0.snap b/tests/TestableIO.System.IO.Abstractions.Wrappers.Tests/__snapshots__/ApiParityTests.Path_.NET 9.0.snap index 533d46127..d83d023ac 100644 --- a/tests/TestableIO.System.IO.Abstractions.Wrappers.Tests/__snapshots__/ApiParityTests.Path_.NET 9.0.snap +++ b/tests/TestableIO.System.IO.Abstractions.Wrappers.Tests/__snapshots__/ApiParityTests.Path_.NET 9.0.snap @@ -6,8 +6,5 @@ "Char get_VolumeSeparatorChar()", "Char[] get_InvalidPathChars()" ], - "MissingMembers": [ - "System.String Combine(System.ReadOnlySpan`1[System.String])", - "System.String Join(System.ReadOnlySpan`1[System.String])" - ] + "MissingMembers": [] }