[PATCH v2 15/17] Add basic framework for unit-testing.

Peter Hutterer peter.hutterer at who-t.net
Mon Mar 21 16:55:42 PDT 2011


Also adds a bunch of fake symbols so we can link. Note that any of these
symbols will return false, 0 or whatever the zero value for the symbol is.
Care must be taken when writing test that this doesn't screw up the test.

Tests are always built but only run on make check.

Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
---
Changes to v1:
- add gitignore
- move XORG_ENABLE_UNIT_TESTS to below XORG_DEFAULT_OPTIONS
- use AM_CPPFLAGS instead of INCLUDES

 Makefile.am           |    2 +-
 configure.ac          |    2 +
 test/.gitignore       |    6 +
 test/Makefile.am      |   14 ++
 test/eventcomm-test.c |   37 ++++
 test/fake-symbols.c   |  446 +++++++++++++++++++++++++++++++++++++++++++++++++
 test/fake-symbols.h   |  177 +++++++++++++++++++
 7 files changed, 683 insertions(+), 1 deletions(-)
 create mode 100644 test/.gitignore
 create mode 100644 test/Makefile.am
 create mode 100644 test/eventcomm-test.c
 create mode 100644 test/fake-symbols.c
 create mode 100644 test/fake-symbols.h

diff --git a/Makefile.am b/Makefile.am
index 538bbc5..edd28a6 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -18,7 +18,7 @@
 #  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
 #  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-SUBDIRS = include src man tools conf
+SUBDIRS = include src man tools conf test
 MAINTAINERCLEANFILES = ChangeLog INSTALL
 
 pkgconfigdir = $(libdir)/pkgconfig
diff --git a/configure.ac b/configure.ac
index 9a7ba59..cda82fc 100644
--- a/configure.ac
+++ b/configure.ac
@@ -43,6 +43,7 @@ m4_ifndef([XORG_MACROS_VERSION],
           [m4_fatal([must install xorg-macros 1.13 or later before running autoconf/autogen])])
 XORG_MACROS_VERSION(1.13)
 XORG_DEFAULT_OPTIONS
+XORG_ENABLE_UNIT_TESTS
 
 # Checks for libraries.
 AC_CHECK_LIB([m], [rint])
@@ -149,6 +150,7 @@ AC_CONFIG_FILES([Makefile
                 tools/Makefile
                 conf/Makefile
                 include/Makefile
+                test/Makefile
                 xorg-synaptics.pc])
 AC_OUTPUT
 
diff --git a/test/.gitignore b/test/.gitignore
new file mode 100644
index 0000000..d81fece
--- /dev/null
+++ b/test/.gitignore
@@ -0,0 +1,6 @@
+#		Add & Override patterns for xf86-input-synaptics 
+#
+#		Edit the following section as needed
+# For example, !report.pc overrides *.pc. See 'man gitignore'
+ 
+eventcomm-test
diff --git a/test/Makefile.am b/test/Makefile.am
new file mode 100644
index 0000000..763ed54
--- /dev/null
+++ b/test/Makefile.am
@@ -0,0 +1,14 @@
+AM_CPPFLAGS = -I$(top_srcdir)/src
+AM_CFLAGS = $(XORG_CFLAGS) $(CWARNFLAGS)
+fake_syms = fake-symbols.c fake-symbols.h
+
+if BUILD_EVENTCOMM
+noinst_PROGRAMS = eventcomm-test
+
+eventcomm_test_SOURCES = eventcomm-test.c\
+			 $(fake_syms)
+endif
+
+if ENABLE_UNIT_TESTS
+TESTS = $(noinst_PROGRAMS)
+endif
diff --git a/test/eventcomm-test.c b/test/eventcomm-test.c
new file mode 100644
index 0000000..ac24640
--- /dev/null
+++ b/test/eventcomm-test.c
@@ -0,0 +1,37 @@
+/*
+ * Copyright © 2011 Red Hat, Inc.
+ *
+ * Permission to use, copy, modify, distribute, and sell this software
+ * and its documentation for any purpose is hereby granted without
+ * fee, provided that the above copyright notice appear in all copies
+ * and that both that copyright notice and this permission notice
+ * appear in supporting documentation, and that the name of Red Hat
+ * not be used in advertising or publicity pertaining to distribution
+ * of the software without specific, written prior permission.  Red
+ * Hat makes no representations about the suitability of this software
+ * for any purpose.  It is provided "as is" without express or implied
+ * warranty.
+ *
+ * THE AUTHORS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN
+ * NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
+ * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
+ * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * Authors:
+ *      Peter Hutterer
+ */
+
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdio.h>
+#include <assert.h>
+
+int main (int argc, char **argv)
+{
+    return 0;
+}
diff --git a/test/fake-symbols.c b/test/fake-symbols.c
new file mode 100644
index 0000000..9657bab
--- /dev/null
+++ b/test/fake-symbols.c
@@ -0,0 +1,446 @@
+#include "fake-symbols.h"
+
+_X_EXPORT
+int xf86ReadSerial (int fd, void *buf, int count)
+{
+    return 0;
+}
+
+
+_X_EXPORT int
+xf86WriteSerial (int fd, const void *buf, int count)
+{
+    return 0;
+}
+
+_X_EXPORT int
+xf86CloseSerial (int fd)
+{
+    return 0;
+}
+
+_X_EXPORT int
+xf86WaitForInput (int fd, int timeout)
+{
+    return 0;
+}
+
+_X_EXPORT int
+xf86OpenSerial (pointer options)
+{
+    return 0;
+}
+
+_X_EXPORT int
+xf86SetSerialSpeed (int fd, int speed)
+{
+    return 0;
+}
+
+_X_EXPORT pointer
+xf86ReplaceIntOption(pointer optlist, const char *name, const int val)
+{
+    return NULL;
+}
+
+_X_EXPORT char *
+xf86SetStrOption(pointer optlist, const char *name, char *deflt)
+{
+    return NULL;
+}
+
+_X_EXPORT int
+xf86SetBoolOption(pointer optlist, const char *name, int deflt)
+{
+    return 0;
+}
+
+_X_EXPORT pointer
+xf86AddNewOption(pointer head, const char *name, const char *val)
+{
+    return NULL;
+}
+_X_EXPORT char *
+xf86FindOptionValue(pointer options, const char *name)
+{
+    return NULL;
+}
+
+_X_EXPORT char *
+xf86OptionName(pointer opt)
+{
+    return NULL;
+}
+
+_X_EXPORT char *
+xf86OptionValue(pointer opt)
+{
+    return NULL;
+}
+
+_X_EXPORT int
+xf86NameCmp(const char *s1, const char *s2)
+{
+    return 0;
+}
+
+_X_EXPORT char *
+xf86CheckStrOption(pointer optlist, const char *name, char *deflt)
+{
+    return NULL;
+}
+
+_X_EXPORT void
+xf86AddEnabledDevice(InputInfoPtr pInfo)
+{
+    return;
+}
+
+_X_EXPORT void
+xf86RemoveEnabledDevice(InputInfoPtr pInfo)
+{
+    return;
+}
+
+_X_EXPORT Atom
+XIGetKnownProperty(char *name)
+{
+    return None;
+}
+
+_X_EXPORT void
+xf86AddInputDriver(InputDriverPtr driver, pointer module, int flags)
+{
+    return;
+}
+
+_X_EXPORT int
+xf86ScaleAxis(int	Cx,
+              int	to_max,
+              int	to_min,
+              int	from_max,
+              int	from_min )
+{
+    int X;
+    int64_t to_width = to_max - to_min;
+    int64_t from_width = from_max - from_min;
+
+    if (from_width) {
+	X = (int)(((to_width * (Cx - from_min)) / from_width) + to_min);
+    }
+    else {
+	X = 0;
+        /*ErrorF ("Divide by Zero in xf86ScaleAxis\n");*/
+    }
+
+    if (X > to_max)
+	X = to_max;
+    if (X < to_min)
+	X = to_min;
+
+    return X;
+}
+
+
+_X_EXPORT void
+DeleteInputDeviceRequest(DeviceIntPtr pDev)
+{
+    return;
+}
+
+
+#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 11
+_X_EXPORT void
+FreeInputAttributes(InputAttributes *attrs)
+{
+    return;
+}
+#endif
+
+_X_EXPORT void
+xf86PostButtonEvent(DeviceIntPtr	device,
+                    int			is_absolute,
+                    int			button,
+                    int			is_down,
+                    int			first_valuator,
+                    int			num_valuators,
+                    ...)
+{
+    return;
+}
+
+_X_EXPORT int
+Xasprintf(char ** ret, const char * format, ...)
+{
+    return 0;
+}
+
+
+_X_EXPORT int
+XISetDevicePropertyDeletable(DeviceIntPtr dev, Atom property, Bool deletable)
+{
+    return 0;
+}
+
+
+_X_EXPORT InputInfoPtr
+xf86FirstLocalDevice(void)
+{
+    return NULL;
+}
+
+
+_X_EXPORT void
+xf86DeleteInput(InputInfoPtr pInp, int flags)
+{
+    return;
+}
+
+_X_EXPORT pointer
+xf86OptionListDuplicate(pointer options)
+{
+    return NULL;
+}
+
+_X_EXPORT Bool
+InitButtonClassDeviceStruct(DeviceIntPtr dev, int numButtons, Atom* labels,
+                            CARD8 *map)
+{
+    return FALSE;
+}
+
+_X_EXPORT void
+InitValuatorAxisStruct(DeviceIntPtr dev, int axnum, Atom label, int minval, int maxval,
+		       int resolution, int min_res, int max_res, int mode)
+{
+    return;
+}
+
+_X_EXPORT void
+xf86PostKeyboardEvent(DeviceIntPtr      device,
+                      unsigned int      key_code,
+                      int               is_down)
+{
+    return;
+}
+
+_X_EXPORT int
+xf86SetIntOption(pointer optlist, const char *name, int deflt)
+{
+    return 0;
+}
+
+_X_EXPORT void
+xf86PostButtonEventP(DeviceIntPtr	device,
+                     int		is_absolute,
+                     int		button,
+                     int		is_down,
+                     int		first_valuator,
+                     int		num_valuators,
+#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 12
+                     const
+#endif
+                           int		*valuators)
+{
+    return;
+}
+
+_X_EXPORT Bool
+InitPtrFeedbackClassDeviceStruct(DeviceIntPtr dev, PtrCtrlProcPtr controlProc)
+{
+    return FALSE;
+}
+
+_X_EXPORT int
+XIChangeDeviceProperty (DeviceIntPtr dev, Atom property, Atom type,
+                        int format, int mode, unsigned long len,
+                        pointer value, Bool sendevent)
+{
+    return 0;
+}
+
+_X_EXPORT CARD32
+GetTimeInMillis (void)
+{
+    return 0;
+}
+
+
+_X_EXPORT int
+NewInputDeviceRequest (InputOption *options,
+#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 11
+                       InputAttributes *attrs,
+#endif
+                       DeviceIntPtr *pdev)
+{
+    return 0;
+}
+
+
+_X_EXPORT Bool
+InitLedFeedbackClassDeviceStruct (DeviceIntPtr dev, LedCtrlProcPtr controlProc)
+{
+    return FALSE;
+}
+
+
+#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 11
+_X_EXPORT InputAttributes*
+DuplicateInputAttributes(InputAttributes *attrs)
+{
+    return NULL;
+}
+#endif
+
+_X_EXPORT int
+ValidAtom(Atom atom)
+{
+    return None;
+}
+
+_X_EXPORT Bool
+InitKeyboardDeviceStruct(DeviceIntPtr dev, XkbRMLVOSet *rmlvo,
+                         BellProcPtr bell_func, KbdCtrlProcPtr ctrl_func)
+{
+    return FALSE;
+}
+
+_X_EXPORT long
+XIRegisterPropertyHandler(DeviceIntPtr         dev,
+                          int (*SetProperty) (DeviceIntPtr dev,
+                                              Atom property,
+                                              XIPropertyValuePtr prop,
+                                              BOOL checkonly),
+                          int (*GetProperty) (DeviceIntPtr dev,
+                                              Atom property),
+                          int (*DeleteProperty) (DeviceIntPtr dev,
+                                                 Atom property))
+{
+    return 0;
+}
+
+_X_EXPORT int
+InitProximityClassDeviceStruct(DeviceIntPtr dev)
+{
+    return 0;
+}
+
+
+_X_EXPORT void
+xf86Msg(MessageType type, const char *format, ...)
+{
+    return;
+}
+
+_X_EXPORT void
+xf86MsgVerb(MessageType type, int verb, const char *format, ...)
+{
+    return;
+}
+
+
+_X_EXPORT void
+xf86PostMotionEventP(DeviceIntPtr	device,
+                    int			is_absolute,
+                    int			first_valuator,
+                    int			num_valuators,
+#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 12
+                    const
+#endif
+                          int		*valuators)
+{
+    return;
+}
+
+
+_X_EXPORT Bool
+InitValuatorClassDeviceStruct(DeviceIntPtr dev, int numAxes, Atom *labels,
+                              int numMotionEvents, int mode)
+{
+    return FALSE;
+}
+
+
+_X_EXPORT pointer
+xf86ReplaceStrOption(pointer optlist, const char *name, const char* val)
+{
+    return NULL;
+}
+
+
+_X_EXPORT pointer
+xf86NextOption(pointer list)
+{
+    return NULL;
+}
+
+
+_X_EXPORT int
+XIGetDeviceProperty (DeviceIntPtr dev, Atom property, XIPropertyValuePtr *value)
+{
+    return 0;
+}
+
+
+_X_EXPORT Atom
+MakeAtom(const char *string, unsigned len, Bool makeit)
+{
+    return None;
+}
+
+
+_X_EXPORT int
+GetMotionHistorySize(void)
+{
+    return 0;
+}
+
+
+_X_EXPORT void
+xf86PostProximityEventP(DeviceIntPtr	device,
+                        int		is_in,
+                        int		first_valuator,
+                        int		num_valuators,
+#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 12
+                        const
+#endif
+                           int		*valuators)
+{
+    return;
+}
+
+
+_X_EXPORT Bool
+InitFocusClassDeviceStruct(DeviceIntPtr dev)
+{
+    return FALSE;
+}
+
+#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) < 12
+void
+xf86ProcessCommonOptions(InputInfoPtr pInfo, pointer list)
+{
+}
+
+void
+xf86CollectInputOptions(InputInfoPtr pInfo,
+                        const char **defaultOpts,
+                        pointer extraOpts)
+{
+}
+
+InputInfoPtr xf86AllocateInput(InputDriverPtr drv, int flags)
+{
+    return NULL;
+}
+
+#endif
+
+ClientPtr serverClient;
+
+Bool QueueWorkProc (
+    Bool (*function)(ClientPtr /* pClient */, pointer /* closure */),
+    ClientPtr client, pointer closure)
+{
+    return FALSE;
+}
diff --git a/test/fake-symbols.h b/test/fake-symbols.h
new file mode 100644
index 0000000..cc62679
--- /dev/null
+++ b/test/fake-symbols.h
@@ -0,0 +1,177 @@
+#include <xorg-server.h>
+#include <xf86Xinput.h>
+
+extern int xf86ReadSerial (int fd, void *buf, int count);
+extern int xf86WriteSerial (int fd, const void *buf, int count);
+extern int xf86CloseSerial (int fd);
+extern int xf86WaitForInput (int fd, int timeout);
+extern int xf86OpenSerial (pointer options);
+extern int xf86SetSerialSpeed (int fd, int speed);
+
+extern pointer xf86ReplaceIntOption(pointer optlist, const char *name, const int val);
+extern pointer xf86AddNewOption(pointer head, const char *name, const char *val);
+extern char* xf86OptionName(pointer opt);
+extern char* xf86FindOptionValue(pointer options, const char *name);
+extern int xf86NameCmp(const char *s1, const char *s2);
+extern char* xf86CheckStrOption(pointer optlist, const char *name, char *deflt);
+
+
+extern char * xf86SetStrOption(pointer optlist, const char *name, char *deflt);
+extern int xf86SetBoolOption(pointer optlist, const char *name, int deflt);
+extern pointer xf86AddNewOption(pointer head, const char *name, const char *val);
+extern char* xf86FindOptionValue(pointer options, const char *name);
+extern char* xf86OptionName(pointer opt);
+extern char *xf86OptionValue(pointer opt);
+extern int xf86NameCmp(const char *s1, const char *s2);
+extern char * xf86CheckStrOption(pointer optlist, const char *name, char *deflt);
+extern void xf86AddEnabledDevice(InputInfoPtr pInfo);
+extern void xf86RemoveEnabledDevice(InputInfoPtr pInfo);
+extern Atom XIGetKnownProperty(char *name);
+extern void xf86AddInputDriver(InputDriverPtr driver, pointer module, int flags);
+extern int
+xf86ScaleAxis(int	Cx,
+              int	to_max,
+              int	to_min,
+              int	from_max,
+              int	from_min );
+
+extern void DeleteInputDeviceRequest(DeviceIntPtr pDev);
+#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 11
+extern void FreeInputAttributes(InputAttributes *attrs);
+#endif
+extern void
+xf86PostButtonEvent(DeviceIntPtr	device,
+                    int			is_absolute,
+                    int			button,
+                    int			is_down,
+                    int			first_valuator,
+                    int			num_valuators,
+                    ...);
+extern int Xasprintf(char ** ret, const char *format, ...);
+extern int
+XISetDevicePropertyDeletable(DeviceIntPtr dev, Atom property, Bool deletable);
+
+extern InputInfoPtr xf86FirstLocalDevice(void);
+extern void xf86DeleteInput(InputInfoPtr pInp, int flags);
+extern pointer xf86OptionListDuplicate(pointer options);
+extern Bool
+InitButtonClassDeviceStruct(DeviceIntPtr dev, int numButtons, Atom* labels,
+                            CARD8 *map);
+extern void
+InitValuatorAxisStruct(DeviceIntPtr dev, int axnum, Atom label, int minval, int maxval,
+		       int resolution, int min_res, int max_res, int mode);
+extern void
+xf86PostKeyboardEvent(DeviceIntPtr      device,
+                      unsigned int      key_code,
+                      int               is_down);
+extern int
+xf86SetIntOption(pointer optlist, const char *name, int deflt);
+extern void
+xf86PostButtonEventP(DeviceIntPtr	device,
+                     int		is_absolute,
+                     int		button,
+                     int		is_down,
+                     int		first_valuator,
+                     int		num_valuators,
+#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 12
+                     const
+#endif
+                           int		*valuators);
+extern Bool
+InitPtrFeedbackClassDeviceStruct(DeviceIntPtr dev, PtrCtrlProcPtr controlProc);
+
+extern int
+XIChangeDeviceProperty (DeviceIntPtr dev, Atom property, Atom type,
+                        int format, int mode, unsigned long len,
+                        pointer value, Bool sendevent);
+extern CARD32 GetTimeInMillis (void);
+
+extern int
+NewInputDeviceRequest (InputOption *options,
+#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 11
+                       InputAttributes *attrs,
+#endif
+                       DeviceIntPtr *pdev);
+
+extern Bool
+InitLedFeedbackClassDeviceStruct (DeviceIntPtr dev, LedCtrlProcPtr controlProc);
+
+#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 11
+extern InputAttributes* DuplicateInputAttributes(InputAttributes *attrs);
+#endif
+extern int ValidAtom(Atom atom);
+extern Bool
+InitKeyboardDeviceStruct(DeviceIntPtr dev, XkbRMLVOSet *rmlvo,
+                         BellProcPtr bell_func, KbdCtrlProcPtr ctrl_func);
+extern long
+XIRegisterPropertyHandler(DeviceIntPtr         dev,
+                          int (*SetProperty) (DeviceIntPtr dev,
+                                              Atom property,
+                                              XIPropertyValuePtr prop,
+                                              BOOL checkonly),
+                          int (*GetProperty) (DeviceIntPtr dev,
+                                              Atom property),
+                          int (*DeleteProperty) (DeviceIntPtr dev,
+                                                 Atom property));
+extern int InitProximityClassDeviceStruct(DeviceIntPtr dev);
+extern void xf86Msg(MessageType type, const char *format, ...);
+extern void xf86MsgVerb(MessageType type, int verb, const char *format, ...);
+
+extern void
+xf86PostMotionEventP(DeviceIntPtr	device,
+                    int			is_absolute,
+                    int			first_valuator,
+                    int			num_valuators,
+#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 12
+                    const
+#endif
+                          int		*valuators);
+
+extern Bool
+InitValuatorClassDeviceStruct(DeviceIntPtr dev, int numAxes, Atom *labels,
+                              int numMotionEvents, int mode);
+
+extern pointer
+xf86ReplaceStrOption(pointer optlist, const char *name, const char* val);
+
+extern pointer xf86NextOption(pointer list);
+
+extern int
+XIGetDeviceProperty (DeviceIntPtr dev, Atom property, XIPropertyValuePtr *value);
+
+extern Atom MakeAtom(const char *string, unsigned len, Bool makeit);
+
+extern int GetMotionHistorySize(void);
+
+extern void
+xf86PostProximityEventP(DeviceIntPtr	device,
+                        int		is_in,
+                        int		first_valuator,
+                        int		num_valuators,
+#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 12
+                        const
+#endif
+                              int	*valuators);
+
+extern Bool InitFocusClassDeviceStruct(DeviceIntPtr dev);
+
+
+#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) < 12
+extern void
+xf86ProcessCommonOptions(InputInfoPtr pInfo, pointer list);
+
+extern void
+xf86CollectInputOptions(InputInfoPtr pInfo,
+                        const char **defaultOpts,
+                        pointer extraOpts);
+
+extern InputInfoPtr
+xf86AllocateInput(InputDriverPtr drv, int flags);
+
+
+extern ClientPtr serverClient;
+
+extern Bool QueueWorkProc (
+    Bool (*function)(ClientPtr /* pClient */, pointer /* closure */),
+    ClientPtr client, pointer closure);
+#endif
-- 
1.7.4



More information about the xorg-devel mailing list