예제 #1
0
        public void MoveTo_TargetIsNewFile_CanMoveAndChangeName()
        {
            // arrange
            using (var driver = new DiskDriver())
            {
                var src = driver.CreateOrGetFile(@"c:\src\file.txt");
                driver.CreateOrGetDirectory(@"c:\targ");
                using (var t = src.CreateText())
                {
                    t.Write("CONTENT");
                }

                // act
                src.MoveTo(@"c:\targ\moved.txt");
                src.Refresh();

                // assert
                var target = driver.GetFile(@"c:\targ\moved.txt");
                Assert.AreEqual(@"c:\targ\moved.txt", src.FullName);
                Assert.IsFalse(driver.GetFile(@"c:\src\file.txt").Exists);
                Assert.IsTrue(target.Exists);
                using (var t = target.OpenText())
                {
                    Assert.AreEqual("CONTENT", t.ReadToEnd());
                }
            }
        }
예제 #2
0
        public void Move_CanUpdateStubs()
        {
            // arrange
            using (var driver = new DiskDriver())
            {
                driver.CreateOrGetFile(@"c:\src\folder_1\subfolder_1\file_1.txt");
                driver.CreateOrGetFile(@"c:\src\folder_1\subfolder_1\file_2.txt");
                driver.CreateOrGetFile(@"c:\src\folder_1\subfolder_2\file_1.txt");
                driver.CreateOrGetFile(@"c:\src\folder_1\subfolder_2\file_2.txt");
                driver.CreateOrGetFile(@"c:\src\folder_2\subfolder_1\file_1.txt");
                driver.CreateOrGetFile(@"c:\src\folder_2\subfolder_1\file_2.txt");
                driver.CreateOrGetFile(@"c:\src\folder_2\subfolder_2\file_1.txt");
                driver.CreateOrGetFile(@"c:\src\folder_2\subfolder_2\file_2.txt");

                driver.CreateOrGetDirectory(@"c:\targ");

                var folder_1 = driver.GetDirectory(@"c:\src\folder_1");

                // act
                folder_1.MoveTo(@"c:\targ\folder_1");

                // assert
                var fileStub = driver.GetFile(@"c:\targ\folder_1\subfolder_1\file_1.txt");
                Assert.AreEqual(@"c:\targ\folder_1\subfolder_1\file_1.txt", fileStub.FullName);
                fileStub = driver.GetFile(@"c:\targ\folder_1\subfolder_1\file_2.txt");
                Assert.AreEqual(@"c:\targ\folder_1\subfolder_1\file_2.txt", fileStub.FullName);
                fileStub = driver.GetFile(@"c:\targ\folder_1\subfolder_2\file_1.txt");
                Assert.AreEqual(@"c:\targ\folder_1\subfolder_2\file_1.txt", fileStub.FullName);
                fileStub = driver.GetFile(@"c:\targ\folder_1\subfolder_2\file_2.txt");
                Assert.AreEqual(@"c:\targ\folder_1\subfolder_2\file_2.txt", fileStub.FullName);

                fileStub = driver.GetFile(@"c:\src\folder_2\subfolder_1\file_1.txt");
                Assert.AreEqual(@"c:\src\folder_2\subfolder_1\file_1.txt", fileStub.FullName);
                fileStub = driver.GetFile(@"c:\src\folder_2\subfolder_1\file_2.txt");
                Assert.AreEqual(@"c:\src\folder_2\subfolder_1\file_2.txt", fileStub.FullName);
                fileStub = driver.GetFile(@"c:\src\folder_2\subfolder_2\file_1.txt");
                Assert.AreEqual(@"c:\src\folder_2\subfolder_2\file_1.txt", fileStub.FullName);
                fileStub = driver.GetFile(@"c:\src\folder_2\subfolder_2\file_2.txt");
                Assert.AreEqual(@"c:\src\folder_2\subfolder_2\file_2.txt", fileStub.FullName);

                var dirStub = driver.GetDirectory(@"c:\targ");
                Assert.AreEqual(@"c:\targ", dirStub.FullName);
                dirStub = driver.GetDirectory(@"c:\targ\folder_1");
                Assert.AreEqual(@"c:\targ\folder_1", dirStub.FullName);
                dirStub = driver.GetDirectory(@"c:\targ\folder_1\subfolder_1");
                Assert.AreEqual(@"c:\targ\folder_1\subfolder_1", dirStub.FullName);
                dirStub = driver.GetDirectory(@"c:\targ\folder_1\subfolder_2");
                Assert.AreEqual(@"c:\targ\folder_1\subfolder_2", dirStub.FullName);

                dirStub = driver.GetDirectory(@"c:\src");
                Assert.AreEqual(@"c:\src", dirStub.FullName);
                dirStub = driver.GetDirectory(@"c:\src\folder_2");
                Assert.AreEqual(@"c:\src\folder_2", dirStub.FullName);
                dirStub = driver.GetDirectory(@"c:\src\folder_2\subfolder_1");
                Assert.AreEqual(@"c:\src\folder_2\subfolder_1", dirStub.FullName);
                dirStub = driver.GetDirectory(@"c:\src\folder_2\subfolder_2");
                Assert.AreEqual(@"c:\src\folder_2\subfolder_2", dirStub.FullName);
            }
        }
예제 #3
0
        public void OpenFile_CreateMode_FileExists_CanOverwriteFile()
        {
            // arrange
            using (var driver = new DiskDriver())
            {
                driver.CreateOrGetDirectory(@"c:\temp");
                var file = driver.GetFile(@"c:\temp\file.txt");
                using (var writer = new StreamWriter(file.Open(FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite)))
                {
                    writer.Write("1");
                }

                // act
                using (var writer = new StreamWriter(file.Open(FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite)))
                {
                    writer.Write("2");
                }

                // assert
                using (var reader = new StreamReader(file.Open(FileMode.Open, FileAccess.Read, FileShare.ReadWrite)))
                {
                    Assert.AreEqual("2", reader.ReadToEnd());
                }
            }
        }
예제 #4
0
        public void Timestamps_DeleteFile_GrandparentDirectoryIsntUpdated()
        {
            // arrange
            using (var driver = new DiskDriver())
            {
                driver.CreateOrGetFile(@"c:\parent\folder\file.txt");

                var parent = driver.GetDirectory(@"c:\parent");

                var beforeDelete = DateTime.Now;
                var old          = beforeDelete.AddMinutes(-5);
                parent.LastAccessTime = parent.LastWriteTime = parent.CreationTime = old;

                Assert.IsTrue(parent.LastAccessTime == old);
                Assert.IsTrue(parent.LastWriteTime == old);
                Assert.IsTrue(parent.CreationTime == old);

                // act
                var file = driver.GetFile(@"c:\parent\folder\file.txt");
                file.Delete();

                parent.Refresh();

                // Assert
                Assert.IsTrue(parent.LastAccessTime == old);
                Assert.IsTrue(parent.LastWriteTime == old);
                Assert.IsTrue(parent.CreationTime == old);
            }
        }
예제 #5
0
        public void Timestamps_CreateFileStream_GrandparentDirectoryIsntUpdated()
        {
            // arrange
            using (var driver = new DiskDriver())
            {
                var beforeCreate = DateTime.Now;

                var f      = driver.CreateOrGetDirectory(@"c:\parent\subfolder");
                var parent = driver.GetDirectory(@"c:\parent");

                var expected = beforeCreate.AddMinutes(-5);
                parent.LastAccessTime = parent.LastWriteTime = parent.CreationTime = expected;

                Assert.IsTrue(parent.LastAccessTime == expected);
                Assert.IsTrue(parent.LastWriteTime == expected);
                Assert.IsTrue(parent.CreationTime == expected);

                // act
                var file = driver.GetFile(@"c:\parent\subfolder\file.txt");
                using (file.Create()) { }

                // Assert
                Assert.IsTrue(parent.LastAccessTime == expected);
                Assert.IsTrue(parent.LastWriteTime == expected);
                Assert.IsTrue(parent.CreationTime == expected);
            }
        }
예제 #6
0
        public void TimeStamps_CreateFileStream_CanUpdateTimestamps()
        {
            // arrange
            using (var driver = new DiskDriver())
            {
                var beforeCreate = DateTime.Now;

                var f = driver.CreateOrGetDirectory(@"c:\folder");

                var old = beforeCreate.AddMinutes(-5);
                f.LastAccessTime = f.LastWriteTime = f.CreationTime = old;

                Assert.IsTrue(f.LastAccessTime == old);
                Assert.IsTrue(f.LastWriteTime == old);
                Assert.IsTrue(f.CreationTime == old);

                // act
                var file = driver.GetFile(@"c:\folder\file.txt");
                using (file.Create()) { }

                f.Refresh();

                // Assert
                Assert.IsTrue(f.LastAccessTime >= beforeCreate);
                Assert.IsTrue(f.LastWriteTime >= beforeCreate);
                Assert.IsTrue(f.CreationTime == old);
            }
        }
예제 #7
0
        public void Delete_ForDirectory_Recurse_DirectoryNotEmpty_CanDelete()
        {
            // arrange
            using (var driver = new DiskDriver())
            {
                driver.CreateOrGetFile(@"c:\folder\subfolder\file.txt");
                driver.CreateOrGetFile(@"c:\folder\file.txt");
                driver.CreateOrGetFile(@"c:\other_folder\file.txt");

                // act
                var folder = driver.GetDirectory(@"c:\folder");
                folder.Delete(true);

                // assert
                folder.Refresh();
                Assert.IsFalse(folder.Exists);
                Assert.IsFalse(driver.GetDirectory(@"c:\folder\subfolder").Exists);
                Assert.IsFalse(driver.GetFile(@"c:\folder\subfolder\file.txt").Exists);

                var c = driver.GetDirectory(@"c:\");
                var filesAfterDelete = c.GetFiles("*", SearchOption.AllDirectories);
                Assert.AreEqual(1, filesAfterDelete.Length);
                Assert.AreEqual(@"c:\other_folder\file.txt", filesAfterDelete[0].FullName);

                var directoriesAfterDelete = c.GetDirectories("*", SearchOption.AllDirectories);
                Assert.AreEqual(1, directoriesAfterDelete.Length);
                Assert.AreEqual(@"c:\other_folder", directoriesAfterDelete[0].FullName);
            }
        }
예제 #8
0
        public void SetIsReadOnly_DirDoesntExist_Throws()
        {
            // arrange
            using (var driver = new DiskDriver())
            {
                var file = driver.GetFile(@"c:\temp\file.txt");

                // act/assert
                Assert.ThrowsException <DirectoryNotFoundException>(() => file.IsReadOnly = true);
            }
        }
예제 #9
0
        public void SetCreationTime_DirectoryDoesntExist_Throws()
        {
            // arrange
            using (var driver = new DiskDriver())
            {
                var file = driver.GetFile(@"c:\temp\file.txt");

                // act/assert
                Assert.ThrowsException <DirectoryNotFoundException>(() => file.CreationTime = DateTime.Now);
            }
        }
예제 #10
0
        public void MoveTo_SourceDirectoryDoesntExist_Throws()
        {
            // arrange
            using (var driver = new DiskDriver())
            {
                var src = driver.GetFile(@"c:\src\file.txt");

                // act/assert
                Assert.ThrowsException <DirectoryNotFoundException>(() => src.MoveTo(@"c:\targ"));
            }
        }
예제 #11
0
        public void GetIsReadOnly_FileDoesntExist_ReturnsTrue()
        {
            // arrange
            using (var driver = new DiskDriver())
            {
                var file = driver.GetFile(@"c:\temp\file.txt");

                // act/assert
                Assert.IsTrue(file.IsReadOnly);
            }
        }
예제 #12
0
        public void GetLength_DirectoryDoesntExist_Throws()
        {
            // arrange
            using (var driver = new DiskDriver())
            {
                var file = driver.GetFile(@"c:\temp\file.txt");

                // act/assert
                Assert.ThrowsException <DirectoryNotFoundException>(() => file.Length);
            }
        }
예제 #13
0
        public void SetAttributes_DirectoryDoesntExist_Throws()
        {
            // arrange
            using (var driver = new DiskDriver())
            {
                var file = driver.GetFile(@"c:\temp\file.txt");

                // act/assert
                Assert.ThrowsException <DirectoryNotFoundException>(() => file.Attributes = FileAttributes.Hidden);
            }
        }
예제 #14
0
        public void CopyTo_SourceFileDoesntExist_Throws()
        {
            // arrange
            using (var driver = new DiskDriver())
            {
                driver.CreateOrGetDirectory(@"c:\src");
                var src = driver.GetFile(@"c:\src\file.txt");

                // act/assert
                Assert.ThrowsException <FileNotFoundException>(() => src.CopyTo(@"c:\targ\file.txt", true));
            }
        }
예제 #15
0
        public void OpenFile_DirectoryWithTheSameNameAlreadyExists_Throws(FileMode mode)
        {
            // arrange
            using (var driver = new DiskDriver())
            {
                driver.CreateOrGetDirectory(@"c:\file");
                var f = driver.GetFile(@"c:\file");

                // act/assert
                Assert.ThrowsException <UnauthorizedAccessException>(() => f.Open(mode));
            }
        }
예제 #16
0
        public void SetLastWriteTime_FileDoesntExist_Throws()
        {
            // arrange
            using (var driver = new DiskDriver())
            {
                driver.CreateOrGetDirectory(@"c:\temp");
                var file = driver.GetFile(@"c:\temp\file.txt");

                // act/assert
                Assert.ThrowsException <FileNotFoundException>(() => file.LastWriteTime = DateTime.Now);
            }
        }
예제 #17
0
        public void GetCustomData_CanStoreCustomData()
        {
            // arrange
            using (var driver = new DiskDriver())
            {
                var file = driver.CreateOrGetFile(@"c:\file.txt");
                file.CustomData.Add("my-data-key", "my-data-value");

                // assert
                file = driver.GetFile(@"c:\file.txt");
                Assert.AreEqual("my-data-value", file.CustomData["my-data-key"]);
            }
        }
예제 #18
0
        public void OpenFile_TruncateMode_FileDeosntExist_Throws()
        {
            // arrange
            using (var driver = new DiskDriver())
            {
                driver.CreateOrGetDirectory(@"c:\temp");
                var file = driver.GetFile(@"c:\temp\file.txt");

                // act
                Assert.ThrowsException <FileNotFoundException>(() =>
                {
                    file.Open(FileMode.Truncate, FileAccess.Write, FileShare.ReadWrite);
                });
            }
        }
예제 #19
0
        public void SetAttributes_FileExists_CanSetAttributes()
        {
            // arrange
            using (var driver = new DiskDriver())
            {
                var file = driver.CreateOrGetFile(@"c:\temp\file.txt");

                // act
                file            = driver.GetFile(@"c:\temp\file.txt");
                file.Attributes = FileAttributes.Hidden;

                // assert
                Assert.AreEqual(FileAttributes.Hidden, file.Attributes);
            }
        }
예제 #20
0
        public void Delete_ForFile_FileDoesntExist_DoesNothing()
        {
            // arrange
            using (var driver = new DiskDriver())
            {
                driver.CreateOrGetDirectory(@"c:\temp");
                var file = driver.GetFile(@"c:\temp\file.txt");

                // act
                file.Delete();

                // assert
                file.Refresh();
                Assert.IsFalse(file.Exists);
            }
        }
예제 #21
0
        public void SetIsReadOnly_FileExist_CanSet()
        {
            // arrange
            using (var driver = new DiskDriver())
            {
                var file1 = driver.CreateOrGetFile(@"c:\temp\file.txt");
                file1.IsReadOnly = false;


                var file2 = driver.GetFile(@"c:\temp\file.txt");
                Assert.IsFalse(file2.IsReadOnly);

                file1.IsReadOnly = true;
                file2.Refresh();
                Assert.IsTrue(file2.IsReadOnly);
            }
        }
예제 #22
0
        public void GetLength_FileExist_CanReturnLength()
        {
            // arrange
            using (var driver = new DiskDriver())
                using (var ms = new MemoryStream(new byte[] { 1, 2, 3, 4 }))
                {
                    driver.CreateOrGetDirectory(@"c:\temp");
                    var file = driver.GetFile(@"c:\temp\file.txt");

                    using (var fs = file.OpenWrite())
                    {
                        ms.CopyTo(fs);
                    }

                    file.Refresh();

                    // assert
                    Assert.AreEqual(ms.Length, file.Length);
                }
        }
예제 #23
0
        public void CopyTo_TargetIsNewFile_CanCopy()
        {
            // arrange
            using (var driver = new DiskDriver())
            {
                var src = driver.CreateOrGetFile(@"c:\src\file.txt");
                driver.CreateOrGetDirectory(@"c:\targ");
                driver.GetFile(@"c:\targ\new_file.txt");
                using (var t = src.CreateText())
                {
                    t.Write("CONTENT");
                }

                // act
                var result = src.CopyTo(@"c:\targ\new_file.txt", false);

                // assert
                using (var t = result.OpenText())
                {
                    Assert.AreEqual("CONTENT", t.ReadToEnd());
                }
            }
        }
예제 #24
0
        public void MoveTo_CanKeepTimes()
        {
            // arrange
            using (var driver = new DiskDriver())
            {
                var src = driver.CreateOrGetFile(@"c:\src\file.txt");
                driver.CreateOrGetDirectory(@"c:\targ");
                var time = DateTime.Now.AddMinutes(-5);

                src.LastAccessTime       =
                    src.LastWriteTime    =
                        src.CreationTime =
                            time;

                // act
                src.MoveTo(@"c:\targ\file.txt");

                // assert
                var result = driver.GetFile(@"c:\targ\file.txt");
                Assert.AreEqual(time, result.LastWriteTime);
                Assert.AreEqual(time, result.LastAccessTime);
                Assert.AreEqual(time, result.CreationTime);
            }
        }
예제 #25
0
        public void Move_CanUpdateControlBlockCollections()
        {
            // arrange
            using (var driver = new DiskDriver())
            {
                driver.CreateOrGetFile(@"c:\src\folder_1\subfolder_1\file_1.txt");
                driver.CreateOrGetFile(@"c:\src\folder_1\subfolder_1\file_2.txt");
                driver.CreateOrGetFile(@"c:\src\folder_1\subfolder_2\file_1.txt");
                driver.CreateOrGetFile(@"c:\src\folder_1\subfolder_2\file_2.txt");
                driver.CreateOrGetFile(@"c:\src\folder_2\subfolder_1\file_1.txt");
                driver.CreateOrGetFile(@"c:\src\folder_2\subfolder_1\file_2.txt");
                driver.CreateOrGetFile(@"c:\src\folder_2\subfolder_2\file_1.txt");
                driver.CreateOrGetFile(@"c:\src\folder_2\subfolder_2\file_2.txt");

                driver.CreateOrGetDirectory(@"c:\targ");

                var folder_1 = driver.GetDirectory(@"c:\src\folder_1");

                // act
                folder_1.MoveTo(@"c:\targ\folder_1");

                // assert
                var fileStub = driver.GetFile(@"c:\targ\folder_1\subfolder_1\file_1.txt");
                Assert.IsTrue(fileStub.Exists);
                fileStub = driver.GetFile(@"c:\targ\folder_1\subfolder_1\file_2.txt");
                Assert.IsTrue(fileStub.Exists);
                fileStub = driver.GetFile(@"c:\targ\folder_1\subfolder_2\file_1.txt");
                Assert.IsTrue(fileStub.Exists);
                fileStub = driver.GetFile(@"c:\targ\folder_1\subfolder_2\file_2.txt");
                Assert.IsTrue(fileStub.Exists);

                fileStub = driver.GetFile(@"c:\src\folder_1\subfolder_1\file_1.txt");
                Assert.IsFalse(fileStub.Exists);
                fileStub = driver.GetFile(@"c:\src\folder_1\subfolder_1\file_2.txt");
                Assert.IsFalse(fileStub.Exists);
                fileStub = driver.GetFile(@"c:\src\folder_1\subfolder_2\file_1.txt");
                Assert.IsFalse(fileStub.Exists);
                fileStub = driver.GetFile(@"c:\src\folder_1\subfolder_2\file_2.txt");
                Assert.IsFalse(fileStub.Exists);

                fileStub = driver.GetFile(@"c:\src\folder_2\subfolder_1\file_1.txt");
                Assert.IsTrue(fileStub.Exists);
                fileStub = driver.GetFile(@"c:\src\folder_2\subfolder_1\file_2.txt");
                Assert.IsTrue(fileStub.Exists);
                fileStub = driver.GetFile(@"c:\src\folder_2\subfolder_2\file_1.txt");
                Assert.IsTrue(fileStub.Exists);
                fileStub = driver.GetFile(@"c:\src\folder_2\subfolder_2\file_2.txt");
                Assert.IsTrue(fileStub.Exists);

                var dirStub = driver.GetDirectory(@"c:\targ");
                Assert.IsTrue(dirStub.Exists);
                dirStub = driver.GetDirectory(@"c:\targ\folder_1");
                Assert.IsTrue(dirStub.Exists);
                dirStub = driver.GetDirectory(@"c:\targ\folder_1\subfolder_1");
                Assert.IsTrue(dirStub.Exists);
                dirStub = driver.GetDirectory(@"c:\targ\folder_1\subfolder_2");
                Assert.IsTrue(dirStub.Exists);

                dirStub = driver.GetDirectory(@"c:\src\folder_1");
                Assert.IsFalse(dirStub.Exists);
                dirStub = driver.GetDirectory(@"c:\src\folder_1\subfolder_1");
                Assert.IsFalse(dirStub.Exists);
                dirStub = driver.GetDirectory(@"c:\src\folder_1\subfolder_2");
                Assert.IsFalse(dirStub.Exists);

                dirStub = driver.GetDirectory(@"c:\src");
                Assert.IsTrue(dirStub.Exists);
                dirStub = driver.GetDirectory(@"c:\src\folder_2");
                Assert.IsTrue(dirStub.Exists);
                dirStub = driver.GetDirectory(@"c:\src\folder_2\subfolder_1");
                Assert.IsTrue(dirStub.Exists);
                dirStub = driver.GetDirectory(@"c:\src\folder_2\subfolder_2");
                Assert.IsTrue(dirStub.Exists);
            }
        }