FileSignatureDetectorTests.cs 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. using System.Collections.Generic;
  2. using System.IO;
  3. using Masuit.Tools.Files.FileDetector;
  4. using Xunit;
  5. namespace Masuit.Tools.Abstractions.Test.Files;
  6. public class FileSignatureDetectorTests
  7. {
  8. [Fact]
  9. public void AddDetector_ShouldAddDetector()
  10. {
  11. var detector = new TestDetector();
  12. FileSignatureDetector.AddDetector(detector);
  13. Assert.Contains(detector, FileSignatureDetector.Registered);
  14. }
  15. [Fact]
  16. public void AddDetector_Generic_ShouldAddDetector()
  17. {
  18. FileSignatureDetector.AddDetector<TestDetector>();
  19. Assert.Contains(FileSignatureDetector.Registered, d => d is TestDetector);
  20. }
  21. [Fact]
  22. public void DetectFiletype_ShouldDetectFiletypeFromFilepath()
  23. {
  24. var detector = new TestDetector();
  25. FileSignatureDetector.AddDetector(detector);
  26. var tempFile = Path.GetTempFileName();
  27. File.WriteAllText(tempFile, "Test content");
  28. var result = FileSignatureDetector.DetectFiletype(tempFile);
  29. Assert.IsType<TestDetector>(result);
  30. File.Delete(tempFile);
  31. }
  32. [Fact]
  33. public void DetectFiletype_ShouldDetectFiletypeFromFileInfo()
  34. {
  35. var detector = new TestDetector();
  36. FileSignatureDetector.AddDetector(detector);
  37. var tempFile = new FileInfo(Path.GetTempFileName());
  38. File.WriteAllText(tempFile.FullName, "Test content");
  39. var result = FileSignatureDetector.DetectFiletype(tempFile);
  40. Assert.IsType<TestDetector>(result);
  41. tempFile.Delete();
  42. }
  43. [Fact]
  44. public void DetectFiletype_ShouldDetectFiletypeFromStream()
  45. {
  46. var detector = new TestDetector();
  47. FileSignatureDetector.AddDetector(detector);
  48. using var stream = new MemoryStream();
  49. using var writer = new StreamWriter(stream);
  50. writer.Write("Test content");
  51. writer.Flush();
  52. stream.Position = 0;
  53. var result = FileSignatureDetector.DetectFiletype(stream);
  54. Assert.IsType<TestDetector>(result);
  55. }
  56. private class TestDetector : IDetector
  57. {
  58. public string Precondition => "Test";
  59. public string Extension => ".test";
  60. public string MimeType => "application/test";
  61. public List<FormatCategory> FormatCategories => new List<FormatCategory> { FormatCategory.Document };
  62. public bool Detect(Stream stream)
  63. {
  64. var reader = new StreamReader(stream);
  65. var content = reader.ReadToEnd();
  66. return content.Contains("Test content");
  67. }
  68. }
  69. }