[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [33028] branches/bmesh/blender: =BMesh: ( personal) Testing Framework=

Joseph Eagar joeedh at gmail.com
Fri Nov 12 00:36:56 CET 2010


Revision: 33028
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=33028
Author:   joeedh
Date:     2010-11-12 00:36:56 +0100 (Fri, 12 Nov 2010)

Log Message:
-----------
=BMesh: (personal) Testing Framework=

I've got my testing framework done now.  It's based on 
recording events at the GHOST level.  This has issues;
a test created on one computer might not pass on
another, due to floating point inaccuracies (though
I tried to blunt this a bit).

This isn't appropriate for general use.  I
wrote it for personal use, and other devs might 
find it useful for their personal use as well.
However, it lacks the reliability you'd need for
a real unit testing framework.

This isn't meant to replace lief's work, by any means, which
is a real unit testing framework.

Modified Paths:
--------------
    branches/bmesh/blender/intern/ghost/GHOST_C-api.h
    branches/bmesh/blender/intern/ghost/GHOST_IEvent.h
    branches/bmesh/blender/intern/ghost/GHOST_ISystem.h
    branches/bmesh/blender/intern/ghost/GHOST_IWindow.h
    branches/bmesh/blender/intern/ghost/intern/GHOST_C-api.cpp
    branches/bmesh/blender/intern/ghost/intern/GHOST_Event.h
    branches/bmesh/blender/intern/ghost/intern/GHOST_EventButton.h
    branches/bmesh/blender/intern/ghost/intern/GHOST_EventCursor.h
    branches/bmesh/blender/intern/ghost/intern/GHOST_EventKey.h
    branches/bmesh/blender/intern/ghost/intern/GHOST_EventManager.cpp
    branches/bmesh/blender/intern/ghost/intern/GHOST_EventManager.h
    branches/bmesh/blender/intern/ghost/intern/GHOST_EventTrackpad.h
    branches/bmesh/blender/intern/ghost/intern/GHOST_EventWheel.h
    branches/bmesh/blender/intern/ghost/intern/GHOST_System.cpp
    branches/bmesh/blender/intern/ghost/intern/GHOST_System.h
    branches/bmesh/blender/intern/ghost/intern/GHOST_SystemX11.cpp
    branches/bmesh/blender/source/blender/blenkernel/BKE_context.h
    branches/bmesh/blender/source/blender/blenkernel/intern/context.c
    branches/bmesh/blender/source/blender/blenkernel/intern/mesh.c
    branches/bmesh/blender/source/blender/windowmanager/intern/wm_event_system.c
    branches/bmesh/blender/test/eventlog.txt
    branches/bmesh/blender/test/test_default.blend
    branches/bmesh/blender/test/test_default.blend1
    branches/bmesh/blender/test/test_vcol.blend
    branches/bmesh/blender/test/test_vcol.blend1
    branches/bmesh/blender/test/test_vcol.events
    branches/bmesh/blender/test/tester.py

Added Paths:
-----------
    branches/bmesh/blender/test/check_test_subdivide.blend
    branches/bmesh/blender/test/check_test_subdivide.blend1
    branches/bmesh/blender/test/check_test_vcol.blend
    branches/bmesh/blender/test/check_test_vcol.blend1
    branches/bmesh/blender/test/check_test_vcol.blend2
    branches/bmesh/blender/test/test_subdivide.blend
    branches/bmesh/blender/test/test_subdivide.blend1
    branches/bmesh/blender/test/test_subdivide.events
    branches/bmesh/blender/test/test_vcol.blend.crash.blend
    branches/bmesh/blender/test/test_vcol.blend2

Removed Paths:
-------------
    branches/bmesh/blender/test/test_vcol_final.blend

Modified: branches/bmesh/blender/intern/ghost/GHOST_C-api.h
===================================================================
--- branches/bmesh/blender/intern/ghost/GHOST_C-api.h	2010-11-11 22:12:49 UTC (rev 33027)
+++ branches/bmesh/blender/intern/ghost/GHOST_C-api.h	2010-11-11 23:36:56 UTC (rev 33028)
@@ -35,6 +35,7 @@
 #define GHOST_C_API_H
 
 #include "GHOST_Types.h"
+#include <stdio.h>
 
 #ifdef __cplusplus
 extern "C" { 
@@ -837,6 +838,12 @@
 extern void GHOST_putClipboard(GHOST_TInt8 *buffer, int selection);
 
 
+extern GHOST_TSuccess GHOST_RecordEvents(GHOST_SystemHandle systemhandle, FILE *file);
+extern GHOST_TSuccess GHOST_StopRecording(GHOST_SystemHandle systemhandle);
+extern GHOST_TSuccess GHOST_PlaybackEvents(GHOST_SystemHandle systemhandle, FILE *file);
+extern int GHOST_PlayingEvents(GHOST_SystemHandle systemhandle);
+extern int GHOST_RecordingEvents(GHOST_SystemHandle systemhandle);
+
 #ifdef __cplusplus
 }
 #endif

Modified: branches/bmesh/blender/intern/ghost/GHOST_IEvent.h
===================================================================
--- branches/bmesh/blender/intern/ghost/GHOST_IEvent.h	2010-11-11 22:12:49 UTC (rev 33027)
+++ branches/bmesh/blender/intern/ghost/GHOST_IEvent.h	2010-11-11 23:36:56 UTC (rev 33028)
@@ -34,9 +34,9 @@
 #define _GHOST_IEVENT_H_
 
 #include "GHOST_Types.h"
+#include "GHOST_IWindow.h"
+#include "intern/GHOST_ModifierKeys.h"
 
-class GHOST_IWindow;
-
 /**
  * Interface class for events received from GHOST.
  * You should not need to inherit this class. The system will pass these events
@@ -71,6 +71,13 @@
 	 */
 	virtual GHOST_TUns64 getTime() = 0;
 
+	virtual void setTime(GHOST_TUns64 t) = 0;
+	
+	virtual void setPlaybackModifierKeys(GHOST_ModifierKeys keys) = 0;
+	virtual void getPlaybackModifierKeys(GHOST_ModifierKeys &keys) = 0;
+	virtual void setPlaybackCursor(GHOST_TInt32 x, GHOST_TInt32 y) = 0;
+	virtual void getPlaybackCursor(GHOST_TInt32 &x, GHOST_TInt32 &y) = 0;
+	
 	/**
 	 * Returns the window this event was generated on, 
 	 * or NULL if it is a 'system' event.
@@ -83,6 +90,17 @@
 	 * @return The event data.
 	 */
 	virtual GHOST_TEventDataPtr getData() = 0;
+
+	virtual int serialize(char buf[256])
+	{
+		return 0;
+	}
+
+	int writeheader(char buf[256])
+	{
+		sprintf(buf, "%lf %d %d", ((double)this->getTime())*0.001, this->getType(), this->getWindow()->getID());
+		return 0;
+	}
 };
 
 #endif // _GHOST_IEVENT_H_

Modified: branches/bmesh/blender/intern/ghost/GHOST_ISystem.h
===================================================================
--- branches/bmesh/blender/intern/ghost/GHOST_ISystem.h	2010-11-11 22:12:49 UTC (rev 33027)
+++ branches/bmesh/blender/intern/ghost/GHOST_ISystem.h	2010-11-11 23:36:56 UTC (rev 33028)
@@ -275,6 +275,13 @@
 	/***************************************************************************************
 	 ** Event management functionality
 	 ***************************************************************************************/
+	
+	virtual GHOST_TSuccess beginRecord(FILE *file) = 0;
+	virtual GHOST_TSuccess endRecord() = 0;
+	virtual GHOST_TSuccess playbackEvents(FILE *file) = 0;
+	
+	virtual bool playingEvents(bool *hasevent) const = 0;
+	virtual bool recordingEvents() = 0;
 
 	/**
 	 * Retrieves events from the system and stores them in the queue.

Modified: branches/bmesh/blender/intern/ghost/GHOST_IWindow.h
===================================================================
--- branches/bmesh/blender/intern/ghost/GHOST_IWindow.h	2010-11-11 22:12:49 UTC (rev 33027)
+++ branches/bmesh/blender/intern/ghost/GHOST_IWindow.h	2010-11-11 23:36:56 UTC (rev 33028)
@@ -65,7 +65,18 @@
 	virtual ~GHOST_IWindow()
 	{
 	}
+	
+	GHOST_IWindow()
+	{
+		static int id = 0;	
+		m_id = id++;
+	}
 
+	virtual int getID()
+	{
+		return m_id;
+	}
+
 	/**
 	 * Returns indication as to whether the window is valid.
 	 * @return The validity of the window.
@@ -305,6 +316,8 @@
 	 */
 	virtual GHOST_TSuccess setCursorGrab(GHOST_TGrabCursorMode mode, GHOST_Rect *bounds) { return GHOST_kSuccess; };
 
+private:
+	int m_id;
 };
 
 #endif // _GHOST_IWINDOW_H_

Modified: branches/bmesh/blender/intern/ghost/intern/GHOST_C-api.cpp
===================================================================
--- branches/bmesh/blender/intern/ghost/intern/GHOST_C-api.cpp	2010-11-11 22:12:49 UTC (rev 33027)
+++ branches/bmesh/blender/intern/ghost/intern/GHOST_C-api.cpp	2010-11-11 23:36:56 UTC (rev 33028)
@@ -95,8 +95,41 @@
 	return (GHOST_TimerTaskHandle) system->installTimer(delay, interval, timerproc, userdata);
 }
 
+GHOST_TSuccess GHOST_RecordEvents(GHOST_SystemHandle systemhandle, FILE *file)
+{
+	GHOST_ISystem* system = (GHOST_ISystem*) systemhandle;
+	
+	return system->beginRecord(file);
+}
 
+GHOST_TSuccess GHOST_StopRecording(GHOST_SystemHandle systemhandle)
+{
+	GHOST_ISystem* system = (GHOST_ISystem*) systemhandle;
+	
+	return system->endRecord();
+}
 
+GHOST_TSuccess GHOST_PlaybackEvents(GHOST_SystemHandle systemhandle, FILE *file)
+{
+	GHOST_ISystem* system = (GHOST_ISystem*) systemhandle;
+	
+	return system->playbackEvents(file);
+}
+
+int GHOST_PlayingEvents(GHOST_SystemHandle systemhandle)
+{
+	GHOST_ISystem* system = (GHOST_ISystem*) systemhandle;
+	return system->playingEvents(NULL);
+}
+
+int GHOST_RecordingEvents(GHOST_SystemHandle systemhandle)
+{
+	GHOST_ISystem* system = (GHOST_ISystem*) systemhandle;
+	
+	return system->recordingEvents();
+}
+
+
 GHOST_TSuccess GHOST_RemoveTimer(GHOST_SystemHandle systemhandle,
 								 GHOST_TimerTaskHandle timertaskhandle)
 {

Modified: branches/bmesh/blender/intern/ghost/intern/GHOST_Event.h
===================================================================
--- branches/bmesh/blender/intern/ghost/intern/GHOST_Event.h	2010-11-11 22:12:49 UTC (rev 33027)
+++ branches/bmesh/blender/intern/ghost/intern/GHOST_Event.h	2010-11-11 23:36:56 UTC (rev 33028)
@@ -35,6 +35,14 @@
 
 #include "GHOST_IEvent.h"
 
+/* INTEGER CODES */
+#if defined(__sgi) || defined (__sparc) || defined (__sparc__) || defined (__PPC__) || defined (__ppc__) || defined (__hppa__) || defined (__BIG_ENDIAN__)
+	/* Big Endian */
+#define MAKE_ID(a,b,c,d) ( (int)(a)<<24 | (int)(b)<<16 | (c)<<8 | (d) )
+#else
+	/* Little Endian */
+#define MAKE_ID(a,b,c,d) ( (int)(d)<<24 | (int)(c)<<16 | (b)<<8 | (a) )
+#endif
 
 /**
  * Base class for events received the operating system.
@@ -73,6 +81,12 @@
 		return m_time;
 	}
 
+	virtual void setTime(GHOST_TUns64 t)
+	{
+		m_time = t;
+	}
+	
+
 	/**
 	 * Returns the window this event was generated on, 
 	 * or NULL if it is a 'system' event.
@@ -91,7 +105,29 @@
 	{
 		return m_data;
 	}
+	
+	virtual void setPlaybackModifierKeys(GHOST_ModifierKeys keys)
+	{
+		m_playmods = keys;
+	}
 
+	virtual void getPlaybackModifierKeys(GHOST_ModifierKeys &keys)
+	{
+		keys = m_playmods;
+	}
+
+	virtual void setPlaybackCursor(GHOST_TInt32 mx, GHOST_TInt32 my)
+	{
+		x = mx;
+		y = my;
+	}
+
+	virtual void getPlaybackCursor(GHOST_TInt32 &mx, GHOST_TInt32 &my)
+	{
+		mx = x;
+		my = y;
+	}
+	
 protected:
 	/** Type of this event. */
 	GHOST_TEventType m_type;
@@ -101,6 +137,11 @@
 	GHOST_IWindow* m_window;
 	/** Pointer to the event data. */
 	GHOST_TEventDataPtr m_data;
+	
+	/** Modifier key state during event playback **/
+	GHOST_ModifierKeys m_playmods;
+	/** Mouse cursor state during event playback **/
+	GHOST_TInt32 x, y;
 };
 
 #endif // _GHOST_EVENT_H_

Modified: branches/bmesh/blender/intern/ghost/intern/GHOST_EventButton.h
===================================================================
--- branches/bmesh/blender/intern/ghost/intern/GHOST_EventButton.h	2010-11-11 22:12:49 UTC (rev 33027)
+++ branches/bmesh/blender/intern/ghost/intern/GHOST_EventButton.h	2010-11-11 23:36:56 UTC (rev 33028)
@@ -58,6 +58,23 @@
 		m_data = &m_buttonEventData;
 	}
 
+	virtual int serialize(char buf[256])
+	{
+		sprintf(buf, "button mask: %d", m_buttonEventData.button);
+		
+		return 0;
+	}
+	
+	GHOST_EventButton(GHOST_TUns64 time, GHOST_TEventType type, GHOST_IWindow* window, char buf[256])
+		: GHOST_Event(time, type, window)
+	{
+		int i;
+		sscanf(buf, "button mask: %d", &i);
+		
+		m_buttonEventData.button = (GHOST_TButtonMask)i;
+		m_data = &m_buttonEventData;
+	}
+
 protected:
 	/** The button event data. */
 	GHOST_TEventButtonData m_buttonEventData;

Modified: branches/bmesh/blender/intern/ghost/intern/GHOST_EventCursor.h
===================================================================
--- branches/bmesh/blender/intern/ghost/intern/GHOST_EventCursor.h	2010-11-11 22:12:49 UTC (rev 33027)
+++ branches/bmesh/blender/intern/ghost/intern/GHOST_EventCursor.h	2010-11-11 23:36:56 UTC (rev 33028)
@@ -58,6 +58,24 @@
 		m_data = &m_cursorEventData;
 	}
 
+	GHOST_EventCursor(GHOST_TUns64 msec, GHOST_TEventType type, GHOST_IWindow* window, char buf[256])
+		: GHOST_Event(msec, type, window)
+	{
+		int x, y;
+		sscanf(buf, "mousecursor: %d %d", &x, &y);
+		
+		m_cursorEventData.x = x;
+		m_cursorEventData.y = y;
+		m_data = &m_cursorEventData;
+	}
+	
+	virtual int serialize(char buf[256])
+	{
+		sprintf(buf, "mousecursor: %d %d", m_cursorEventData.x, m_cursorEventData.y);
+		
+		return 0;
+	}
+		
 protected:
 	/** The x,y-coordinates of the cursor position. */
 	GHOST_TEventCursorData m_cursorEventData;

Modified: branches/bmesh/blender/intern/ghost/intern/GHOST_EventKey.h
===================================================================
--- branches/bmesh/blender/intern/ghost/intern/GHOST_EventKey.h	2010-11-11 22:12:49 UTC (rev 33027)
+++ branches/bmesh/blender/intern/ghost/intern/GHOST_EventKey.h	2010-11-11 23:36:56 UTC (rev 33028)
@@ -71,7 +71,24 @@
 		m_keyEventData.ascii = ascii;
 		m_data = &m_keyEventData;
 	}
+	
+	GHOST_EventKey(GHOST_TUns64 msec, GHOST_TEventType type, GHOST_IWindow* window, char buf[256])
+		: GHOST_Event(msec, type, window)
+	{
+		int key, ascii;
+		sscanf(buf, "key: %d %d", &key, &ascii);
 		
+		m_keyEventData.key = (GHOST_TKey) key;
+		m_keyEventData.ascii = ascii;
+		m_data = &m_keyEventData;
+	}
+	
+	virtual int serialize(char buf[256])
+	{
+		sprintf(buf, "key: %d %d", m_keyEventData.key, m_keyEventData.ascii);
+		
+		return 0;
+	}		
 protected:
 	/** The key event data. */
 	GHOST_TEventKeyData m_keyEventData;

Modified: branches/bmesh/blender/intern/ghost/intern/GHOST_EventManager.cpp
===================================================================
--- branches/bmesh/blender/intern/ghost/intern/GHOST_EventManager.cpp	2010-11-11 22:12:49 UTC (rev 33027)
+++ branches/bmesh/blender/intern/ghost/intern/GHOST_EventManager.cpp	2010-11-11 23:36:56 UTC (rev 33028)

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list