Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/System.IO.Abstractions.TestingHelpers/MockFile.cs
Original file line number Diff line number Diff line change
Expand Up @@ -542,7 +542,7 @@ private Stream OpenInternal(
var mockFileData = mockFileDataAccessor.GetFile(path);
mockFileData.CheckFileAccess(path, access);
var timeAdjustments = TimeAdjustments.LastAccessTime;
if (access != FileAccess.Read)
if (access.HasFlag(FileAccess.Write))
{
timeAdjustments |= TimeAdjustments.LastWriteTime;
}
Expand Down
5 changes: 4 additions & 1 deletion src/System.IO.Abstractions.TestingHelpers/MockFileData.cs
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,10 @@ public class MockFileData
/// </summary>
private MockFileData()
{
// empty
var now = DateTime.UtcNow;
LastWriteTime = now;
LastAccessTime = now;
CreationTime = now;
}

/// <summary>
Expand Down
28 changes: 27 additions & 1 deletion src/System.IO.Abstractions.TestingHelpers/MockFileStream.cs
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,8 @@ public MockFileStream(
fileData = mockFileDataAccessor.GetFile(path);
fileData.CheckFileAccess(path, access);

mockFileDataAccessor.AdjustTimes(fileData, TimeAdjustments.LastAccessTime);
var timeAdjustments = GetTimeAdjustmentsForFileStreamWhenFileExists(mode, access);
mockFileDataAccessor.AdjustTimes(fileData, timeAdjustments);
var existingContents = fileData.Contents;
var keepExistingContents =
existingContents?.Length > 0 &&
Expand Down Expand Up @@ -140,5 +141,30 @@ private void OnClose()
mockFileDataAccessor.FileInfo.FromFileName(path).Encrypt();
}
}

private TimeAdjustments GetTimeAdjustmentsForFileStreamWhenFileExists(FileMode mode, FileAccess access)
{
switch (mode)
{
case FileMode.Append:
case FileMode.CreateNew:
if (access.HasFlag(FileAccess.Read))
{
return TimeAdjustments.LastAccessTime;
}
return TimeAdjustments.None;
case FileMode.Create:
case FileMode.Truncate:
if (access.HasFlag(FileAccess.Write))
{
return TimeAdjustments.LastAccessTime | TimeAdjustments.LastWriteTime;
}
return TimeAdjustments.LastAccessTime;
case FileMode.Open:
case FileMode.OpenOrCreate:
default:
return TimeAdjustments.None;
}
}
}
}