DirectoryUtilsTest.cs 4.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. namespace MeloongCore.Tests;
  2. public class DirectoryUtilsTest : TestWithFolder {
  3. #region 剪切、复制
  4. [Test]
  5. [Arguments("Source", "目标文件夹")]
  6. [Arguments("Source", "Source")]
  7. [Arguments("Source", "soURCE")]
  8. public async Task 复制(string sourceName, string destName) {
  9. var src = Path.Combine(tempFolder, sourceName);
  10. DirectoryUtils.Create(Path.Combine(src, "sub"));
  11. FileUtils.Write(Path.Combine(src, "a.txt"), "aaa");
  12. FileUtils.Write(Path.Combine(src, "sub", "b file.txt"), "bbb");
  13. var dest = Path.Combine(tempFolder, destName);
  14. DirectoryUtils.Copy(src, dest);
  15. await Assert.That(FileUtils.ReadAsString(Path.Combine(src, "a.txt"))).IsEqualTo("aaa");
  16. await Assert.That(FileUtils.ReadAsString(Path.Combine(dest, "a.txt"))).IsEqualTo("aaa");
  17. await Assert.That(FileUtils.ReadAsString(Path.Combine(src, "sub", "b file.txt"))).IsEqualTo("bbb");
  18. await Assert.That(FileUtils.ReadAsString(Path.Combine(dest, "sub", "b file.txt"))).IsEqualTo("bbb");
  19. await Assert.That(DirectoryUtils.EnumerateDirectories(tempFolder, true)).Contains(dest); // 目标文件夹名
  20. }
  21. [Test]
  22. [Arguments("Source", "目标文件夹")]
  23. [Arguments("Source", "Source")]
  24. [Arguments("Source", "soURCE")]
  25. public async Task 剪切(string sourceName, string destName) {
  26. var src = Path.Combine(tempFolder, sourceName);
  27. DirectoryUtils.Create(Path.Combine(src, "sub"));
  28. FileUtils.Write(Path.Combine(src, "a.txt"), "aaa");
  29. FileUtils.Write(Path.Combine(src, "sub", "b file.txt"), "bbb");
  30. var dest = Path.Combine(tempFolder, destName);
  31. DirectoryUtils.Move(src, dest);
  32. await Assert.That(FileUtils.ReadAsString(Path.Combine(dest, "a.txt"))).IsEqualTo("aaa");
  33. await Assert.That(FileUtils.ReadAsString(Path.Combine(dest, "sub", "b file.txt"))).IsEqualTo("bbb");
  34. if (src != dest) await Assert.That(DirectoryUtils.EnumerateDirectories(tempFolder, true)).DoesNotContain(src);
  35. await Assert.That(DirectoryUtils.EnumerateDirectories(tempFolder, true)).Contains(dest); // 目标文件夹名
  36. }
  37. [Test]
  38. public async Task 剪切_不同磁盘() {
  39. // 寻找两个磁盘
  40. var drives = DriveInfo.GetDrives()
  41. .Where(d => d.IsReady && d.DriveType == DriveType.Fixed)
  42. .ToArray();
  43. if (drives.Length < 2) return;
  44. var id = Guid.NewGuid().ToString("N");
  45. var srcRoot = Path.Combine(drives[0].RootDirectory.FullName, "Temp", $"MeloongTest_{id}");
  46. var destRoot = Path.Combine(drives[1].RootDirectory.FullName, "Temp", $"MeloongTest_{id}");
  47. var src = Path.Combine(srcRoot, "src");
  48. var dest = Path.Combine(destRoot, "dest");
  49. try {
  50. DirectoryUtils.Create(src);
  51. FileUtils.Write(Path.Combine(src, "a.txt"), "aaa");
  52. FileUtils.Write(Path.Combine(src, "sub", "b file.txt"), "bbb");
  53. DirectoryUtils.Move(src, dest);
  54. await Assert.That(DirectoryUtils.Exists(src)).IsFalse();
  55. await Assert.That(FileUtils.ReadAsString(Path.Combine(dest, "a.txt"))).IsEqualTo("aaa");
  56. await Assert.That(FileUtils.ReadAsString(Path.Combine(dest, "sub", "b file.txt"))).IsEqualTo("bbb");
  57. } finally {
  58. DirectoryUtils.Delete(srcRoot);
  59. DirectoryUtils.Delete(destRoot);
  60. }
  61. }
  62. [Test]
  63. public void 剪切_安全检查()
  64. => Assert.Throws<UnauthorizedAccessException>(() => DirectoryUtils.Move(Paths.Base, Path.Combine(tempFolder, "SafetyCheckDest")));
  65. [Test]
  66. public async Task 删除_安全检查_允许程序目录下的子文件夹() {
  67. var folder = Path.Combine(Paths.Base, $"MeloongTest_{Guid.NewGuid():N}");
  68. try {
  69. DirectoryUtils.Create(folder);
  70. DirectoryUtils.Delete(folder);
  71. await Assert.That(DirectoryUtils.Exists(folder)).IsFalse();
  72. } finally {
  73. if (Directory.Exists(PathUtils.ForApi(folder))) Directory.Delete(PathUtils.ForApi(folder), true);
  74. }
  75. }
  76. #endregion
  77. }