| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- namespace MeloongCore.Tests;
- public class DirectoryUtilsTest : TestWithFolder {
- [Test]
- [Arguments(false)]
- [Arguments(true)]
- public async Task 土耳其语_目录同源及仅改大小写保留内容(bool copy) {
- var originalCulture = System.Globalization.CultureInfo.CurrentCulture;
- string root = tempFolder;
- string source = Path.Combine(root, "FILES");
- string destination = Path.Combine(root, "files");
- try {
- System.Globalization.CultureInfo.CurrentCulture = System.Globalization.CultureInfo.GetCultureInfo("tr-TR");
- DirectoryUtils.Create(source);
- FileUtils.Write(Path.Combine(source, "keep.txt"), "目录内容");
- if (copy) {
- DirectoryUtils.Copy(source, source);
- DirectoryUtils.Copy(source, destination);
- } else {
- DirectoryUtils.Move(source, source);
- DirectoryUtils.Move(source, destination);
- }
- await Assert.That(FileUtils.ReadAsString(Path.Combine(destination, "keep.txt"))).IsEqualTo("目录内容");
- await Assert.That(Directory.GetDirectories(PathUtils.ForApi(root)).Select(Path.GetFileName).Single()).IsEqualTo("files");
- } finally {
- System.Globalization.CultureInfo.CurrentCulture = originalCulture;
- DirectoryUtils.Delete(root);
- }
- }
- #region 剪切、复制
- [Test]
- [Arguments("Source", "目标文件夹")]
- [Arguments("Source", "Source")]
- [Arguments("Source", "soURCE")]
- public async Task 复制(string sourceName, string destName) {
- var src = Path.Combine(tempFolder, sourceName);
- DirectoryUtils.Create(Path.Combine(src, "sub"));
- FileUtils.Write(Path.Combine(src, "a.txt"), "aaa");
- FileUtils.Write(Path.Combine(src, "sub", "b file.txt"), "bbb");
- var dest = Path.Combine(tempFolder, destName);
- DirectoryUtils.Copy(src, dest);
- await Assert.That(FileUtils.ReadAsString(Path.Combine(src, "a.txt"))).IsEqualTo("aaa");
- await Assert.That(FileUtils.ReadAsString(Path.Combine(dest, "a.txt"))).IsEqualTo("aaa");
- await Assert.That(FileUtils.ReadAsString(Path.Combine(src, "sub", "b file.txt"))).IsEqualTo("bbb");
- await Assert.That(FileUtils.ReadAsString(Path.Combine(dest, "sub", "b file.txt"))).IsEqualTo("bbb");
- await Assert.That(DirectoryUtils.EnumerateDirectories(tempFolder, true)).Contains(dest); // 目标文件夹名
- }
- [Test]
- [Arguments("Source", "目标文件夹")]
- [Arguments("Source", "Source")]
- [Arguments("Source", "soURCE")]
- public async Task 剪切(string sourceName, string destName) {
- var src = Path.Combine(tempFolder, sourceName);
- DirectoryUtils.Create(Path.Combine(src, "sub"));
- FileUtils.Write(Path.Combine(src, "a.txt"), "aaa");
- FileUtils.Write(Path.Combine(src, "sub", "b file.txt"), "bbb");
- var dest = Path.Combine(tempFolder, destName);
- DirectoryUtils.Move(src, dest);
- await Assert.That(FileUtils.ReadAsString(Path.Combine(dest, "a.txt"))).IsEqualTo("aaa");
- await Assert.That(FileUtils.ReadAsString(Path.Combine(dest, "sub", "b file.txt"))).IsEqualTo("bbb");
- if (src != dest) await Assert.That(DirectoryUtils.EnumerateDirectories(tempFolder, true)).DoesNotContain(src);
- await Assert.That(DirectoryUtils.EnumerateDirectories(tempFolder, true)).Contains(dest); // 目标文件夹名
- }
- [Test]
- public async Task 剪切_不同磁盘() {
- // 寻找两个磁盘
- var drives = DriveInfo.GetDrives()
- .Where(d => d.IsReady && d.DriveType == DriveType.Fixed)
- .ToArray();
- if (drives.Length < 2) return;
- var id = Guid.NewGuid().ToString("N");
- var srcRoot = Path.Combine(drives[0].RootDirectory.FullName, "Temp", $"MeloongTest_{id}");
- var destRoot = Path.Combine(drives[1].RootDirectory.FullName, "Temp", $"MeloongTest_{id}");
- var src = Path.Combine(srcRoot, "src");
- var dest = Path.Combine(destRoot, "dest");
- try {
- DirectoryUtils.Create(src);
- FileUtils.Write(Path.Combine(src, "a.txt"), "aaa");
- FileUtils.Write(Path.Combine(src, "sub", "b file.txt"), "bbb");
- DirectoryUtils.Move(src, dest);
- await Assert.That(DirectoryUtils.Exists(src)).IsFalse();
- await Assert.That(FileUtils.ReadAsString(Path.Combine(dest, "a.txt"))).IsEqualTo("aaa");
- await Assert.That(FileUtils.ReadAsString(Path.Combine(dest, "sub", "b file.txt"))).IsEqualTo("bbb");
- } finally {
- DirectoryUtils.Delete(srcRoot);
- DirectoryUtils.Delete(destRoot);
- }
- }
- [Test]
- public void 剪切_安全检查()
- => Assert.Throws<UnauthorizedAccessException>(() => DirectoryUtils.Move(Paths.Base, Path.Combine(tempFolder, "SafetyCheckDest")));
- [Test]
- public async Task 删除_安全检查_允许程序目录下的子文件夹() {
- var folder = Path.Combine(Paths.Base, $"MeloongTest_{Guid.NewGuid():N}");
- try {
- DirectoryUtils.Create(folder);
- DirectoryUtils.Delete(folder);
- await Assert.That(DirectoryUtils.Exists(folder)).IsFalse();
- } finally {
- if (Directory.Exists(PathUtils.ForApi(folder))) Directory.Delete(PathUtils.ForApi(folder), true);
- }
- }
- #endregion
- }
|