From 9aae29b8d31a960f9ae7d1a870e27049e40445b6 Mon Sep 17 00:00:00 2001 From: Neeraj Kumar Date: Sat, 3 Jul 2010 21:14:44 +0000 Subject: added code for mouse and kbd events svn-id: r50633 --- engines/testbed/events.cpp | 148 +++++++++++++++++++++++++++++++++++++++++++- engines/testbed/events.h | 4 +- engines/testbed/testbed.cpp | 19 +++--- 3 files changed, 158 insertions(+), 13 deletions(-) (limited to 'engines') 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(); -- cgit v1.2.3