From 24c34a1fe88c70af45236b9ca5477d41e28c1fab Mon Sep 17 00:00:00 2001 From: lolbot-iichan Date: Fri, 12 Jun 2020 15:33:52 +0300 Subject: [PATCH] TESTBED: Give achievements for completed testsuites --- engines/testbed/detection.cpp | 19 +++++++++++++++++++ engines/testbed/testbed.cpp | 18 ++++++++++++++++++ engines/testbed/testbed.h | 1 + 3 files changed, 38 insertions(+) diff --git a/engines/testbed/detection.cpp b/engines/testbed/detection.cpp index f31eecb9553..94feb6aea15 100644 --- a/engines/testbed/detection.cpp +++ b/engines/testbed/detection.cpp @@ -26,6 +26,7 @@ #include "base/plugins.h" #include "testbed/testbed.h" +#include "testbed/testsuite.h" static const PlainGameDescriptor testbed_setting[] = { { "testbed", "Testbed: The Backend Testing Framework" }, @@ -69,6 +70,24 @@ public: return true; } + const Common::AchievementsInfo getAchievementsInfo(const Common::String &target) const override { + Common::AchievementsInfo result; + result.platform = Common::UNK_ACHIEVEMENTS; + result.appId = "testbed"; + Common::AchievementDescription final = {"EVERYTHINGWORKS", true, "Everything works!", "Completed all available testsuites"}; + result.descriptions.push_back(final); + + Common::Array testsuiteList; + Testbed::TestbedEngine::pushTestsuites(testsuiteList); + for (Common::Array::const_iterator i = testsuiteList.begin(); i != testsuiteList.end(); ++i) { + Common::AchievementDescription it = {(*i)->getName(), false, (*i)->getDescription(), 0}; + result.descriptions.push_back(it); + delete (*i); + } + + return result; + } + bool hasFeature(MetaEngineFeature f) const override { return false; } diff --git a/engines/testbed/testbed.cpp b/engines/testbed/testbed.cpp index a05f0f259b2..39a053d935f 100644 --- a/engines/testbed/testbed.cpp +++ b/engines/testbed/testbed.cpp @@ -20,6 +20,7 @@ * */ +#include "common/achievements.h" #include "common/debug-channels.h" #include "common/scummsys.h" #include "common/archive.h" @@ -196,13 +197,30 @@ void TestbedEngine::invokeTestsuites(TestbedConfigManager &cfMan) { Testsuite::updateStats("Testsuite", (*iter)->getName(), count++, numSuitesEnabled, pt); (*iter)->execute(); } + if ((*iter)->getNumTests() == (*iter)->getNumTestsPassed()) { + AchMan.setAchievement((*iter)->getName(), (*iter)->getDescription()); + checkForAllAchievements(); + } } } +void TestbedEngine::checkForAllAchievements() { + Common::Array::const_iterator iter; + for (iter = _testsuiteList.begin(); iter != _testsuiteList.end(); iter++) { + if (!AchMan.isAchieved((*iter)->getName())) { + return; + } + } + AchMan.setAchievement("EVERYTHINGWORKS", "Everything works!"); +} + Common::Error TestbedEngine::run() { // Initialize graphics using following: initGraphics(320, 200); + // Initialize achievements manager + AchMan.setActiveDomain(Common::UNK_ACHIEVEMENTS, "testbed"); + // As of now we are using GUI::MessageDialog for interaction, Test if it works. // interactive mode could also be modified by a config parameter "non-interactive=1" // TODO: Implement that diff --git a/engines/testbed/testbed.h b/engines/testbed/testbed.h index 64b60e5ed14..8f05568ccad 100644 --- a/engines/testbed/testbed.h +++ b/engines/testbed/testbed.h @@ -60,6 +60,7 @@ public: bool hasFeature(EngineFeature f) const override; private: + void checkForAllAchievements(); Common::Array _testsuiteList; };