src: replaced unit test framework CxxTest with Catch2

This commit is contained in:
mlangkabel
2019-10-29 19:54:16 +01:00
parent 48c4bddc1b
commit 49050e1089
82 changed files with 28319 additions and 14175 deletions
+381
View File
@@ -0,0 +1,381 @@
#include "catch.hpp"
#include "Settings.h"
#include "SettingsMigrator.h"
#include "SettingsMigrationLambda.h"
#include "SettingsMigrationMoveKey.h"
#include "TextAccess.h"
namespace
{
class TestSettings
: public Settings
{
public:
static TestSettings createFromText(const std::shared_ptr<TextAccess> textAccess)
{
TestSettings settings;
settings.m_config = ConfigManager::createAndLoad(textAccess);
return settings;
}
std::string getAsText() const
{
if (m_config)
{
return m_config->toString();
}
return "";
}
};
TestSettings createSettings(const std::string& text)
{
return TestSettings::createFromText(TextAccess::createFromString(text));
}
}
TEST_CASE("migrator changes nothing without migrations except version")
{
TestSettings settingsBefore = createSettings(
"<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n"
"<config>\n"
" <value>2</value>\n"
"</config>\n"
);
TestSettings settingsAfter = createSettings(
"<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n"
"<config>\n"
" <value>2</value>\n"
" <version>1</version>\n"
"</config>\n"
);
SettingsMigrator migrator;
migrator.migrate(&settingsBefore, 1);
REQUIRE(settingsBefore.getAsText() == settingsAfter.getAsText());
}
TEST_CASE("migrator changes name")
{
TestSettings settingsBefore = createSettings(
"<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n"
"<config>\n"
" <value>2</value>\n"
"</config>\n"
);
TestSettings settingsAfter = createSettings(
"<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n"
"<config>\n"
" <int>2</int>\n"
" <version>1</version>\n"
"</config>\n"
);
SettingsMigrator migrator;
migrator.addMigration(1, std::make_shared<SettingsMigrationMoveKey>("value", "int"));
migrator.migrate(&settingsBefore, 1);
REQUIRE(settingsBefore.getAsText() == settingsAfter.getAsText());
}
TEST_CASE("migrator changes path")
{
TestSettings settingsBefore = createSettings(
"<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n"
"<config>\n"
" <value>2</value>\n"
"</config>\n"
);
TestSettings settingsAfter = createSettings(
"<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n"
"<config>\n"
" <sub>\n"
" <int>2</int>\n"
" </sub>\n"
" <version>1</version>\n"
"</config>\n"
);
SettingsMigrator migrator;
migrator.addMigration(1, std::make_shared<SettingsMigrationMoveKey>("value", "sub/int"));
migrator.migrate(&settingsBefore, 1);
REQUIRE(settingsBefore.getAsText() == settingsAfter.getAsText());
}
TEST_CASE("migrator changes group name")
{
TestSettings settingsBefore = createSettings(
"<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n"
"<config>\n"
" <values>\n"
" <value>2</value>\n"
" <value>3</value>\n"
" <value>4</value>\n"
" </values>\n"
"</config>\n"
);
TestSettings settingsAfter = createSettings(
"<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n"
"<config>\n"
" <vals>\n"
" <value>2</value>\n"
" <value>3</value>\n"
" <value>4</value>\n"
" </vals>\n"
" <version>1</version>\n"
"</config>\n"
);
SettingsMigrator migrator;
migrator.addMigration(1, std::make_shared<SettingsMigrationMoveKey>("values/value", "vals/value"));
migrator.migrate(&settingsBefore, 1);
REQUIRE(settingsBefore.getAsText() == settingsAfter.getAsText());
}
TEST_CASE("migrator changes group element name")
{
TestSettings settingsBefore = createSettings(
"<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n"
"<config>\n"
" <values>\n"
" <value>2</value>\n"
" <value>3</value>\n"
" <value>4</value>\n"
" </values>\n"
"</config>\n"
);
TestSettings settingsAfter = createSettings(
"<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n"
"<config>\n"
" <values>\n"
" <val>2</val>\n"
" <val>3</val>\n"
" <val>4</val>\n"
" </values>\n"
" <version>1</version>\n"
"</config>\n"
);
SettingsMigrator migrator;
migrator.addMigration(1, std::make_shared<SettingsMigrationMoveKey>("values/value", "values/val"));
migrator.migrate(&settingsBefore, 1);
REQUIRE(settingsBefore.getAsText() == settingsAfter.getAsText());
}
TEST_CASE("migrator changes only up specified version")
{
TestSettings settingsBefore = createSettings(
"<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n"
"<config>\n"
" <value>2</value>\n"
"</config>\n"
);
TestSettings settingsAfter = createSettings(
"<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n"
"<config>\n"
" <int>2</int>\n"
" <version>1</version>\n"
"</config>\n"
);
SettingsMigrator migrator;
migrator.addMigration(1, std::make_shared<SettingsMigrationMoveKey>("value", "int"));
migrator.addMigration(2, std::make_shared<SettingsMigrationMoveKey>("int", "val"));
migrator.migrate(&settingsBefore, 1);
REQUIRE(settingsBefore.getAsText() == settingsAfter.getAsText());
}
TEST_CASE("migrator changes only from specified version")
{
TestSettings settingsBefore = createSettings(
"<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n"
"<config>\n"
" <int>2</int>\n"
" <version>1</version>\n"
"</config>\n"
);
TestSettings settingsAfter = createSettings(
"<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n"
"<config>\n"
" <val>2</val>\n"
" <version>2</version>\n"
"</config>\n"
);
SettingsMigrator migrator;
migrator.addMigration(1, std::make_shared<SettingsMigrationMoveKey>("value", "int"));
migrator.addMigration(2, std::make_shared<SettingsMigrationMoveKey>("int", "val"));
migrator.migrate(&settingsBefore, 2);
REQUIRE(settingsBefore.getAsText() == settingsAfter.getAsText());
}
TEST_CASE("migrator changes for multiple versions")
{
TestSettings settingsBefore = createSettings(
"<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n"
"<config>\n"
" <value>2</value>\n"
"</config>\n"
);
TestSettings settingsAfter = createSettings(
"<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n"
"<config>\n"
" <val>2</val>\n"
" <version>2</version>\n"
"</config>\n"
);
SettingsMigrator migrator;
migrator.addMigration(1, std::make_shared<SettingsMigrationMoveKey>("value", "int"));
migrator.addMigration(2, std::make_shared<SettingsMigrationMoveKey>("int", "val"));
migrator.migrate(&settingsBefore, 2);
REQUIRE(settingsBefore.getAsText() == settingsAfter.getAsText());
}
TEST_CASE("migrator changes for multiple migrations")
{
TestSettings settingsBefore = createSettings(
"<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n"
"<config>\n"
" <value>2</value>\n"
" <element>hi there</element>\n"
"</config>\n"
);
TestSettings settingsAfter = createSettings(
"<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n"
"<config>\n"
" <val>2</val>\n"
" <ele>hi there</ele>\n"
" <version>2</version>\n"
"</config>\n"
);
SettingsMigrator migrator;
migrator.addMigration(1, std::make_shared<SettingsMigrationMoveKey>("value", "val"));
migrator.addMigration(1, std::make_shared<SettingsMigrationMoveKey>("element", "ele"));
migrator.migrate(&settingsBefore, 2);
REQUIRE(settingsBefore.getAsText() == settingsAfter.getAsText());
}
TEST_CASE("migrator changes for multiple versions and migrations")
{
TestSettings settingsBefore = createSettings(
"<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n"
"<config>\n"
" <value>2</value>\n"
" <element>two</element>\n"
" <element>three</element>\n"
" <element>four</element>\n"
"</config>\n"
);
TestSettings settingsAfter = createSettings(
"<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n"
"<config>\n"
" <int>2</int>\n"
" <elements>\n"
" <element>two</element>\n"
" <element>three</element>\n"
" <element>four</element>\n"
" </elements>\n"
" <version>3</version>\n"
"</config>\n"
);
SettingsMigrator migrator;
migrator.addMigration(1, std::make_shared<SettingsMigrationMoveKey>("value", "int/val"));
migrator.addMigration(1, std::make_shared<SettingsMigrationMoveKey>("element", "ele"));
migrator.addMigration(2, std::make_shared<SettingsMigrationMoveKey>("int/val", "int"));
migrator.addMigration(3, std::make_shared<SettingsMigrationMoveKey>("ele", "elements/element"));
migrator.migrate(&settingsBefore, 3);
REQUIRE(settingsBefore.getAsText() == settingsAfter.getAsText());
}
TEST_CASE("migrator with lambda")
{
TestSettings settingsBefore = createSettings(
"<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n"
"<config>\n"
" <value>2</value>\n"
"</config>\n"
);
TestSettings settingsAfter = createSettings(
"<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n"
"<config>\n"
" <value>4</value>\n"
" <version>1</version>\n"
"</config>\n"
);
SettingsMigrator migrator;
migrator.addMigration(
1, std::make_shared<SettingsMigrationLambda>(
[](const SettingsMigration* migration, Settings* settings)
{
migration->setValueInSettings<int>(settings, "value", migration->getValueFromSettings<int>(settings, "value", 0) * 2);
}
));
migrator.migrate(&settingsBefore, 1);
REQUIRE(settingsBefore.getAsText() == settingsAfter.getAsText());
}
TEST_CASE("migrator with multiple lambdas")
{
TestSettings settingsBefore = createSettings(
"<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n"
"<config>\n"
" <value>2</value>\n"
"</config>\n"
);
TestSettings settingsAfter = createSettings(
"<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n"
"<config>\n"
" <value>3</value>\n"
" <version>2</version>\n"
"</config>\n"
);
SettingsMigrator migrator;
migrator.addMigration(
1, std::make_shared<SettingsMigrationLambda>(
[](const SettingsMigration* migration, Settings* settings)
{
migration->setValueInSettings<int>(settings, "value", migration->getValueFromSettings<int>(settings, "value", 0) * 2);
}
)
);
migrator.addMigration(
2, std::make_shared<SettingsMigrationLambda>(
[](const SettingsMigration* migration, Settings* settings)
{
migration->setValueInSettings<int>(settings, "value", migration->getValueFromSettings<int>(settings, "value", 0) - 1);
}
)
);
migrator.migrate(&settingsBefore, 2);
REQUIRE(settingsBefore.getAsText() == settingsAfter.getAsText());
}