Closed Reputeless closed 1 month ago
コーナーケース対策も強化。
# include <Siv3D.hpp>
void TestExtension(FilePath path, StringView s2)
{
const String s1 = FileSystem::Extension(path);
if (s1 == s2)
{
Console << U"OK";
}
else
{
Console << U"Fail: `{}` -> `{}` vs `{}`"_fmt(path, s1, s2);
}
}
void TestFileName(FilePath path, StringView s2)
{
const String s1 = FileSystem::FileName(path);
if (s1 == s2)
{
Console << U"OK";
}
else
{
Console << U"Fail: `{}` -> `{}` vs `{}`"_fmt(path, s1, s2);
}
}
void TestBaseName(FilePath path, StringView)
{
const String fileName = FileSystem::FileName(path);
const String baseName = FileSystem::BaseName(path);
const String extension = FileSystem::Extension(path);
String s;
if (extension)
{
s = baseName + U'.' + extension;
}
else
{
s = baseName;
}
if (s.lowercased() == fileName.lowercased())
{
Console << U"OK";
}
else
{
Console << U"Fail: `{}` -> `{}` vs `{}`"_fmt(path, s, fileName);
}
}
void Main()
{
TestExtension(U"aaa.png", U"png");
TestExtension(U"./aaa.png", U"png");
TestExtension(U"../aaa.png", U"png");
TestExtension(U"aaa", U"");
TestExtension(U"aaa.bbb/ccc", U"");
TestExtension(U"aaa.bbb/ccc.d", U"d");
TestExtension(U"aaa.bbb/ccc.d.e", U"e");
TestExtension(U"", U"");
TestExtension(U"./", U"");
TestExtension(U"../", U"");
TestExtension(Resource(U"example/windmill.png"), U"png");
TestExtension(U"document.txt", U"txt");
TestExtension(U"filename", U"");
TestExtension(U"./filename", U"");
TestExtension(U".gitignore", U"");
TestExtension(U".test.txt", U"txt");
TestExtension(U"document.TXT", U"txt");
TestExtension(U"FILENAME", U"");
TestExtension(U"./FILENAME", U"");
TestExtension(U".GITIGNORE", U"");
TestExtension(U".test.TXT", U"txt");
TestExtension(U"path/to/file.pdf", U"pdf");
TestExtension(U"./path/./to/file.pdf", U"pdf");
TestExtension(U"./path/../to/file.pdf", U"pdf");
TestExtension(U"../path/to/file.pdf", U"pdf");
TestExtension(U"archive.tar.gz", U"gz");
TestExtension(U"archive.tar.GZ", U"gz");
TestExtension(U"file.", U"");
TestExtension(U"file..", U"");
TestExtension(U"file...", U"");
TestExtension(U"file.txt.", U"");
TestExtension(U"file.txt..", U"");
TestExtension(U"file.txt...", U"");
TestExtension(U"my document.docx", U"docx");
TestExtension(U".hidden.tar.gz", U"gz");
TestExtension(U"path/to/.config.file.dat", U"dat");
TestExtension(U"....", U"");
TestExtension(U"file.middle.", U"");
TestExtension(U"path.to.folder/file", U"");
TestExtension(U"C:\\path\\to\\file.docx", U"docx");
TestExtension(U"file.extension-with-special_chars!@#", U"extension-with-special_chars!@#");
TestExtension(U"メモ.テキスト", U"テキスト");
TestExtension(U"my file. ", U" ");
TestExtension(U"file..txt", U"txt");
TestExtension(U"a.a", U"a");
TestExtension(U"a.A", U"a");
TestExtension(Resource(U"example/windmill.png"), U"png");
TestExtension(Resource(U"example/windmill"), U"");
TestExtension(Resource(U"example.test/windmill"), U"");
TestExtension(Resource(U"example.test/windmill.p"), U"p");
TestExtension(Resource(U"example.test/a.b.c/windmill.p"), U"p");
TestExtension(Resource(U"example.test/a.b.c/windmill.p.q"), U"q");
Console << U"----";
TestFileName(U"aaa.png", U"aaa.png");
TestFileName(U"./aaa.png", U"aaa.png");
TestFileName(U"../aaa.png", U"aaa.png");
TestFileName(U"aaa/", U"");
TestFileName(U"aaa/bbb/", U"");
TestFileName(U"aaa/bbb.aa/ccc", U"ccc");
TestFileName(U"aaa/bbb.aa/ccc/", U"");
TestFileName(U"aaa", U"aaa");
TestFileName(U"aaa.bbb/ccc", U"ccc");
TestFileName(U"aaa.bbb/ccc.d", U"ccc.d");
TestFileName(U"aaa.bbb/ccc.d.e", U"ccc.d.e");
TestFileName(U"", U"");
TestFileName(U"./", U"");
TestFileName(U"../", U"");
TestFileName(Resource(U"example/windmill.png"), U"windmill.png");
TestFileName(U"document.txt", U"document.txt");
TestFileName(U"filename", U"filename");
TestFileName(U"./filename", U"filename");
TestFileName(U".gitignore", U".gitignore");
TestFileName(U".test.txt", U".test.txt");
TestFileName(U"document.TXT", U"document.TXT");
TestFileName(U"FILENAME", U"FILENAME");
TestFileName(U"./FILENAME", U"FILENAME");
TestFileName(U".GITIGNORE", U".GITIGNORE");
TestFileName(U".test.TXT", U".test.TXT");
TestFileName(U"path/to/file.pdf", U"file.pdf");
TestFileName(U"./path/./to/file.pdf", U"file.pdf");
TestFileName(U"./path/../to/file.pdf", U"file.pdf");
TestFileName(U"../path/to/file.pdf", U"file.pdf");
TestFileName(U"archive.tar.gz", U"archive.tar.gz");
TestFileName(U"archive.tar.GZ", U"archive.tar.GZ");
TestFileName(U"file.", U"file.");
TestFileName(U"file..", U"file..");
TestFileName(U"file...", U"file...");
TestFileName(U"file.txt.", U"file.txt.");
TestFileName(U"file.txt..", U"file.txt..");
TestFileName(U"file.txt...", U"file.txt...");
TestFileName(U"my document.docx", U"my document.docx");
TestFileName(U".hidden.tar.gz", U".hidden.tar.gz");
TestFileName(U"path/to/.config.file.dat", U".config.file.dat");
TestFileName(U"....", U"....");
TestFileName(U"file.middle.", U"file.middle.");
TestFileName(U"path.to.folder/file", U"file");
TestFileName(U"C:\\path\\to\\file.docx", U"file.docx");
TestFileName(U"file.extension-with-special_chars!@#", U"file.extension-with-special_chars!@#");
TestFileName(U"メモ.テキスト", U"メモ.テキスト");
TestFileName(U"my file. ", U"my file. ");
TestFileName(U"file..txt", U"file..txt");
TestFileName(U"a.a", U"a.a");
TestFileName(U"a.A", U"a.A");
TestFileName(Resource(U"example/windmill.png"), U"windmill.png");
TestFileName(Resource(U"example/windmill"), U"windmill");
TestFileName(Resource(U"example.test/windmill"), U"windmill");
TestFileName(Resource(U"example.test/windmill/"), U"");
TestFileName(Resource(U""), U"");
TestFileName(Resource(U"example.test/windmill.p"), U"windmill.p");
TestFileName(Resource(U"example.test/a.b.c/windmill.p"), U"windmill.p");
TestFileName(Resource(U"example.test/a.b.c/windmill.p.q"), U"windmill.p.q");
Console << U"----";
TestBaseName(U"aaa.png", U"aaa.png");
TestBaseName(U"./aaa.png", U"aaa.png");
TestBaseName(U"../aaa.png", U"aaa.png");
TestBaseName(U"aaa/", U"");
TestBaseName(U"aaa/bbb/", U"");
TestBaseName(U"aaa/bbb.aa/ccc", U"ccc");
TestBaseName(U"aaa/bbb.aa/ccc/", U"");
TestBaseName(U"aaa", U"aaa");
TestBaseName(U"aaa.bbb/ccc", U"ccc");
TestBaseName(U"aaa.bbb/ccc.d", U"ccc.d");
TestBaseName(U"aaa.bbb/ccc.d.e", U"ccc.d.e");
TestBaseName(U"", U"");
TestBaseName(U"./", U"");
TestBaseName(U"../", U"");
TestBaseName(Resource(U"example/windmill.png"), U"windmill.png");
TestBaseName(U"document.txt", U"document.txt");
TestBaseName(U"filename", U"filename");
TestBaseName(U"./filename", U"filename");
TestBaseName(U".gitignore", U".gitignore");
TestBaseName(U".test.txt", U".test.txt");
TestBaseName(U"document.TXT", U"document.TXT");
TestBaseName(U"FILENAME", U"FILENAME");
TestBaseName(U"./FILENAME", U"FILENAME");
TestBaseName(U".GITIGNORE", U".GITIGNORE");
TestBaseName(U".test.TXT", U".test.TXT");
TestBaseName(U"path/to/file.pdf", U"file.pdf");
TestBaseName(U"./path/./to/file.pdf", U"file.pdf");
TestBaseName(U"./path/../to/file.pdf", U"file.pdf");
TestBaseName(U"../path/to/file.pdf", U"file.pdf");
TestBaseName(U"archive.tar.gz", U"archive.tar.gz");
TestBaseName(U"archive.tar.GZ", U"archive.tar.GZ");
TestBaseName(U"file.", U"file.");
TestBaseName(U"file..", U"file..");
TestBaseName(U"file...", U"file...");
TestBaseName(U"file.txt.", U"file.txt.");
TestBaseName(U"file.txt..", U"file.txt..");
TestBaseName(U"file.txt...", U"file.txt...");
TestBaseName(U"my document.docx", U"my document.docx");
TestBaseName(U".hidden.tar.gz", U".hidden.tar.gz");
TestBaseName(U"path/to/.config.file.dat", U".config.file.dat");
TestBaseName(U"....", U"....");
TestBaseName(U"file.middle.", U"file.middle.");
TestBaseName(U"path.to.folder/file", U"file");
TestBaseName(U"C:\\path\\to\\file.docx", U"file.docx");
TestBaseName(U"file.extension-with-special_chars!@#", U"file.extension-with-special_chars!@#");
TestBaseName(U"メモ.テキスト", U"メモ.テキスト");
TestBaseName(U"my file. ", U"my file. ");
TestBaseName(U"file..txt", U"file..txt");
TestBaseName(U"a.a", U"a.a");
TestBaseName(U"a.A", U"a.A");
TestBaseName(Resource(U"example/windmill.png"), U"windmill.png");
TestBaseName(Resource(U"example/windmill"), U"windmill");
TestBaseName(Resource(U"example.test/windmill"), U"windmill");
TestBaseName(Resource(U"example.test/windmill/"), U"");
TestBaseName(Resource(U""), U"");
TestBaseName(Resource(U"example.test/windmill.p"), U"windmill.p");
TestBaseName(Resource(U"example.test/a.b.c/windmill.p"), U"windmill.p");
TestBaseName(Resource(U"example.test/a.b.c/windmill.p.q"), U"windmill.p.q");
while (System::Update())
{
}
}
FileSystem::BaseName()
FileSystem::Extension()
など