2021-07-19 22:16:11 +02:00
|
|
|
|
using LibHac.Fs;
|
2020-06-10 07:55:59 +02:00
|
|
|
|
using LibHac.Fs.Fsa;
|
2020-01-28 08:55:39 +01:00
|
|
|
|
using Xunit;
|
|
|
|
|
|
2021-11-14 20:08:57 +01:00
|
|
|
|
namespace LibHac.Tests.Fs.IFileSystemTestBase;
|
|
|
|
|
|
|
|
|
|
public abstract class IAttributeFileSystemTests : IFileSystemTests
|
2020-01-28 08:55:39 +01:00
|
|
|
|
{
|
2021-11-14 20:08:57 +01:00
|
|
|
|
protected abstract IAttributeFileSystem CreateAttributeFileSystem();
|
2020-01-28 08:55:39 +01:00
|
|
|
|
|
2021-11-14 20:08:57 +01:00
|
|
|
|
[Fact]
|
|
|
|
|
public void CreateDirectory_WithoutArchiveAttribute_ArchiveFlagIsNotSet()
|
|
|
|
|
{
|
|
|
|
|
IAttributeFileSystem fs = CreateAttributeFileSystem();
|
2020-01-28 08:55:39 +01:00
|
|
|
|
|
2021-11-14 20:08:57 +01:00
|
|
|
|
Assert.Success(fs.CreateDirectory("/dir", NxFileAttributes.None));
|
2020-01-28 08:55:39 +01:00
|
|
|
|
|
2021-11-14 20:08:57 +01:00
|
|
|
|
Assert.Success(fs.GetFileAttributes(out NxFileAttributes attributes, "/dir"));
|
|
|
|
|
Assert.Equal(NxFileAttributes.Directory, attributes);
|
|
|
|
|
}
|
2020-01-28 08:55:39 +01:00
|
|
|
|
|
2021-11-14 20:08:57 +01:00
|
|
|
|
[Fact]
|
|
|
|
|
public void CreateDirectory_WithArchiveAttribute_ArchiveFlagIsSet()
|
|
|
|
|
{
|
|
|
|
|
IAttributeFileSystem fs = CreateAttributeFileSystem();
|
2020-01-28 08:55:39 +01:00
|
|
|
|
|
2021-11-14 20:08:57 +01:00
|
|
|
|
Assert.Success(fs.CreateDirectory("/dir", NxFileAttributes.Archive));
|
2020-01-28 08:55:39 +01:00
|
|
|
|
|
2021-11-14 20:08:57 +01:00
|
|
|
|
Assert.Success(fs.GetFileAttributes(out NxFileAttributes attributes, "/dir"));
|
|
|
|
|
Assert.Equal(NxFileAttributes.Directory | NxFileAttributes.Archive, attributes);
|
|
|
|
|
}
|
2020-01-28 08:55:39 +01:00
|
|
|
|
|
2021-11-14 20:08:57 +01:00
|
|
|
|
[Fact]
|
|
|
|
|
public void GetFileAttributes_AttributesOnNewFileAreEmpty()
|
|
|
|
|
{
|
|
|
|
|
IAttributeFileSystem fs = CreateAttributeFileSystem();
|
|
|
|
|
fs.CreateFile("/file", 0, CreateFileOptions.None);
|
2020-01-28 08:55:39 +01:00
|
|
|
|
|
2021-11-14 20:08:57 +01:00
|
|
|
|
Assert.Success(fs.GetFileAttributes(out NxFileAttributes attributes, "/file"));
|
|
|
|
|
Assert.Equal(NxFileAttributes.None, attributes);
|
|
|
|
|
}
|
2020-01-28 08:55:39 +01:00
|
|
|
|
|
2021-11-14 20:08:57 +01:00
|
|
|
|
[Fact]
|
|
|
|
|
public void GetFileAttributes_AttributesOnNewDirHaveOnlyDirFlagSet()
|
|
|
|
|
{
|
|
|
|
|
IAttributeFileSystem fs = CreateAttributeFileSystem();
|
|
|
|
|
fs.CreateDirectory("/dir");
|
2020-01-28 08:55:39 +01:00
|
|
|
|
|
2021-11-14 20:08:57 +01:00
|
|
|
|
Assert.Success(fs.GetFileAttributes(out NxFileAttributes attributes, "/dir"));
|
|
|
|
|
Assert.Equal(NxFileAttributes.Directory, attributes);
|
|
|
|
|
}
|
2020-01-28 08:55:39 +01:00
|
|
|
|
|
2021-11-14 20:08:57 +01:00
|
|
|
|
[Fact]
|
|
|
|
|
public void GetFileAttributes_PathDoesNotExist_ReturnsPathNotFound()
|
|
|
|
|
{
|
|
|
|
|
IAttributeFileSystem fs = CreateAttributeFileSystem();
|
2020-01-28 08:55:39 +01:00
|
|
|
|
|
2022-11-10 05:33:27 +01:00
|
|
|
|
Result res = fs.GetFileAttributes(out _, "/path");
|
2020-01-28 08:55:39 +01:00
|
|
|
|
|
2022-11-10 05:33:27 +01:00
|
|
|
|
Assert.Result(ResultFs.PathNotFound, res);
|
2021-11-14 20:08:57 +01:00
|
|
|
|
}
|
2020-01-28 08:55:39 +01:00
|
|
|
|
|
2021-11-14 20:08:57 +01:00
|
|
|
|
[Fact]
|
|
|
|
|
public void SetFileAttributes_PathDoesNotExist_ReturnsPathNotFound()
|
|
|
|
|
{
|
|
|
|
|
IAttributeFileSystem fs = CreateAttributeFileSystem();
|
2020-01-28 08:55:39 +01:00
|
|
|
|
|
2022-11-10 05:33:27 +01:00
|
|
|
|
Result res = fs.SetFileAttributes("/path", NxFileAttributes.None);
|
2020-01-28 08:55:39 +01:00
|
|
|
|
|
2022-11-10 05:33:27 +01:00
|
|
|
|
Assert.Result(ResultFs.PathNotFound, res);
|
2021-11-14 20:08:57 +01:00
|
|
|
|
}
|
2020-01-28 08:55:39 +01:00
|
|
|
|
|
2021-11-14 20:08:57 +01:00
|
|
|
|
[Fact]
|
|
|
|
|
public void SetFileAttributes_SetAttributeOnFile()
|
|
|
|
|
{
|
|
|
|
|
IAttributeFileSystem fs = CreateAttributeFileSystem();
|
|
|
|
|
fs.CreateFile("/file", 0, CreateFileOptions.None);
|
2020-01-28 08:55:39 +01:00
|
|
|
|
|
2022-11-10 05:33:27 +01:00
|
|
|
|
Result resultSet = fs.SetFileAttributes("/file", NxFileAttributes.Archive);
|
|
|
|
|
Result resultGet = fs.GetFileAttributes(out NxFileAttributes attributes, "/file");
|
2020-01-28 08:55:39 +01:00
|
|
|
|
|
2022-11-10 05:33:27 +01:00
|
|
|
|
Assert.Success(resultSet);
|
|
|
|
|
Assert.Success(resultGet);
|
2021-11-14 20:08:57 +01:00
|
|
|
|
Assert.Equal(NxFileAttributes.Archive, attributes);
|
|
|
|
|
}
|
2020-01-28 08:55:39 +01:00
|
|
|
|
|
2021-11-14 20:08:57 +01:00
|
|
|
|
[Fact]
|
|
|
|
|
public void SetFileAttributes_SetAttributeOnDirectory()
|
|
|
|
|
{
|
|
|
|
|
IAttributeFileSystem fs = CreateAttributeFileSystem();
|
|
|
|
|
fs.CreateDirectory("/dir");
|
2020-01-28 08:55:39 +01:00
|
|
|
|
|
2022-11-10 05:33:27 +01:00
|
|
|
|
Result resultSet = fs.SetFileAttributes("/dir", NxFileAttributes.Archive);
|
|
|
|
|
Result resultGet = fs.GetFileAttributes(out NxFileAttributes attributes, "/dir");
|
2020-01-28 08:55:39 +01:00
|
|
|
|
|
2022-11-10 05:33:27 +01:00
|
|
|
|
Assert.Success(resultSet);
|
|
|
|
|
Assert.Success(resultGet);
|
2021-11-14 20:08:57 +01:00
|
|
|
|
Assert.Equal(NxFileAttributes.Directory | NxFileAttributes.Archive, attributes);
|
|
|
|
|
}
|
2020-01-28 08:55:39 +01:00
|
|
|
|
|
2021-11-14 20:08:57 +01:00
|
|
|
|
[Fact]
|
|
|
|
|
public void GetFileSize_ReadNewFileSize()
|
|
|
|
|
{
|
|
|
|
|
IAttributeFileSystem fs = CreateAttributeFileSystem();
|
2020-01-28 08:55:39 +01:00
|
|
|
|
|
2021-11-14 20:08:57 +01:00
|
|
|
|
fs.CreateFile("/file", 845, CreateFileOptions.None);
|
2020-01-28 08:55:39 +01:00
|
|
|
|
|
2021-11-14 20:08:57 +01:00
|
|
|
|
Assert.Success(fs.GetFileSize(out long fileSize, "/file"));
|
|
|
|
|
Assert.Equal(845, fileSize);
|
|
|
|
|
}
|
2020-01-28 08:55:39 +01:00
|
|
|
|
|
2021-11-14 20:08:57 +01:00
|
|
|
|
[Fact]
|
|
|
|
|
public void GetFileSize_PathDoesNotExist_ReturnsPathNotFound()
|
|
|
|
|
{
|
|
|
|
|
IAttributeFileSystem fs = CreateAttributeFileSystem();
|
2020-01-28 08:55:39 +01:00
|
|
|
|
|
2022-11-10 05:33:27 +01:00
|
|
|
|
Result res = fs.GetFileSize(out _, "/path");
|
2020-01-28 08:55:39 +01:00
|
|
|
|
|
2022-11-10 05:33:27 +01:00
|
|
|
|
Assert.Result(ResultFs.PathNotFound, res);
|
2021-11-14 20:08:57 +01:00
|
|
|
|
}
|
2020-01-28 08:55:39 +01:00
|
|
|
|
|
2021-11-14 20:08:57 +01:00
|
|
|
|
[Fact]
|
|
|
|
|
public void GetFileSize_PathIsDirectory_ReturnsPathNotFound()
|
|
|
|
|
{
|
|
|
|
|
IAttributeFileSystem fs = CreateAttributeFileSystem();
|
|
|
|
|
fs.CreateDirectory("/dir");
|
2020-01-28 08:55:39 +01:00
|
|
|
|
|
2022-11-10 05:33:27 +01:00
|
|
|
|
Result res = fs.GetFileSize(out _, "/dir");
|
2020-01-28 08:55:39 +01:00
|
|
|
|
|
2022-11-10 05:33:27 +01:00
|
|
|
|
Assert.Result(ResultFs.PathNotFound, res);
|
2020-01-28 08:55:39 +01:00
|
|
|
|
}
|
|
|
|
|
}
|