FileUtilsTest.cs 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. namespace MeloongCore.Tests;
  2. public class FileUtilsTest : TestWithFolder {
  3. #region 压缩包
  4. [Theory]
  5. [InlineData("GB Encoding.zip")]
  6. [InlineData("UTF8 Encoding.zip")]
  7. public void Compression_ReadZip(string testFile) {
  8. double progress = 0;
  9. string output = Path.Combine(tempFolder, "Extracted");
  10. FileUtils.ExtractToDirectory(GetTestFile(testFile), output, p => progress = p);
  11. Assert.Equal(1, progress);
  12. Assert.True(DirectoryUtils.Exists(Path.Combine(output, "文件夹")));
  13. Assert.False(DirectoryUtils.Exists(Path.Combine(output, "空文件夹")));
  14. Assert.Contains("FabricLoader", File.ReadAllText(PathUtils.WithLongPath(Path.Combine(output, "fabricloader.log"))));
  15. Assert.Contains("测试内容", File.ReadAllText(PathUtils.WithLongPath(Path.Combine(output, "文件夹", "中文文件.txt"))));
  16. }
  17. [Theory]
  18. [InlineData("GZ.gz", "LTCat")]
  19. public void Compression_ReadGz(string testFile, string containsText) {
  20. double progress = 0;
  21. string output = Path.Combine(tempFolder, "Extracted");
  22. FileUtils.ExtractToDirectory(GetTestFile(testFile), output, p => progress = p);
  23. Assert.Equal(1, progress);
  24. Assert.Contains(containsText, File.ReadAllText(PathUtils.WithLongPath(Path.Combine(output, Path.GetFileNameWithoutExtension(testFile)))));
  25. }
  26. [Theory]
  27. [InlineData("Corrupted.zip")]
  28. [InlineData("Not zip.zip")]
  29. public void Compression_ReadBad(string testFile) {
  30. Assert.Throws<InvalidDataException>(() => FileUtils.ExtractToDirectory(GetTestFile(testFile), tempFolder));
  31. }
  32. [Theory]
  33. [InlineData("DotDot ZipSlip.zip")]
  34. [InlineData("AbsPath ZipSlip.zip")]
  35. public void Compression_ZipSlip(string testFile) {
  36. Assert.Throws<FileUtils.ZipSlipException>(() => FileUtils.ExtractToDirectory(GetTestFile(testFile), tempFolder));
  37. }
  38. #endregion
  39. }