Closed
Description
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"