aboutsummaryrefslogtreecommitdiff
path: root/engines/testbed
diff options
context:
space:
mode:
authorNeeraj Kumar2010-07-03 21:14:44 +0000
committerNeeraj Kumar2010-07-03 21:14:44 +0000
commit9aae29b8d31a960f9ae7d1a870e27049e40445b6 (patch)
tree3690abb4bb72274a2c8f39f37476cdf545bec632 /engines/testbed
parent5457144f130c5483dc804e61adecb6e3bab426c0 (diff)
downloadscummvm-rg350-9aae29b8d31a960f9ae7d1a870e27049e40445b6.tar.gz
scummvm-rg350-9aae29b8d31a960f9ae7d1a870e27049e40445b6.tar.bz2
scummvm-rg350-9aae29b8d31a960f9ae7d1a870e27049e40445b6.zip
added code for mouse and kbd events
svn-id: r50633
Diffstat (limited to 'engines/testbed')
-rw-r--r--engines/testbed/events.cpp148
-rw-r--r--engines/testbed/events.h4
-rw-r--r--engines/testbed/testbed.cpp19
3 files changed, 158 insertions, 13 deletions
diff --git a/engines/testbed/events.cpp b/engines/testbed/events.cpp
index 59521123ff..e992a230d3 100644
--- a/engines/testbed/events.cpp
+++ b/engines/testbed/events.cpp
@@ -23,33 +23,175 @@
*/
#include "common/events.h"
+#include "common/keyboard.h"
+
+#include "graphics/cursorman.h"
#include "testbed/events.h"
namespace Testbed {
+struct keycodeToChar {
+ Common::KeyCode code;
+ char value;
+} keyCodeLUT[] = {
+ {Common::KEYCODE_a, 'a'},
+ {Common::KEYCODE_b, 'b'},
+ {Common::KEYCODE_c, 'c'},
+ {Common::KEYCODE_d, 'd'},
+ {Common::KEYCODE_e, 'e'},
+ {Common::KEYCODE_f, 'f'},
+ {Common::KEYCODE_g, 'g'},
+ {Common::KEYCODE_h, 'h'},
+ {Common::KEYCODE_i, 'i'},
+ {Common::KEYCODE_j, 'j'},
+ {Common::KEYCODE_k, 'k'},
+ {Common::KEYCODE_l, 'l'},
+ {Common::KEYCODE_m, 'm'},
+ {Common::KEYCODE_n, 'n'},
+ {Common::KEYCODE_o, 'o'},
+ {Common::KEYCODE_p, 'p'},
+ {Common::KEYCODE_q, 'q'},
+ {Common::KEYCODE_r, 'r'},
+ {Common::KEYCODE_s, 's'},
+ {Common::KEYCODE_t, 't'},
+ {Common::KEYCODE_u, 'u'},
+ {Common::KEYCODE_v, 'v'},
+ {Common::KEYCODE_w, 'w'},
+ {Common::KEYCODE_x, 'x'},
+ {Common::KEYCODE_y, 'y'},
+ {Common::KEYCODE_z, 'z'}
+ };
+
+char EventTests::keystrokeToChar() {
+ Common::EventManager *eventMan = g_system->getEventManager();
+ bool quitLoop = false;
+ Common::Event event;
+
+ // handle all keybd events
+ while (!quitLoop) {
+ while (eventMan->pollEvent(event)) {
+ switch (event.type) {
+ case Common::EVENT_KEYDOWN :
+ if (event.kbd.keycode == Common::KEYCODE_ESCAPE) {
+ return 0;
+ }
+ for (int i = 0; i < ARRAYSIZE(keyCodeLUT); i++) {
+ if (event.kbd.keycode == keyCodeLUT[i].code) {
+ return keyCodeLUT[i].value;
+ }
+ }
+ default:
+ ; // Ignore other events
+ }
+ }
+ }
+
+ return 0;
+}
+
bool EventTests::mouseEvents() {
Common::EventManager *eventMan = g_system->getEventManager();
+ Common::Point pt(0, 100);
+ Testsuite::writeOnScreen("Generate mouse events make L/R/M button clicks", pt);
+ pt.y = 120;
+ Testsuite::writeOnScreen("Testbed should be able to detect them, Press X to exit", pt);
+
+
bool quitLoop = false;
+ bool passed = true;
+ // handle all mouse events
Common::Event event;
while (!quitLoop) {
+ // show mouse
+ CursorMan.showMouse(true);
+ g_system->updateScreen();
+
while (eventMan->pollEvent(event)) {
switch (event.type) {
- // handle all mouse events
- // TODO: tommorrow
- default:
+ case Common::EVENT_MOUSEMOVE:
+ // Movements havee already been tested in GFX
break;
+ case Common::EVENT_LBUTTONDOWN:
+ Testsuite::clearScreen();
+ Testsuite::writeOnScreen("Mouse left-button pressed", pt);
+ break;
+ case Common::EVENT_RBUTTONDOWN:
+ Testsuite::clearScreen();
+ Testsuite::writeOnScreen("Mouse right-button pressed", pt);
+ break;
+ case Common::EVENT_WHEELDOWN:
+ Testsuite::clearScreen();
+ Testsuite::writeOnScreen("Mouse wheel moved down", pt);
+ break;
+ case Common::EVENT_MBUTTONDOWN:
+ Testsuite::clearScreen();
+ Testsuite::writeOnScreen("Mouse middle-button pressed ", pt);
+ break;
+ case Common::EVENT_LBUTTONUP:
+ Testsuite::clearScreen();
+ Testsuite::writeOnScreen("Mouse left-button released", pt);
+ break;
+ case Common::EVENT_RBUTTONUP:
+ Testsuite::clearScreen();
+ Testsuite::writeOnScreen("Mouse right-button released", pt);
+ break;
+ case Common::EVENT_WHEELUP:
+ Testsuite::clearScreen();
+ Testsuite::writeOnScreen("Mouse wheel moved down", pt);
+ break;
+ case Common::EVENT_MBUTTONUP:
+ Testsuite::clearScreen();
+ Testsuite::writeOnScreen("Mouse middle-button released ", pt);
+ break;
+ case Common::EVENT_KEYDOWN:
+ if (event.kbd.keycode == Common::KEYCODE_x) {
+ Testsuite::clearScreen();
+ Testsuite::writeOnScreen("Exit requested", pt);
+ quitLoop = true;
+ }
+ break;
+
+ default:
+ break;
}
}
}
+ // Verify results now!
+ if (Testsuite::handleInteractiveInput("Were mouse clicks L/R/M buttons identfied?", "Yes", "No", kOptionRight)) {
+ Testsuite::logDetailedPrintf("Mouse clicks (L/R/M buttons) failed");
+ passed = false;
+ }
+ if (Testsuite::handleInteractiveInput("Were mouse wheel movements identified?", "Yes", "No", kOptionRight)) {
+ Testsuite::logDetailedPrintf("Mouse wheel movements failed");
+ passed = false;
+ }
+
+ return passed;
+}
+
+bool EventTests::kbdEvents() {
+ // Make user type some word and display the output on screen
+ Common::String text = "You Entered :";
+ Common::Point pt(0, 100);
+ Testsuite::clearScreen();
+ Testsuite::writeOnScreen("Enter your word, press ESC when done, it will be echoed back", pt);
+ pt.y += 20;
+ Common::Rect rect = Testsuite::writeOnScreen(text, pt);
+ char letter;
+ while ((letter = keystrokeToChar()) != 0) {
+ Testsuite::clearScreen(rect);
+ text = text + letter;
+ }
return true;
}
EventTestSuite::EventTestSuite() {
addTest("Mouse Events", &EventTests::mouseEvents);
+ addTest("Keyboard Events", &EventTests::kbdEvents);
}
const char *EventTestSuite::getName() const {
return "Events";
diff --git a/engines/testbed/events.h b/engines/testbed/events.h
index 33cdb0eeee..f39cf2f939 100644
--- a/engines/testbed/events.h
+++ b/engines/testbed/events.h
@@ -33,10 +33,10 @@ namespace Testbed {
namespace EventTests {
// Helper functions for Event tests
-
+char keystrokeToChar();
// will contain function declarations for Event tests
bool mouseEvents();
-bool keybdEvents();
+bool kbdEvents();
// add more here
}
diff --git a/engines/testbed/testbed.cpp b/engines/testbed/testbed.cpp
index 76ad50baa1..2f5d63dd4f 100644
--- a/engines/testbed/testbed.cpp
+++ b/engines/testbed/testbed.cpp
@@ -28,6 +28,7 @@
#include "engines/util.h"
+#include "testbed/events.h"
#include "testbed/fs.h"
#include "testbed/graphics.h"
#include "testbed/misc.h"
@@ -63,6 +64,9 @@ TestbedEngine::TestbedEngine(OSystem *syst)
// Misc.
ts = new MiscTestSuite();
_testsuiteList.push_back(ts);
+ // Events
+ ts = new EventTestSuite();
+ _testsuiteList.push_back(ts);
}
TestbedEngine::~TestbedEngine() {
@@ -115,21 +119,20 @@ Common::Error TestbedEngine::run() {
// To be set from config file
// By default Interactive tests are enabled
// XXX: disabling these as of now for fastly testing other tests
- Testsuite::isSessionInteractive = false;
+ // Testsuite::isSessionInteractive = false;
if (Testsuite::isSessionInteractive) {
Testsuite::logPrintf("Info! : Interactive tests are also being executed.\n");
Testsuite::displayMessage(prompt, "Proceed?");
- // Executing GFX Tests
- GFXTestSuite gts;
- gts.execute();
}
// Enable the testsuites you want to execute
- enableTestsuite("FS", true);
- enableTestsuite("GFX", true);
- enableTestsuite("savegames", true);
- enableTestsuite("misc", true);
+ // enableTestsuite("FS", true);
+ // enableTestsuite("GFX", true);
+ // enableTestsuite("savegames", true);
+ // enableTestsuite("misc", true);
+ // enableTestsuite("misc", true);
+ enableTestsuite("events", true);
// invoke them
invokeTestsuites();