aboutsummaryrefslogtreecommitdiff
path: root/engines/testbed
diff options
context:
space:
mode:
authorNeeraj Kumar2010-07-05 21:29:15 +0000
committerNeeraj Kumar2010-07-05 21:29:15 +0000
commitf470baa3144115365881a64bbe9bd82ba0e2f506 (patch)
tree3b459b6986046eaa28adc1a1c8c828df3ef06684 /engines/testbed
parent96dad5be41a99c79587550fc7edd95b6d6c4b319 (diff)
downloadscummvm-rg350-f470baa3144115365881a64bbe9bd82ba0e2f506.tar.gz
scummvm-rg350-f470baa3144115365881a64bbe9bd82ba0e2f506.tar.bz2
scummvm-rg350-f470baa3144115365881a64bbe9bd82ba0e2f506.zip
made Quit and RTL features working
svn-id: r50711
Diffstat (limited to 'engines/testbed')
-rw-r--r--engines/testbed/events.cpp24
-rw-r--r--engines/testbed/events.h1
-rw-r--r--engines/testbed/graphics.cpp9
-rw-r--r--engines/testbed/testbed.cpp7
-rw-r--r--engines/testbed/testbed.h2
-rw-r--r--engines/testbed/testsuite.cpp53
-rw-r--r--engines/testbed/testsuite.h11
7 files changed, 96 insertions, 11 deletions
diff --git a/engines/testbed/events.cpp b/engines/testbed/events.cpp
index e88c081d0d..6da5dd886b 100644
--- a/engines/testbed/events.cpp
+++ b/engines/testbed/events.cpp
@@ -25,6 +25,8 @@
#include "common/events.h"
#include "common/keyboard.h"
+#include "engines/engine.h"
+
#include "graphics/cursorman.h"
#include "testbed/events.h"
@@ -71,8 +73,15 @@ char EventTests::keystrokeToChar() {
// handle all keybd events
while (!quitLoop) {
while (eventMan->pollEvent(event)) {
+
+ // Quit if explicitly requested!
+ if (Engine::shouldQuit()) {
+ return 0;
+ }
+
switch (event.type) {
case Common::EVENT_KEYDOWN :
+
if (event.kbd.keycode == Common::KEYCODE_ESCAPE) {
return 0;
}
@@ -81,8 +90,9 @@ char EventTests::keystrokeToChar() {
return keyCodeLUT[i].value;
}
}
+ break;
default:
- ; // Ignore other events
+ break; // Ignore other events
}
}
}
@@ -109,6 +119,10 @@ bool EventTests::mouseEvents() {
g_system->updateScreen();
while (eventMan->pollEvent(event)) {
+ // Quit if explicitly requested
+ if (Engine::shouldQuit()) {
+ return passed;
+ }
switch (event.type) {
case Common::EVENT_MOUSEMOVE:
// Movements havee already been tested in GFX
@@ -190,9 +204,17 @@ bool EventTests::kbdEvents() {
return true;
}
+bool EventTests::showMainMenu() {
+ Common::EventManager *eventMan = g_system->getEventManager();
+ Common::Event mainMenuEvent;
+ mainMenuEvent.type = Common::EVENT_QUIT;
+ eventMan->pushEvent(mainMenuEvent);
+}
+
EventTestSuite::EventTestSuite() {
addTest("Mouse Events", &EventTests::mouseEvents);
addTest("Keyboard Events", &EventTests::kbdEvents);
+ addTest("Mainmenu Event", &EventTests::showMainMenu);
}
const char *EventTestSuite::getName() const {
return "Events";
diff --git a/engines/testbed/events.h b/engines/testbed/events.h
index f39cf2f939..3effb2c260 100644
--- a/engines/testbed/events.h
+++ b/engines/testbed/events.h
@@ -37,6 +37,7 @@ char keystrokeToChar();
// will contain function declarations for Event tests
bool mouseEvents();
bool kbdEvents();
+bool showMainMenu();
// add more here
}
diff --git a/engines/testbed/graphics.cpp b/engines/testbed/graphics.cpp
index 51f4030dd0..a140d0ca14 100644
--- a/engines/testbed/graphics.cpp
+++ b/engines/testbed/graphics.cpp
@@ -26,6 +26,8 @@
#include "common/list.h"
#include "common/random.h"
+#include "engines/engine.h"
+
#include "testbed/graphics.h"
#include "testbed/testsuite.h"
@@ -190,7 +192,10 @@ void GFXtests::setupMouseLoop(bool disableCursorPalette, const char *gfxModeName
while (!quitLoop) {
while (eventMan->pollEvent(event)) {
-
+ if (Engine::shouldQuit()) {
+ // Quit directly
+ return;
+ }
if (lastRedraw + waitTime < g_system->getMillis()) {
g_system->updateScreen();
lastRedraw = g_system->getMillis();
@@ -207,7 +212,7 @@ void GFXtests::setupMouseLoop(bool disableCursorPalette, const char *gfxModeName
g_system->delayMillis(1000);
break;
default:
- ;// Ignore any other event
+ break;// Ignore handling any other event
}
}
diff --git a/engines/testbed/testbed.cpp b/engines/testbed/testbed.cpp
index 2f5d63dd4f..d6bf92d08a 100644
--- a/engines/testbed/testbed.cpp
+++ b/engines/testbed/testbed.cpp
@@ -37,6 +37,10 @@
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;
@@ -128,10 +132,9 @@ Common::Error TestbedEngine::run() {
// Enable the testsuites you want to execute
// enableTestsuite("FS", true);
- // enableTestsuite("GFX", true);
+ enableTestsuite("GFX", true);
// enableTestsuite("savegames", true);
// enableTestsuite("misc", true);
- // enableTestsuite("misc", true);
enableTestsuite("events", true);
// invoke them
invokeTestsuites();
diff --git a/engines/testbed/testbed.h b/engines/testbed/testbed.h
index 7c45c5aa56..914e39dad6 100644
--- a/engines/testbed/testbed.h
+++ b/engines/testbed/testbed.h
@@ -54,6 +54,8 @@ public:
*/
void invokeTestsuites();
+ bool hasFeature(EngineFeature f) const;
+
private:
Common::Array<Testsuite*> _testsuiteList;
};
diff --git a/engines/testbed/testsuite.cpp b/engines/testbed/testsuite.cpp
index 8e5c1a2d80..c941a71a88 100644
--- a/engines/testbed/testsuite.cpp
+++ b/engines/testbed/testsuite.cpp
@@ -23,6 +23,7 @@
*/
#include "common/config-manager.h"
+#include "common/events.h"
#include "common/stream.h"
#include "graphics/fontman.h"
@@ -42,7 +43,7 @@ bool Testsuite::isSessionInteractive = true;
Common::String Testsuite::_logDirectory = "";
Common::String Testsuite::_logFilename = "";
Common::WriteStream *Testsuite::_ws = 0;
-bool Testsuite::toQuit = false;
+uint Testsuite::toQuit = kLoopNormal;
void Testsuite::setLogDir(const char *dirname) {
_logDirectory = dirname;
@@ -207,18 +208,54 @@ void Testsuite::addTest(const Common::String &name, InvokingFunction f, bool isI
Test* featureTest = new Test(name, f, isInteractive);
_testsToExecute.push_back(featureTest);
}
-
+
+uint Testsuite::parseEvents() {
+ uint startTime = g_system->getMillis();
+ uint end = startTime + kEventHandlingTime;
+ do {
+ Common::Event ev;
+ while (g_system->getEventManager()->pollEvent(ev)) {
+ switch (ev.type) {
+ case Common::EVENT_KEYDOWN:
+ if (ev.kbd.keycode == Common::KEYCODE_ESCAPE) {
+ return kSkipNext;
+ }
+ break;
+ case Common::EVENT_QUIT:
+ case Common::EVENT_RTL:
+ return kEngineQuit;
+ break;
+ default:
+ break;
+ }
+ }
+ g_system->delayMillis(10);
+ startTime = g_system->getMillis();
+ } while (startTime <= end);
+
+ return kLoopNormal;
+}
+
void Testsuite::execute() {
+ // Main Loop for a testsuite
+
// Do nothing if meant to exit
- if (toQuit) {
+ if (toQuit == kEngineQuit) {
return;
}
for (Common::Array<Test*>::iterator i = _testsToExecute.begin(); i != _testsToExecute.end(); ++i) {
+ if (toQuit == kSkipNext) {
+ logPrintf("Info! Skipping Test: %s, Skipped by user.\n", ((*i)->featureName).c_str());
+ toQuit = kLoopNormal;
+ continue;
+ }
+
if((*i)->isInteractive && !isSessionInteractive) {
logPrintf("Info! Skipping Test: %s, non-interactive environment is selected\n", ((*i)->featureName).c_str());
continue;
}
+
logPrintf("Info! Executing Test: %s\n", ((*i)->featureName).c_str());
_numTestsExecuted++;
if ((*i)->driver()) {
@@ -227,11 +264,17 @@ void Testsuite::execute() {
} else {
logPrintf("Result: Failed\n");
}
- // Check if user wants to quit
+ // TODO: Display a screen here to user with details of upcoming test, he can skip it or Quit or RTL
+ // Check if user wants to quit/RTL/Skip next test by parsing events.
+ // Quit directly if explicitly requested
+
if (Engine::shouldQuit()) {
- toQuit = true;
+ toQuit = kEngineQuit;
+ genReport();
return;
}
+
+ toQuit = parseEvents();
}
genReport();
}
diff --git a/engines/testbed/testsuite.h b/engines/testbed/testsuite.h
index 84d99edc00..fe3559a5b9 100644
--- a/engines/testbed/testsuite.h
+++ b/engines/testbed/testsuite.h
@@ -43,6 +43,14 @@ enum OptionSelected {
kOptionRight = 0
};
+enum {
+ kEngineQuit = 0,
+ kSkipNext = 1,
+ kLoopNormal = 2,
+ // Event handling time,(in ms) used in parseEvent()
+ kEventHandlingTime = 50
+};
+
typedef bool (*InvokingFunction)();
/**
@@ -111,6 +119,7 @@ public:
* All code should go in here.
*/
virtual void execute();
+ static uint parseEvents();
virtual const char *getName() const = 0;
@@ -143,7 +152,7 @@ public:
/**
* Used from the code to decide if the engine needs to exit
*/
- static bool toQuit;
+ static uint toQuit;
private:
/**