Skip to content

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

Closed
@El-Gor-do

Description

@El-Gor-do

Describe the bug
Possibly related to #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"

Metadata

Metadata

Assignees

No one assigned

    Labels

    flag: good-first-issueIssues that are good for first time contributorsstate: ready to pickIssues that are ready for being worked ontype: bugIssues that describe misbehaving functionality

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions