Skip to content

Commit

Permalink
feat: validate world saves
Browse files Browse the repository at this point in the history
Signed-off-by: Rachel Powers <508861+Ryex@users.noreply.github.com>
  • Loading branch information
Ryex committed Dec 25, 2022
1 parent 6a03185 commit db03845
Show file tree
Hide file tree
Showing 15 changed files with 195 additions and 4 deletions.
8 changes: 8 additions & 0 deletions launcher/CMakeLists.txt
Expand Up @@ -339,6 +339,10 @@ set(MINECRAFT_SOURCES
minecraft/mod/ResourcePackFolderModel.cpp
minecraft/mod/TexturePack.h
minecraft/mod/TexturePack.cpp
minecraft/mod/ShaderPack.h
minecraft/mod/ShaderPack.cpp
minecraft/mod/WorldSave.h
minecraft/mod/WorldSave.cpp
minecraft/mod/TexturePackFolderModel.h
minecraft/mod/TexturePackFolderModel.cpp
minecraft/mod/ShaderPackFolderModel.h
Expand All @@ -355,6 +359,10 @@ set(MINECRAFT_SOURCES
minecraft/mod/tasks/LocalResourcePackParseTask.cpp
minecraft/mod/tasks/LocalTexturePackParseTask.h
minecraft/mod/tasks/LocalTexturePackParseTask.cpp
minecraft/mod/tasks/LocalShaderPackParseTask.h
minecraft/mod/tasks/LocalShaderPackParseTask.cpp
minecraft/mod/tasks/LocalWorldSaveParseTask.h
minecraft/mod/tasks/LocalWorldSaveParseTask.cpp

# Assets
minecraft/AssetsUtils.h
Expand Down
2 changes: 1 addition & 1 deletion launcher/minecraft/mod/ShaderPack.h
Expand Up @@ -39,7 +39,7 @@

#include <QMutex>

enum ShaderPackFormat {
enum class ShaderPackFormat {
VALID,
INVALID
};
Expand Down
2 changes: 1 addition & 1 deletion launcher/minecraft/mod/WorldSave.h
Expand Up @@ -27,7 +27,7 @@

class Version;

enum WorldSaveFormat {
enum class WorldSaveFormat {
SINGLE,
MULTI,
INVALID
Expand Down
3 changes: 3 additions & 0 deletions launcher/minecraft/mod/tasks/LocalWorldSaveParseTask.cpp
Expand Up @@ -121,6 +121,9 @@ bool processZIP(WorldSave& save, ProcessingLevel level)

auto [ found, save_dir_name, found_saves_dir ] = contains_level_dat(zip);

if (save_dir_name.endsWith("/")) {
save_dir_name.chop(1);
}

if (!found) {
return false;
Expand Down
6 changes: 6 additions & 0 deletions tests/CMakeLists.txt
Expand Up @@ -30,6 +30,12 @@ ecm_add_test(TexturePackParse_test.cpp LINK_LIBRARIES Launcher_logic Qt${QT_VERS
ecm_add_test(DataPackParse_test.cpp LINK_LIBRARIES Launcher_logic Qt${QT_VERSION_MAJOR}::Test
TEST_NAME DataPackParse)

ecm_add_test(ShaderPackParse_test.cpp LINK_LIBRARIES Launcher_logic Qt${QT_VERSION_MAJOR}::Test
TEST_NAME ShaderPackParse)

ecm_add_test(WorldSaveParse_test.cpp LINK_LIBRARIES Launcher_logic Qt${QT_VERSION_MAJOR}::Test
TEST_NAME WorldSaveParse)

ecm_add_test(ParseUtils_test.cpp LINK_LIBRARIES Launcher_logic Qt${QT_VERSION_MAJOR}::Test
TEST_NAME ParseUtils)

Expand Down
7 changes: 5 additions & 2 deletions tests/DataPackParse_test.cpp
@@ -1,7 +1,10 @@
// SPDX-FileCopyrightText: 2022 Rachel Powers <508861+Ryex@users.noreply.github.com>
//
// SPDX-License-Identifier: GPL-3.0-only

/*
* PolyMC - Minecraft Launcher
* Copyright (c) 2022 flowln <flowlnlnln@gmail.com>
* Prism Launcher - Minecraft Launcher
* Copyright (C) 2022 Rachel Powers <508861+Ryex@users.noreply.github.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Expand Down
77 changes: 77 additions & 0 deletions tests/ShaderPackParse_test.cpp
@@ -0,0 +1,77 @@

// SPDX-FileCopyrightText: 2022 Rachel Powers <508861+Ryex@users.noreply.github.com>
//
// SPDX-License-Identifier: GPL-3.0-only

/*
* Prism Launcher - Minecraft Launcher
* Copyright (C) 2022 Rachel Powers <508861+Ryex@users.noreply.github.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, version 3.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/

#include <QTest>
#include <QTimer>

#include <FileSystem.h>

#include <minecraft/mod/ShaderPack.h>
#include <minecraft/mod/tasks/LocalShaderPackParseTask.h>

class ShaderPackParseTest : public QObject {
Q_OBJECT

private slots:
void test_parseZIP()
{
QString source = QFINDTESTDATA("testdata/ShaderPackParse");

QString zip_sp = FS::PathCombine(source, "shaderpack1.zip");
ShaderPack pack { QFileInfo(zip_sp) };

bool valid = ShaderPackUtils::processZIP(pack);

QVERIFY(pack.packFormat() == ShaderPackFormat::VALID);
QVERIFY(valid == true);
}

void test_parseFolder()
{
QString source = QFINDTESTDATA("testdata/ShaderPackParse");

QString folder_sp = FS::PathCombine(source, "shaderpack2");
ShaderPack pack { QFileInfo(folder_sp) };

bool valid = ShaderPackUtils::processFolder(pack);

QVERIFY(pack.packFormat() == ShaderPackFormat::VALID);
QVERIFY(valid == true);
}

void test_parseZIP2()
{
QString source = QFINDTESTDATA("testdata/ShaderPackParse");

QString folder_sp = FS::PathCombine(source, "shaderpack3.zip");
ShaderPack pack { QFileInfo(folder_sp) };

bool valid = ShaderPackUtils::process(pack);

QVERIFY(pack.packFormat() == ShaderPackFormat::INVALID);
QVERIFY(valid == false);
}
};

QTEST_GUILESS_MAIN(ShaderPackParseTest)

#include "ShaderPackParse_test.moc"
94 changes: 94 additions & 0 deletions tests/WorldSaveParse_test.cpp
@@ -0,0 +1,94 @@

// SPDX-FileCopyrightText: 2022 Rachel Powers <508861+Ryex@users.noreply.github.com>
//
// SPDX-License-Identifier: GPL-3.0-only

/*
* Prism Launcher - Minecraft Launcher
* Copyright (C) 2022 Rachel Powers <508861+Ryex@users.noreply.github.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, version 3.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/

#include <QTest>
#include <QTimer>

#include <FileSystem.h>

#include <minecraft/mod/WorldSave.h>
#include <minecraft/mod/tasks/LocalWorldSaveParseTask.h>

class WorldSaveParseTest : public QObject {
Q_OBJECT

private slots:
void test_parseZIP()
{
QString source = QFINDTESTDATA("testdata/WorldSaveParse");

QString zip_ws = FS::PathCombine(source, "minecraft_save_1.zip") ;
WorldSave save { QFileInfo(zip_ws) };

bool valid = WorldSaveUtils::processZIP(save);

QVERIFY(save.saveFormat() == WorldSaveFormat::SINGLE);
QVERIFY(save.saveDirName() == "world_1");
QVERIFY(valid == true);
}

void test_parse_ZIP2()
{
QString source = QFINDTESTDATA("testdata/WorldSaveParse");

QString zip_ws = FS::PathCombine(source, "minecraft_save_2.zip") ;
WorldSave save { QFileInfo(zip_ws) };

bool valid = WorldSaveUtils::processZIP(save);

QVERIFY(save.saveFormat() == WorldSaveFormat::MULTI);
QVERIFY(save.saveDirName() == "world_2");
QVERIFY(valid == true);
}

void test_parseFolder()
{
QString source = QFINDTESTDATA("testdata/WorldSaveParse");

QString folder_ws = FS::PathCombine(source, "minecraft_save_3");
WorldSave save { QFileInfo(folder_ws) };

bool valid = WorldSaveUtils::processFolder(save);

QVERIFY(save.saveFormat() == WorldSaveFormat::SINGLE);
QVERIFY(save.saveDirName() == "world_3");
QVERIFY(valid == true);
}

void test_parseFolder2()
{
QString source = QFINDTESTDATA("testdata/WorldSaveParse");

QString folder_ws = FS::PathCombine(source, "minecraft_save_4");
WorldSave save { QFileInfo(folder_ws) };

bool valid = WorldSaveUtils::process(save);

QVERIFY(save.saveFormat() == WorldSaveFormat::MULTI);
QVERIFY(save.saveDirName() == "world_4");
QVERIFY(valid == true);
}
};

QTEST_GUILESS_MAIN(WorldSaveParseTest)

#include "WorldSaveParse_test.moc"
Binary file added tests/testdata/ShaderPackParse/shaderpack1.zip
Binary file not shown.
Empty file.
Binary file added tests/testdata/ShaderPackParse/shaderpack3.zip
Binary file not shown.
Binary file added tests/testdata/WorldSaveParse/minecraft_save_1.zip
Binary file not shown.
Binary file added tests/testdata/WorldSaveParse/minecraft_save_2.zip
Binary file not shown.
Empty file.
Empty file.

0 comments on commit db03845

Please sign in to comment.