Files
2024-12-27 13:49:16 +08:00

67 lines
2.7 KiB
C#

using System;
using System.IO;
using System.Text;
using Masuit.Tools.Files;
using Masuit.Tools.Systems;
using Xunit;
namespace Masuit.Tools.Abstractions.Test.Files;
public class TextEncodingDetectorTests
{
[Theory]
[InlineData("Hello, World!", "ASCII")]
[InlineData("Hello, World!", "UTF-8")]
[InlineData("Hello, World!", "Unicode")]
[InlineData("Hello, World!", "UTF-32")]
public void GetEncoding_ShouldDetectEncodingFromFile(string content, string encodingName)
{
string _testFilePath = Path.Combine(Path.GetTempPath(), "testfile1.txt");
var encoding = Encoding.GetEncoding(encodingName);
File.WriteAllText(_testFilePath, content, encoding);
var detectedEncoding = TextEncodingDetector.GetEncoding(_testFilePath);
Assert.Equal(encoding, detectedEncoding);
}
[Theory]
[InlineData("Hello, World!", "ASCII")]
[InlineData("Hello, World!", "UTF-8")]
[InlineData("Hello, World!", "Unicode")]
[InlineData("Hello, World!", "UTF-32")]
public void GetEncoding_ShouldDetectEncodingFromFileInfo(string content, string encodingName)
{
string _testFilePath = Path.Combine(Path.GetTempPath(), "testfile2.txt");
var encoding = Encoding.GetEncoding(encodingName);
File.WriteAllText(_testFilePath, content, encoding);
var fileInfo = new FileInfo(_testFilePath);
var detectedEncoding = fileInfo.GetEncoding();
Assert.Equal(encoding, detectedEncoding);
}
[Theory]
[InlineData("Hello, World!", "ASCII")]
[InlineData("Hello, World!", "UTF-8")]
[InlineData("Hello, World!", "Unicode")]
[InlineData("Hello, World!", "UTF-32")]
public void GetEncoding_ShouldDetectEncodingFromStream(string content, string encodingName)
{
string _testFilePath = Path.Combine(Path.GetTempPath(), "testfile3.txt");
var encoding = Encoding.GetEncoding(encodingName);
File.WriteAllText(_testFilePath, content, encoding);
using var stream = new FileStream(_testFilePath, FileMode.Open, FileAccess.Read);
var detectedEncoding = stream.GetEncoding();
Assert.Equal(encoding, detectedEncoding);
}
[Theory]
[InlineData(new byte[] { 255, 254, 0, 0 }, "UTF-32")]
[InlineData(new byte[] { 0, 0, 254, 255 }, "utf-32BE")]
[InlineData(new byte[] { 239, 187, 191 }, "UTF-8")]
[InlineData(new byte[] { 72, 101, 108, 108 }, "ASCII")]
public void GetEncoding_ShouldDetectEncodingFromBytes(byte[] bytes, string expectedEncodingName)
{
var expectedEncoding = Encoding.GetEncoding(expectedEncodingName);
var detectedEncoding = new PooledMemoryStream(bytes).GetEncoding();
Assert.Equal(expectedEncoding, detectedEncoding);
}
}