1+ using System . Threading . Tasks ;
2+
13namespace System . IO . Abstractions . TestingHelpers . Tests
24{
35 using Collections . Generic ;
@@ -217,7 +219,7 @@ public void MockFile_OpenText_ShouldRetainLastWriteTime()
217219 }
218220
219221 [ Test ]
220- public void MockFile_OpenText_ShouldRetainLastAccessTime ( )
222+ public void MockFile_OpenText_ShouldUpdateLastAccessTime ( )
221223 {
222224 // Arrange
223225 var fs = new MockFileSystem ( ) ;
@@ -234,7 +236,101 @@ public void MockFile_OpenText_ShouldRetainLastAccessTime()
234236 }
235237
236238 // Assert
237- Assert . AreEqual ( lastAccessTime , fs . FileInfo . FromFileName ( filepath ) . LastAccessTime ) ;
239+ Assert . LessOrEqual ( DateTime . Now - fs . FileInfo . FromFileName ( filepath ) . LastAccessTime , TimeSpan . FromSeconds ( 1 ) ) ;
240+ }
241+
242+ [ Test ]
243+ public void MockFile_Read_ShouldRetainCreationTimeAndUpdateLastAccessTime ( )
244+ {
245+ // Arrange
246+ var fs = new MockFileSystem ( ) ;
247+ var filepath = XFS . Path ( @"C:\TestData\test.txt" ) ;
248+ var file = new MockFileData ( new byte [ ] { 1 , 2 , 3 } ) ;
249+ var lastAccessTime = new DateTime ( 2012 , 03 , 21 ) ;
250+ file . LastAccessTime = lastAccessTime ;
251+ var creationTime = new DateTime ( 2012 , 03 , 20 ) ;
252+ file . CreationTime = creationTime ;
253+ fs . AddFile ( filepath , file ) ;
254+
255+ var fi = fs . FileInfo . FromFileName ( filepath ) ;
256+ var stream = fi . OpenRead ( ) ;
257+ var buffer = new byte [ 16 ] ;
258+ stream . Read ( buffer , 0 , buffer . Length ) ;
259+ fi . Refresh ( ) ;
260+ // Assert
261+ Assert . AreEqual ( creationTime , fi . CreationTime ) ;
262+ Assert . LessOrEqual ( DateTime . Now - fi . LastAccessTime , TimeSpan . FromSeconds ( 1 ) ) ;
263+ }
264+
265+ [ Test ]
266+ public async Task MockFile_ReadAsync_ShouldRetainCreationTimeAndUpdateLastAccessTime ( )
267+ {
268+ // Arrange
269+ var fs = new MockFileSystem ( ) ;
270+ var filepath = XFS . Path ( @"C:\TestData\test.txt" ) ;
271+ var file = new MockFileData ( new byte [ ] { 1 , 2 , 3 } ) ;
272+ var lastAccessTime = new DateTime ( 2012 , 03 , 21 ) ;
273+ file . LastAccessTime = lastAccessTime ;
274+ var creationTime = new DateTime ( 2012 , 03 , 20 ) ;
275+ file . CreationTime = creationTime ;
276+ fs . AddFile ( filepath , file ) ;
277+
278+ var fi = fs . FileInfo . FromFileName ( filepath ) ;
279+ var stream = fi . OpenRead ( ) ;
280+ var buffer = new byte [ 16 ] ;
281+ await stream . ReadAsync ( buffer , 0 , buffer . Length ) ;
282+ fi . Refresh ( ) ;
283+ // Assert
284+ Assert . AreEqual ( creationTime , fi . CreationTime ) ;
285+ Assert . LessOrEqual ( DateTime . Now - fi . LastAccessTime , TimeSpan . FromSeconds ( 1 ) ) ;
286+ }
287+
288+ [ Test ]
289+ public void MockFile_Write_ShouldRetainCreationTimeAndUpdateLastAccessTimeAndLastWriteTime ( )
290+ {
291+ // Arrange
292+ var fs = new MockFileSystem ( ) ;
293+ var filepath = XFS . Path ( @"C:\TestData\test.txt" ) ;
294+ var file = new MockFileData ( new byte [ ] { 1 , 2 , 3 } ) ;
295+ var lastAccessTime = new DateTime ( 2012 , 03 , 21 ) ;
296+ file . LastAccessTime = lastAccessTime ;
297+ var creationTime = new DateTime ( 2012 , 03 , 20 ) ;
298+ file . CreationTime = creationTime ;
299+ fs . AddFile ( filepath , file ) ;
300+
301+ var fi = fs . FileInfo . FromFileName ( filepath ) ;
302+ var stream = fi . OpenWrite ( ) ;
303+ var buffer = new byte [ 16 ] ;
304+ stream . Write ( buffer , 0 , buffer . Length ) ;
305+ fi . Refresh ( ) ;
306+ // Assert
307+ Assert . AreEqual ( creationTime , fi . CreationTime ) ;
308+ Assert . LessOrEqual ( DateTime . Now - fi . LastAccessTime , TimeSpan . FromSeconds ( 1 ) ) ;
309+ Assert . LessOrEqual ( DateTime . Now - fi . LastWriteTime , TimeSpan . FromSeconds ( 1 ) ) ;
310+ }
311+
312+ [ Test ]
313+ public async Task MockFile_WriteAsync_ShouldRetainCreationTimeAndUpdateLastAccessTimeAndLastWriteTime ( )
314+ {
315+ // Arrange
316+ var fs = new MockFileSystem ( ) ;
317+ var filepath = XFS . Path ( @"C:\TestData\test.txt" ) ;
318+ var file = new MockFileData ( new byte [ ] { 1 , 2 , 3 } ) ;
319+ var lastAccessTime = new DateTime ( 2012 , 03 , 21 ) ;
320+ file . LastAccessTime = lastAccessTime ;
321+ var creationTime = new DateTime ( 2012 , 03 , 20 ) ;
322+ file . CreationTime = creationTime ;
323+ fs . AddFile ( filepath , file ) ;
324+
325+ var fi = fs . FileInfo . FromFileName ( filepath ) ;
326+ var stream = fi . OpenWrite ( ) ;
327+ var buffer = new byte [ 16 ] ;
328+ await stream . WriteAsync ( buffer , 0 , buffer . Length ) ;
329+ fi . Refresh ( ) ;
330+ // Assert
331+ Assert . AreEqual ( creationTime , fi . CreationTime ) ;
332+ Assert . LessOrEqual ( DateTime . Now - fi . LastAccessTime , TimeSpan . FromSeconds ( 1 ) ) ;
333+ Assert . LessOrEqual ( DateTime . Now - fi . LastWriteTime , TimeSpan . FromSeconds ( 1 ) ) ;
238334 }
239335
240336 [ Test ]
0 commit comments