diff --git a/src/System.IO.Abstractions.Extensions/IFileInfoExtensions.cs b/src/System.IO.Abstractions.Extensions/IFileInfoExtensions.cs index cbd58b2..7464946 100644 --- a/src/System.IO.Abstractions.Extensions/IFileInfoExtensions.cs +++ b/src/System.IO.Abstractions.Extensions/IFileInfoExtensions.cs @@ -165,6 +165,12 @@ public static void WriteAllText(this IFileInfo file, string contents) file.FileSystem.File.WriteAllText(file.FullName, contents); } + /// + public static string GetFileNameWithoutExtension(this IFileInfo file) + { + return file.FileSystem.Path.GetFileNameWithoutExtension(file.Name); + } + private static FileMode GetWriteFileMode(IFileInfo info, bool overwrite) { if (!overwrite && info.Exists) diff --git a/tests/System.IO.Abstractions.Extensions.Tests/FileInfoExtensionsTests.cs b/tests/System.IO.Abstractions.Extensions.Tests/FileInfoExtensionsTests.cs index 57aacf3..ad5ff4b 100644 --- a/tests/System.IO.Abstractions.Extensions.Tests/FileInfoExtensionsTests.cs +++ b/tests/System.IO.Abstractions.Extensions.Tests/FileInfoExtensionsTests.cs @@ -290,5 +290,22 @@ public void AppendText_FileExistsAndHasText_LinesAreAppended(params string[] app Assert.AreEqual(expected[i], actual[i]); } } + + [TestCase("test.extension", "test")] + [TestCase("noextension", "noextension")] + [TestCase(".extensiononly", "")] + public void GetFileNameWithoutExtension_WithValidFileName_ReturnsNameWithoutExtension(string fileName, string expectedName) + { + //arrange + var fs = new FileSystem(); + var current = fs.DirectoryInfo.New(fs.Directory.GetCurrentDirectory()); + var file = current.File(fileName); + + //act + var name = file.GetFileNameWithoutExtension(); + + //assert + Assert.AreEqual(expectedName, name); + } } } \ No newline at end of file