DarabonbaUnitTests/FileTest.cs (167 lines of code) (raw):
using System.Text;
using Darabonba;
using Xunit;
using System;
using System.IO;
using System.Threading.Tasks;
using File = Darabonba.File;
namespace DaraUnitTests
{
public class FileTest : IAsyncLifetime
{
private File _file;
private FileInfo _fileInfo;
private string tempTestFile = Path.GetTempFileName();
public async Task InitializeAsync()
{
System.IO.File.WriteAllText(tempTestFile, "Test For File");
_file = new File(tempTestFile);
_fileInfo = new FileInfo(tempTestFile);
}
public Task DisposeAsync()
{
_file.Close();
System.IO.File.Delete(tempTestFile);
#if NET45
return Task.FromResult(0);
#else
return Task.CompletedTask;
#endif
}
[Fact]
public async Task Test_All()
{
TestPath();
await TestCreateTimeAsync();
await TestModifyTimeAsync();
await TestLengthAsync();
TestExists();
await TestExistsAsync();
TestRead();
await TestReadAsync();
TestWrite();
await TestWriteAsync();
TestCreateWriteStream();
TestCreateReadStream();
}
private void TestPath()
{
Assert.Equal(tempTestFile, _file.Path());
}
private async Task TestCreateTimeAsync()
{
var createTime = await _file.CreateTimeAsync();
Assert.Equal(_fileInfo.CreationTimeUtc.ToString("yyyy-MM-dd HH:mm:ssZ"), createTime.DateTime.ToString("yyyy-MM-dd HH:mm:ssZ"));
}
private async Task TestModifyTimeAsync()
{
var modifyTime = await _file.ModifyTimeAsync();
Assert.Equal(_fileInfo.LastWriteTimeUtc.ToString("yyyy-MM-dd HH:mm:ssZ"), modifyTime.DateTime.ToString("yyyy-MM-dd HH:mm:ssZ"));
}
private async Task TestLengthAsync()
{
var length = await _file.LengthAsync();
Assert.Equal(_fileInfo.Length, length);
string tempTestFile1 = Path.GetTempFileName();
System.IO.File.WriteAllText(tempTestFile1, "Hello, World!");
var newFile = new File(tempTestFile1);
var newLength = await newFile.LengthAsync();
Assert.Equal(_fileInfo.Length, newLength);
await newFile.CloseAsync();
}
private void TestExists()
{
Assert.True(File.Exists(tempTestFile));
Assert.False(File.Exists("../../../../TeaUnitTests/Fixtures/test1.txt"));
}
private async Task TestExistsAsync()
{
Assert.True(await File.ExistsAsync(tempTestFile));
Assert.False(await File.ExistsAsync("../../../../TeaUnitTests/Fixtures/test1.txt"));
}
private void TestRead()
{
byte[] text1 = _file.Read(4);
Assert.Equal("Test", Encoding.UTF8.GetString(text1));
byte[] text2 = _file.Read(4);
Assert.Equal(" For", Encoding.UTF8.GetString(text2));
Assert.Equal(8, _file._position);
string tempEmptyFile = Path.GetTempFileName();
File emptyFile = new File(tempEmptyFile);
byte[] empty = emptyFile.Read(10);
Assert.Null(empty);
emptyFile.Close();
}
private async Task TestReadAsync()
{
_file._position = 0;
byte[] text1 = await _file.ReadAsync(4);
Assert.Equal("Test", Encoding.UTF8.GetString(text1));
byte[] text2 = await _file.ReadAsync(4);
Assert.Equal(" For", Encoding.UTF8.GetString(text2));
Assert.Equal(8, _file._position);
string tempEmptyFile = Path.GetTempFileName();
File emptyFile = new File(tempEmptyFile);
byte[] empty = await emptyFile.ReadAsync(10);
Assert.Null(empty);
await emptyFile.CloseAsync();
}
private void TestWrite()
{
var expectedLen = _fileInfo.Length;
_file.Write(Encoding.UTF8.GetBytes(" Test"));
Date modifyTime = _file.ModifyTime();
int length = _file.Length();
Assert.Equal(DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ssZ"), modifyTime.DateTime.ToString("yyyy-MM-dd HH:mm:ssZ"));
Assert.Equal(expectedLen + 5, length);
string tempNewFile = Path.GetTempFileName();
File newFile = new File(tempNewFile);
newFile.Write(Encoding.UTF8.GetBytes("Test"));
byte[] text = newFile.Read(4);
Assert.Equal("Test", Encoding.UTF8.GetString(text));
newFile.Close();
}
private async Task TestWriteAsync()
{
var expectedLen = _fileInfo.Length;
await _file.WriteAsync(Encoding.UTF8.GetBytes(" Test"));
Date modifyTime = await _file.ModifyTimeAsync();
int length = await _file.LengthAsync();
Assert.Equal(DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ssZ"), modifyTime.DateTime.ToString("yyyy-MM-dd HH:mm:ssZ"));
Assert.Equal(expectedLen + 10, length);
string tempNewFile = Path.GetTempFileName();
File newFile = new File(tempNewFile);
await newFile.WriteAsync(Encoding.UTF8.GetBytes("Test"));
byte[] text = await newFile.ReadAsync(4);
Assert.Equal("Test", Encoding.UTF8.GetString(text));
await newFile.CloseAsync();
}
private void TestCreateWriteStream()
{
string tempWriteFile = Path.GetTempFileName();
using (FileStream stream = File.CreateWriteStream(tempWriteFile))
{
Assert.NotNull(stream);
Assert.True(stream.CanWrite);
byte[] contentBytes = Encoding.UTF8.GetBytes("Test Write");
stream.Write(contentBytes, 0, contentBytes.Length);
}
string finalContent = System.IO.File.ReadAllText(tempWriteFile);
Assert.EndsWith("Test Write", finalContent);
}
private void TestCreateReadStream()
{
string tempReadFile = Path.GetTempFileName();
System.IO.File.WriteAllText(tempReadFile, "Test For File");
using (FileStream stream = File.CreateReadStream(tempReadFile))
{
Assert.NotNull(stream);
Assert.True(stream.CanRead);
byte[] buffer = new byte[13];
int bytesRead = stream.Read(buffer, 0, buffer.Length);
string actualContent = Encoding.UTF8.GetString(buffer, 0, bytesRead);
Assert.Equal("Test For File", actualContent);
}
}
}
}