System.IO.Abstractions icon indicating copy to clipboard operation
System.IO.Abstractions copied to clipboard

MockFileSystem.File.Move on Windows and .Net 8 doesn't rename a file name's case

Open El-Gor-do opened this issue 1 year ago • 6 comments

Describe the bug Possibly related to https://github.com/TestableIO/System.IO.Abstractions/issues/1138 On Windows and .Net 8, FileSystem.File.Move successfully renames a file if the destination has a different case than source whereas MockFileSystem.File.Move doesn't rename the file.

To Reproduce Steps to reproduce the behavior: Using System.IO.Abstractions.TestingHelpers 21.0.29

static void Main(string[] args)
{
    FileSystem fs = new FileSystem();
    MockFileSystem mockFs = new MockFileSystem();

    Console.WriteLine("Real file system");
    MoveFile(fs);

    Console.WriteLine("Mock file system");
    MoveFile(mockFs);
}

static void MoveFile(IFileSystem fileSystem)
{
    string tempDir = fileSystem.Path.GetTempPath();
    string src = fileSystem.Path.Combine(tempDir, "src.txt");
    string dest = fileSystem.Path.Combine(tempDir, "SRC.TXT");  // different case

    // create source file
    using (_ = fileSystem.File.Create(src))
    {
    }

    // move file
    fileSystem.File.Move(src, dest);

    // check the moved file's name exact case
    string movedFile = fileSystem.Directory.GetFiles(tempDir, "src.txt").First();
    Console.WriteLine($"Successfully moved \"{src}\" to \"{movedFile}\"");

    if (fileSystem.File.Exists(src))
        fileSystem.File.Delete(src);

    if (fileSystem.File.Exists(dest))
        fileSystem.File.Delete(dest);
}

Actual output

Real file system
Successfully moved "C:\Users\El-Gor-do\AppData\Local\Temp\src.txt" to "C:\Users\El-Gor-do\AppData\Local\Temp\SRC.TXT"
Mock file system
Successfully moved "C:\temp\src.txt" to "C:\temp\src.txt"

Expected behavior MockFileSystem.File.Move should successfully rename the file to SRC.TXT

Real file system
Successfully moved "C:\Users\El-Gor-do\AppData\Local\Temp\src.txt" to "C:\Users\El-Gor-do\AppData\Local\Temp\SRC.TXT"
Mock file system
Successfully moved "C:\temp\src.txt" to "C:\temp\SRC.TXT"

El-Gor-do avatar Aug 09 '24 15:08 El-Gor-do

When fixing this, it would probably be easy to also have an eye out for the correct behaviour in File.Copy and File.Replace when source and destination differ only in casing...

vbreuss avatar Aug 11 '24 08:08 vbreuss

Hi @vbreuss, @El-Gor-do, first time contributor here. I would like to look into fixing this.

RobinDoesUnity avatar Sep 21 '24 08:09 RobinDoesUnity

Hi @vbreuss, @El-Gor-do, first time contributor here. I would like to look into fixing this.

Please feel welcome to create a pull request.

vbreuss avatar Sep 21 '24 09:09 vbreuss

@vbreuss - I'll look into this, Bro. Please assign it to me👍

KasinathCR avatar Oct 16 '24 10:10 KasinathCR

@RobinDoesUnity : Are you still working on this issue?

vbreuss avatar Oct 17 '24 11:10 vbreuss

Hi @vbreuss, you can assign it to someone else. Sorry, I was busy these days.

RobinDoesUnity avatar Oct 17 '24 11:10 RobinDoesUnity

Fixed by #1259

vbreuss avatar Apr 04 '25 13:04 vbreuss