refactor: restructure tests
Signed-off-by: Sefa Eyeoglu <contact@scrumplex.net>
This commit is contained in:
@ -1,343 +0,0 @@
|
||||
#include <QTest>
|
||||
#include <QDebug>
|
||||
|
||||
#include "mojang/PackageManifest.h"
|
||||
|
||||
using namespace mojang_files;
|
||||
|
||||
QDebug operator<<(QDebug debug, const Path &path)
|
||||
{
|
||||
debug << path.toString();
|
||||
return debug;
|
||||
}
|
||||
|
||||
class PackageManifestTest : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
private slots:
|
||||
void test_parse();
|
||||
void test_parse_file();
|
||||
void test_inspect();
|
||||
#ifndef Q_OS_WIN32
|
||||
void test_inspect_symlinks();
|
||||
#endif
|
||||
void mkdir_deep();
|
||||
void rmdir_deep();
|
||||
|
||||
void identical_file();
|
||||
void changed_file();
|
||||
void added_file();
|
||||
void removed_file();
|
||||
};
|
||||
|
||||
namespace {
|
||||
QByteArray basic_manifest = R"END(
|
||||
{
|
||||
"files": {
|
||||
"a/b.txt": {
|
||||
"type": "file",
|
||||
"downloads": {
|
||||
"raw": {
|
||||
"url": "http://dethware.org/b.txt",
|
||||
"sha1": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
|
||||
"size": 0
|
||||
}
|
||||
},
|
||||
"executable": true
|
||||
},
|
||||
"a/b/c": {
|
||||
"type": "directory"
|
||||
},
|
||||
"a/b/c.txt": {
|
||||
"type": "link",
|
||||
"target": "../b.txt"
|
||||
}
|
||||
}
|
||||
}
|
||||
)END";
|
||||
}
|
||||
|
||||
void PackageManifestTest::test_parse()
|
||||
{
|
||||
auto manifest = Package::fromManifestContents(basic_manifest);
|
||||
QVERIFY(manifest.valid == true);
|
||||
QVERIFY(manifest.files.size() == 1);
|
||||
QVERIFY(manifest.files.count(Path("a/b.txt")));
|
||||
auto &file = manifest.files[Path("a/b.txt")];
|
||||
QVERIFY(file.executable == true);
|
||||
QVERIFY(file.hash == "da39a3ee5e6b4b0d3255bfef95601890afd80709");
|
||||
QVERIFY(file.size == 0);
|
||||
QVERIFY(manifest.folders.size() == 4);
|
||||
QVERIFY(manifest.folders.count(Path(".")));
|
||||
QVERIFY(manifest.folders.count(Path("a")));
|
||||
QVERIFY(manifest.folders.count(Path("a/b")));
|
||||
QVERIFY(manifest.folders.count(Path("a/b/c")));
|
||||
QVERIFY(manifest.symlinks.size() == 1);
|
||||
auto symlinkPath = Path("a/b/c.txt");
|
||||
QVERIFY(manifest.symlinks.count(symlinkPath));
|
||||
auto &symlink = manifest.symlinks[symlinkPath];
|
||||
QVERIFY(symlink == Path("../b.txt"));
|
||||
QVERIFY(manifest.sources.size() == 1);
|
||||
}
|
||||
|
||||
void PackageManifestTest::test_parse_file() {
|
||||
auto path = QFINDTESTDATA("testdata/1.8.0_202-x64.json");
|
||||
auto manifest = Package::fromManifestFile(path);
|
||||
QVERIFY(manifest.valid == true);
|
||||
}
|
||||
|
||||
|
||||
void PackageManifestTest::test_inspect() {
|
||||
auto path = QFINDTESTDATA("testdata/inspect_win/");
|
||||
auto manifest = Package::fromInspectedFolder(path);
|
||||
QVERIFY(manifest.valid == true);
|
||||
QVERIFY(manifest.files.size() == 2);
|
||||
QVERIFY(manifest.files.count(Path("a/b.txt")));
|
||||
auto &file1 = manifest.files[Path("a/b.txt")];
|
||||
QVERIFY(file1.executable == false);
|
||||
QVERIFY(file1.hash == "da39a3ee5e6b4b0d3255bfef95601890afd80709");
|
||||
QVERIFY(file1.size == 0);
|
||||
QVERIFY(manifest.files.count(Path("a/b/b.txt")));
|
||||
auto &file2 = manifest.files[Path("a/b/b.txt")];
|
||||
QVERIFY(file2.executable == false);
|
||||
QVERIFY(file2.hash == "da39a3ee5e6b4b0d3255bfef95601890afd80709");
|
||||
QVERIFY(file2.size == 0);
|
||||
QVERIFY(manifest.folders.size() == 3);
|
||||
QVERIFY(manifest.folders.count(Path(".")));
|
||||
QVERIFY(manifest.folders.count(Path("a")));
|
||||
QVERIFY(manifest.folders.count(Path("a/b")));
|
||||
QVERIFY(manifest.symlinks.size() == 0);
|
||||
}
|
||||
|
||||
#ifndef Q_OS_WIN32
|
||||
void PackageManifestTest::test_inspect_symlinks() {
|
||||
auto path = QFINDTESTDATA("testdata/inspect/");
|
||||
auto manifest = Package::fromInspectedFolder(path);
|
||||
QVERIFY(manifest.valid == true);
|
||||
QVERIFY(manifest.files.size() == 1);
|
||||
QVERIFY(manifest.files.count(Path("a/b.txt")));
|
||||
auto &file = manifest.files[Path("a/b.txt")];
|
||||
QVERIFY(file.executable == true);
|
||||
QVERIFY(file.hash == "da39a3ee5e6b4b0d3255bfef95601890afd80709");
|
||||
QVERIFY(file.size == 0);
|
||||
QVERIFY(manifest.folders.size() == 3);
|
||||
QVERIFY(manifest.folders.count(Path(".")));
|
||||
QVERIFY(manifest.folders.count(Path("a")));
|
||||
QVERIFY(manifest.folders.count(Path("a/b")));
|
||||
QVERIFY(manifest.symlinks.size() == 1);
|
||||
QVERIFY(manifest.symlinks.count(Path("a/b/b.txt")));
|
||||
qDebug() << manifest.symlinks[Path("a/b/b.txt")];
|
||||
QVERIFY(manifest.symlinks[Path("a/b/b.txt")] == Path("../b.txt"));
|
||||
}
|
||||
#endif
|
||||
|
||||
void PackageManifestTest::mkdir_deep() {
|
||||
|
||||
Package from;
|
||||
auto to = Package::fromManifestContents(R"END(
|
||||
{
|
||||
"files": {
|
||||
"a/b/c/d/e": {
|
||||
"type": "directory"
|
||||
}
|
||||
}
|
||||
}
|
||||
)END");
|
||||
auto operations = UpdateOperations::resolve(from, to);
|
||||
QVERIFY(operations.deletes.size() == 0);
|
||||
QVERIFY(operations.rmdirs.size() == 0);
|
||||
|
||||
QVERIFY(operations.mkdirs.size() == 6);
|
||||
QVERIFY(operations.mkdirs[0] == Path("."));
|
||||
QVERIFY(operations.mkdirs[1] == Path("a"));
|
||||
QVERIFY(operations.mkdirs[2] == Path("a/b"));
|
||||
QVERIFY(operations.mkdirs[3] == Path("a/b/c"));
|
||||
QVERIFY(operations.mkdirs[4] == Path("a/b/c/d"));
|
||||
QVERIFY(operations.mkdirs[5] == Path("a/b/c/d/e"));
|
||||
|
||||
QVERIFY(operations.downloads.size() == 0);
|
||||
QVERIFY(operations.mklinks.size() == 0);
|
||||
QVERIFY(operations.executable_fixes.size() == 0);
|
||||
}
|
||||
|
||||
void PackageManifestTest::rmdir_deep() {
|
||||
|
||||
Package to;
|
||||
auto from = Package::fromManifestContents(R"END(
|
||||
{
|
||||
"files": {
|
||||
"a/b/c/d/e": {
|
||||
"type": "directory"
|
||||
}
|
||||
}
|
||||
}
|
||||
)END");
|
||||
auto operations = UpdateOperations::resolve(from, to);
|
||||
QVERIFY(operations.deletes.size() == 0);
|
||||
|
||||
QVERIFY(operations.rmdirs.size() == 6);
|
||||
QVERIFY(operations.rmdirs[0] == Path("a/b/c/d/e"));
|
||||
QVERIFY(operations.rmdirs[1] == Path("a/b/c/d"));
|
||||
QVERIFY(operations.rmdirs[2] == Path("a/b/c"));
|
||||
QVERIFY(operations.rmdirs[3] == Path("a/b"));
|
||||
QVERIFY(operations.rmdirs[4] == Path("a"));
|
||||
QVERIFY(operations.rmdirs[5] == Path("."));
|
||||
|
||||
QVERIFY(operations.mkdirs.size() == 0);
|
||||
QVERIFY(operations.downloads.size() == 0);
|
||||
QVERIFY(operations.mklinks.size() == 0);
|
||||
QVERIFY(operations.executable_fixes.size() == 0);
|
||||
}
|
||||
|
||||
void PackageManifestTest::identical_file() {
|
||||
QByteArray manifest = R"END(
|
||||
{
|
||||
"files": {
|
||||
"a/b/c/d/empty.txt": {
|
||||
"type": "file",
|
||||
"downloads": {
|
||||
"raw": {
|
||||
"url": "http://dethware.org/empty.txt",
|
||||
"sha1": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
|
||||
"size": 0
|
||||
}
|
||||
},
|
||||
"executable": false
|
||||
}
|
||||
}
|
||||
}
|
||||
)END";
|
||||
auto from = Package::fromManifestContents(manifest);
|
||||
auto to = Package::fromManifestContents(manifest);
|
||||
auto operations = UpdateOperations::resolve(from, to);
|
||||
QVERIFY(operations.deletes.size() == 0);
|
||||
QVERIFY(operations.rmdirs.size() == 0);
|
||||
QVERIFY(operations.mkdirs.size() == 0);
|
||||
QVERIFY(operations.downloads.size() == 0);
|
||||
QVERIFY(operations.mklinks.size() == 0);
|
||||
QVERIFY(operations.executable_fixes.size() == 0);
|
||||
}
|
||||
|
||||
void PackageManifestTest::changed_file() {
|
||||
auto from = Package::fromManifestContents(R"END(
|
||||
{
|
||||
"files": {
|
||||
"a/b/c/d/file": {
|
||||
"type": "file",
|
||||
"downloads": {
|
||||
"raw": {
|
||||
"url": "http://dethware.org/empty.txt",
|
||||
"sha1": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
|
||||
"size": 0
|
||||
}
|
||||
},
|
||||
"executable": false
|
||||
}
|
||||
}
|
||||
}
|
||||
)END");
|
||||
auto to = Package::fromManifestContents(R"END(
|
||||
{
|
||||
"files": {
|
||||
"a/b/c/d/file": {
|
||||
"type": "file",
|
||||
"downloads": {
|
||||
"raw": {
|
||||
"url": "http://dethware.org/space.txt",
|
||||
"sha1": "dd122581c8cd44d0227f9c305581ffcb4b6f1b46",
|
||||
"size": 1
|
||||
}
|
||||
},
|
||||
"executable": false
|
||||
}
|
||||
}
|
||||
}
|
||||
)END");
|
||||
auto operations = UpdateOperations::resolve(from, to);
|
||||
QVERIFY(operations.deletes.size() == 1);
|
||||
QCOMPARE(operations.deletes[0], Path("a/b/c/d/file"));
|
||||
QVERIFY(operations.rmdirs.size() == 0);
|
||||
QVERIFY(operations.mkdirs.size() == 0);
|
||||
QVERIFY(operations.downloads.size() == 1);
|
||||
QVERIFY(operations.mklinks.size() == 0);
|
||||
QVERIFY(operations.executable_fixes.size() == 0);
|
||||
}
|
||||
|
||||
void PackageManifestTest::added_file() {
|
||||
auto from = Package::fromManifestContents(R"END(
|
||||
{
|
||||
"files": {
|
||||
"a/b/c/d": {
|
||||
"type": "directory"
|
||||
}
|
||||
}
|
||||
}
|
||||
)END");
|
||||
auto to = Package::fromManifestContents(R"END(
|
||||
{
|
||||
"files": {
|
||||
"a/b/c/d/file": {
|
||||
"type": "file",
|
||||
"downloads": {
|
||||
"raw": {
|
||||
"url": "http://dethware.org/space.txt",
|
||||
"sha1": "dd122581c8cd44d0227f9c305581ffcb4b6f1b46",
|
||||
"size": 1
|
||||
}
|
||||
},
|
||||
"executable": false
|
||||
}
|
||||
}
|
||||
}
|
||||
)END");
|
||||
auto operations = UpdateOperations::resolve(from, to);
|
||||
QVERIFY(operations.deletes.size() == 0);
|
||||
QVERIFY(operations.rmdirs.size() == 0);
|
||||
QVERIFY(operations.mkdirs.size() == 0);
|
||||
QVERIFY(operations.downloads.size() == 1);
|
||||
QVERIFY(operations.mklinks.size() == 0);
|
||||
QVERIFY(operations.executable_fixes.size() == 0);
|
||||
}
|
||||
|
||||
void PackageManifestTest::removed_file() {
|
||||
auto from = Package::fromManifestContents(R"END(
|
||||
{
|
||||
"files": {
|
||||
"a/b/c/d/file": {
|
||||
"type": "file",
|
||||
"downloads": {
|
||||
"raw": {
|
||||
"url": "http://dethware.org/space.txt",
|
||||
"sha1": "dd122581c8cd44d0227f9c305581ffcb4b6f1b46",
|
||||
"size": 1
|
||||
}
|
||||
},
|
||||
"executable": false
|
||||
}
|
||||
}
|
||||
}
|
||||
)END");
|
||||
auto to = Package::fromManifestContents(R"END(
|
||||
{
|
||||
"files": {
|
||||
"a/b/c/d": {
|
||||
"type": "directory"
|
||||
}
|
||||
}
|
||||
}
|
||||
)END");
|
||||
auto operations = UpdateOperations::resolve(from, to);
|
||||
QVERIFY(operations.deletes.size() == 1);
|
||||
QCOMPARE(operations.deletes[0], Path("a/b/c/d/file"));
|
||||
QVERIFY(operations.rmdirs.size() == 0);
|
||||
QVERIFY(operations.mkdirs.size() == 0);
|
||||
QVERIFY(operations.downloads.size() == 0);
|
||||
QVERIFY(operations.mklinks.size() == 0);
|
||||
QVERIFY(operations.executable_fixes.size() == 0);
|
||||
}
|
||||
|
||||
QTEST_GUILESS_MAIN(PackageManifestTest)
|
||||
|
||||
#include "PackageManifest_test.moc"
|
||||
|
1
launcher/mojang/testdata/1.8.0_202-x64.json
vendored
1
launcher/mojang/testdata/1.8.0_202-x64.json
vendored
File diff suppressed because one or more lines are too long
1
launcher/mojang/testdata/inspect/a/b/b.txt
vendored
1
launcher/mojang/testdata/inspect/a/b/b.txt
vendored
@ -1 +0,0 @@
|
||||
../b.txt
|
Reference in New Issue
Block a user