DirectoryUtilsTest.cs 3.6 KB

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