[Scummvm-cvs-logs] SF.net SVN: scummvm:[50711] scummvm/branches/gsoc2010-testbed/engines/ testbed

sud03r at users.sourceforge.net sud03r at users.sourceforge.net
Mon Jul 5 23:29:15 CEST 2010


Revision: 50711
          http://scummvm.svn.sourceforge.net/scummvm/?rev=50711&view=rev
Author:   sud03r
Date:     2010-07-05 21:29:15 +0000 (Mon, 05 Jul 2010)

Log Message:
-----------
made Quit and RTL features working

Modified Paths:
--------------
    scummvm/branches/gsoc2010-testbed/engines/testbed/events.cpp
    scummvm/branches/gsoc2010-testbed/engines/testbed/events.h
    scummvm/branches/gsoc2010-testbed/engines/testbed/graphics.cpp
    scummvm/branches/gsoc2010-testbed/engines/testbed/testbed.cpp
    scummvm/branches/gsoc2010-testbed/engines/testbed/testbed.h
    scummvm/branches/gsoc2010-testbed/engines/testbed/testsuite.cpp
    scummvm/branches/gsoc2010-testbed/engines/testbed/testsuite.h

Modified: scummvm/branches/gsoc2010-testbed/engines/testbed/events.cpp
===================================================================
--- scummvm/branches/gsoc2010-testbed/engines/testbed/events.cpp	2010-07-05 21:18:25 UTC (rev 50710)
+++ scummvm/branches/gsoc2010-testbed/engines/testbed/events.cpp	2010-07-05 21:29:15 UTC (rev 50711)
@@ -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 @@
 	// 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 @@
 						return keyCodeLUT[i].value;
 					}
 				}
+				break;
 			default:
-				; // Ignore other events
+				break;	// Ignore other events
 			}
 		}
 	}
@@ -109,6 +119,10 @@
 		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 @@
 	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";

Modified: scummvm/branches/gsoc2010-testbed/engines/testbed/events.h
===================================================================
--- scummvm/branches/gsoc2010-testbed/engines/testbed/events.h	2010-07-05 21:18:25 UTC (rev 50710)
+++ scummvm/branches/gsoc2010-testbed/engines/testbed/events.h	2010-07-05 21:29:15 UTC (rev 50711)
@@ -37,6 +37,7 @@
 // will contain function declarations for Event tests
 bool mouseEvents();
 bool kbdEvents();
+bool showMainMenu();
 // add more here
 }
 

Modified: scummvm/branches/gsoc2010-testbed/engines/testbed/graphics.cpp
===================================================================
--- scummvm/branches/gsoc2010-testbed/engines/testbed/graphics.cpp	2010-07-05 21:18:25 UTC (rev 50710)
+++ scummvm/branches/gsoc2010-testbed/engines/testbed/graphics.cpp	2010-07-05 21:29:15 UTC (rev 50711)
@@ -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 @@
 
 		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 @@
 					g_system->delayMillis(1000);
 					break;
 				default:	
-					;// Ignore any other event
+					break;// Ignore handling any other event
 
 				}
 			}

Modified: scummvm/branches/gsoc2010-testbed/engines/testbed/testbed.cpp
===================================================================
--- scummvm/branches/gsoc2010-testbed/engines/testbed/testbed.cpp	2010-07-05 21:18:25 UTC (rev 50710)
+++ scummvm/branches/gsoc2010-testbed/engines/testbed/testbed.cpp	2010-07-05 21:29:15 UTC (rev 50711)
@@ -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 @@
 	
 	// 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();

Modified: scummvm/branches/gsoc2010-testbed/engines/testbed/testbed.h
===================================================================
--- scummvm/branches/gsoc2010-testbed/engines/testbed/testbed.h	2010-07-05 21:18:25 UTC (rev 50710)
+++ scummvm/branches/gsoc2010-testbed/engines/testbed/testbed.h	2010-07-05 21:29:15 UTC (rev 50711)
@@ -54,6 +54,8 @@
 	 */
 	void invokeTestsuites();
 
+	bool hasFeature(EngineFeature f) const;
+
 private:
 	Common::Array<Testsuite*> _testsuiteList;
 };

Modified: scummvm/branches/gsoc2010-testbed/engines/testbed/testsuite.cpp
===================================================================
--- scummvm/branches/gsoc2010-testbed/engines/testbed/testsuite.cpp	2010-07-05 21:18:25 UTC (rev 50710)
+++ scummvm/branches/gsoc2010-testbed/engines/testbed/testsuite.cpp	2010-07-05 21:29:15 UTC (rev 50711)
@@ -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 @@
 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 @@
 	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 @@
 		} 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();
 }

Modified: scummvm/branches/gsoc2010-testbed/engines/testbed/testsuite.h
===================================================================
--- scummvm/branches/gsoc2010-testbed/engines/testbed/testsuite.h	2010-07-05 21:18:25 UTC (rev 50710)
+++ scummvm/branches/gsoc2010-testbed/engines/testbed/testsuite.h	2010-07-05 21:29:15 UTC (rev 50711)
@@ -43,6 +43,14 @@
 	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 @@
 	 * All code should go in here.
 	 */
 	virtual void execute();
+	static uint parseEvents();
 	
 	virtual const char *getName() const = 0;
 
@@ -143,7 +152,7 @@
 	/**
 	 * Used from the code to decide if the engine needs to exit
 	 */
-	static bool	toQuit;
+	static uint	toQuit;
 
 private:
 	/**


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list