TextEncodingDetectorTests.cs 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. using System;
  2. using System.IO;
  3. using System.Text;
  4. using Masuit.Tools.Files;
  5. using Masuit.Tools.Systems;
  6. using Xunit;
  7. namespace Masuit.Tools.Abstractions.Test.Files;
  8. public class TextEncodingDetectorTests
  9. {
  10. [Theory]
  11. [InlineData("Hello, World!", "ASCII")]
  12. [InlineData("Hello, World!", "UTF-8")]
  13. [InlineData("Hello, World!", "Unicode")]
  14. [InlineData("Hello, World!", "UTF-32")]
  15. public void GetEncoding_ShouldDetectEncodingFromFile(string content, string encodingName)
  16. {
  17. string _testFilePath = Path.Combine(Path.GetTempPath(), "testfile1.txt");
  18. var encoding = Encoding.GetEncoding(encodingName);
  19. File.WriteAllText(_testFilePath, content, encoding);
  20. var detectedEncoding = TextEncodingDetector.GetEncoding(_testFilePath);
  21. Assert.Equal(encoding, detectedEncoding);
  22. }
  23. [Theory]
  24. [InlineData("Hello, World!", "ASCII")]
  25. [InlineData("Hello, World!", "UTF-8")]
  26. [InlineData("Hello, World!", "Unicode")]
  27. [InlineData("Hello, World!", "UTF-32")]
  28. public void GetEncoding_ShouldDetectEncodingFromFileInfo(string content, string encodingName)
  29. {
  30. string _testFilePath = Path.Combine(Path.GetTempPath(), "testfile2.txt");
  31. var encoding = Encoding.GetEncoding(encodingName);
  32. File.WriteAllText(_testFilePath, content, encoding);
  33. var fileInfo = new FileInfo(_testFilePath);
  34. var detectedEncoding = fileInfo.GetEncoding();
  35. Assert.Equal(encoding, detectedEncoding);
  36. }
  37. [Theory]
  38. [InlineData("Hello, World!", "ASCII")]
  39. [InlineData("Hello, World!", "UTF-8")]
  40. [InlineData("Hello, World!", "Unicode")]
  41. [InlineData("Hello, World!", "UTF-32")]
  42. public void GetEncoding_ShouldDetectEncodingFromStream(string content, string encodingName)
  43. {
  44. string _testFilePath = Path.Combine(Path.GetTempPath(), "testfile3.txt");
  45. var encoding = Encoding.GetEncoding(encodingName);
  46. File.WriteAllText(_testFilePath, content, encoding);
  47. using var stream = new FileStream(_testFilePath, FileMode.Open, FileAccess.Read);
  48. var detectedEncoding = stream.GetEncoding();
  49. Assert.Equal(encoding, detectedEncoding);
  50. }
  51. [Theory]
  52. [InlineData(new byte[] { 255, 254, 0, 0 }, "UTF-32")]
  53. [InlineData(new byte[] { 0, 0, 254, 255 }, "utf-32BE")]
  54. [InlineData(new byte[] { 239, 187, 191 }, "UTF-8")]
  55. [InlineData(new byte[] { 72, 101, 108, 108 }, "ASCII")]
  56. public void GetEncoding_ShouldDetectEncodingFromBytes(byte[] bytes, string expectedEncodingName)
  57. {
  58. var expectedEncoding = Encoding.GetEncoding(expectedEncodingName);
  59. var detectedEncoding = new PooledMemoryStream(bytes).GetEncoding();
  60. Assert.Equal(expectedEncoding, detectedEncoding);
  61. }
  62. }