/* ScummVM - Graphic Adventure Engine * * ScummVM is the legal property of its developers, whose names * are too numerous to list here. Please refer to the COPYRIGHT * file distributed with this source distribution. * * 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; either version 2 * of the License, or (at your option) any later version. * * 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * * $URL$ * $Id$ */ #include "common/debug-channels.h" #include "common/scummsys.h" #include "common/system.h" #include "engines/util.h" #include "testbed/config.h" #include "testbed/events.h" #include "testbed/fs.h" #include "testbed/graphics.h" #include "testbed/misc.h" #include "testbed/savegame.h" #include "testbed/sound.h" #include "testbed/testbed.h" namespace Testbed { bool TestbedEngine::hasFeature(EngineFeature f) const { return (f == kSupportsRTL) ? true : false; } TestbedEngine::TestbedEngine(OSystem *syst) : Engine(syst) { // Put your engine in a sane state, but do nothing big yet; // in particular, do not load data from files; rather, if you // need to do such things, do them from init(). // Do not initialize graphics here // However this is the place to specify all default directories DebugMan.addDebugChannel(kTestbedLogOutput, "LOG", "Log of test results generated by testbed"); DebugMan.addDebugChannel(kTestbedEngineDebug, "Debug", "Engine-specific debug statements"); DebugMan.enableDebugChannel("LOG"); // Initialize testsuites here // GFX Testsuite *ts = new GFXTestSuite(); _testsuiteList.push_back(ts); // FS ts = new FSTestSuite(); _testsuiteList.push_back(ts); // Savegames ts = new SaveGameTestSuite(); _testsuiteList.push_back(ts); // Misc. ts = new MiscTestSuite(); _testsuiteList.push_back(ts); // Events ts = new EventTestSuite(); _testsuiteList.push_back(ts); // Sound ts = new SoundSubsystemTestSuite(); _testsuiteList.push_back(ts); } TestbedEngine::~TestbedEngine() { Testsuite::deleteWriteStream(); // Remove all of our debug levels here DebugMan.clearAllDebugChannels(); for (Common::Array::const_iterator i = _testsuiteList.begin(); i != _testsuiteList.end(); ++i) { delete (*i); } } void TestbedEngine::invokeTestsuites(TestbedConfigManager &cfMan) { Common::Array::const_iterator iter; uint count = 1; Common::Point pt = Testsuite::getDisplayRegionCoordinates(); int numSuitesEnabled = cfMan.getNumSuitesEnabled(); for (iter = _testsuiteList.begin(); iter != _testsuiteList.end(); iter++) { if ((*iter)->isEnabled()) { Testsuite::updateStats("Testsuite", (*iter)->getName(), count++, numSuitesEnabled, pt); (*iter)->execute(); } } } Common::Error TestbedEngine::run() { // Initialize graphics using following: initGraphics(320, 200, false); // 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 TestbedConfigManager cfMan(_testsuiteList, "testbed.config"); cfMan.selectTestsuites(); // Init logging Testsuite::initLogging(true); // check if user wanted to exit. if (Engine::shouldQuit()) { return Common::kNoError; } invokeTestsuites(cfMan); return Common::kNoError; } } // End of namespace Testbed