We *really* need a development model change !

Alexandre Julliard julliard at winehq.com
Sun Dec 30 14:08:48 CST 2001


Andriy Palamarchuk <apa3a at yahoo.com> writes:

> No, ability to call W32 API functions is not
> considered a unit test infrastracture. I may say Wine
> has such infrastructure for C since 1993 :-). From
> this point of view Andreas test application provides
> more support for unit tests than plain Perl module.

Not really, because you need a lot more infrastructure to build C
tests than to simply run Perl scripts. For Perl all you need is the
winetest app that is in the tree, plus a bit of Makefile glue which is
pretty trivial to do.

In fact here's a 10-minute hack to add a make test target. With that
all you have to do is create a test script in dlls/xxx/tests/foo.test,
put the expected output in tests/foo.test.ref (presumably generated by
running the test under Windows), add your script to the makefile and
run make test.

Index: Make.rules.in
===================================================================
RCS file: /opt/cvs-commit/wine/Make.rules.in,v
retrieving revision 1.95
diff -u -r1.95 Make.rules.in
--- Make.rules.in	2001/12/14 23:14:22	1.95
+++ Make.rules.in	2001/12/30 18:00:41
@@ -47,6 +47,7 @@
 RM        = rm -f
 MV        = mv
 MKDIR     = mkdir -p
+DIFF      = diff -u
 C2MAN     = @C2MAN@
 MANSPECS  = -w $(TOPSRCDIR)/dlls/gdi/gdi32.spec \
 	    -w $(TOPSRCDIR)/dlls/user/user32.spec \
@@ -58,6 +59,8 @@
 ALLLINTFLAGS = $(LINTFLAGS) $(DEFS) $(OPTIONS) $(DIVINCL)
 WINAPI_CHECK = $(TOPSRCDIR)/tools/winapi_check/winapi_check
 WINEBUILD = $(TOPOBJDIR)/tools/winebuild/winebuild
+WINETEST  = $(TOPOBJDIR)/programs/winetest/winetest
+RUNTEST   = $(TOPOBJDIR)/programs/winetest/runtest
 MAKEDEP   = $(TOPOBJDIR)/tools/makedep
 WRC       = $(TOPOBJDIR)/tools/wrc/wrc
 WMC       = $(TOPOBJDIR)/tools/wmc/wmc
@@ -95,7 +98,7 @@
 
 # Implicit rules
 
-.SUFFIXES: .mc .rc .mc.rc .res .spec .spec.c .glue.c
+.SUFFIXES: .mc .rc .mc.rc .res .spec .spec.c .glue.c .test .test.out .test.ref
 
 .c.o:
 	$(CC) -c $(ALLCFLAGS) -o $@ $<
@@ -121,6 +124,12 @@
 .c.ln:
 	$(LINT) -c $(ALLLINTFLAGS) $< || ( $(RM) $@ && exit 1 )
 
+.test.test.out:
+	$(RUNTEST) $(TOPOBJDIR) $< > $@
+
+.test.out.test.ref:
+	$(DIFF) $< $@ && touch $@
+
 .PHONY: all install uninstall clean distclean depend dummy
 
 # 'all' target first in case the enclosing Makefile didn't define any target
@@ -216,7 +225,7 @@
 	-cd `dirname $@` && $(RM) $(CLEAN_FILES)
 
 clean:: $(SUBDIRS:%=%/__clean__) $(EXTRASUBDIRS:%=%/__clean__)
-	$(RM) $(CLEAN_FILES) $(GEN_C_SRCS) $(GEN_ASM_SRCS) $(RC_SRCS:.rc=.res) $(RC_SRCS16:.rc=.res) $(MC_SRCS:.mc=.mc.rc) $(PROGRAMS)
+	$(RM) $(CLEAN_FILES) $(GEN_C_SRCS) $(GEN_ASM_SRCS) $(RC_SRCS:.rc=.res) $(RC_SRCS16:.rc=.res) $(MC_SRCS:.mc=.mc.rc) $(TESTS:%=tests/%.out) $(PROGRAMS)
 
 # Rules for installing
 
@@ -225,6 +234,13 @@
 
 $(SUBDIRS:%=%/__uninstall__): dummy
 	cd `dirname $@` && $(MAKE) uninstall
+
+# Rules for testing
+
+test:: $(WINETEST) $(TESTS:%=tests/%.out) $(TESTS:%=tests/%.ref)
+
+$(WINETEST):
+	cd $(TOPOBJDIR)/programs/winetest && $(MAKE) winetest
 
 # Misc. rules
 
Index: Makefile.in
===================================================================
RCS file: /opt/cvs-commit/wine/Makefile.in,v
retrieving revision 1.103
diff -u -r1.103 Makefile.in
--- Makefile.in	2001/11/23 23:04:58	1.103
+++ Makefile.in	2001/12/30 18:00:41
@@ -132,6 +132,9 @@
 	@cd dlls && $(MAKE) checklink
 	@cd debugger && $(MAKE) checklink
 
+test::
+	@cd dlls && $(MAKE) test
+
 TAGS etags:
 	etags `find $(TOPSRCDIR) -name '*.[chS]' -print | grep -v dbgmain`
 
Index: dlls/Makedll.rules.in
===================================================================
RCS file: /opt/cvs-commit/wine/dlls/Makedll.rules.in,v
retrieving revision 1.16
diff -u -r1.16 Makedll.rules.in
--- dlls/Makedll.rules.in	2001/09/17 20:09:08	1.16
+++ dlls/Makedll.rules.in	2001/12/30 18:01:00
@@ -36,6 +36,10 @@
 checklink:: lib$(MODULE).$(LIBEXT)
 	$(CC) -o checklink $(TOPSRCDIR)/library/checklink.c -L. -l$(MODULE) $(ALL_LIBS) && $(RM) checklink
 
+# Rules for testing
+
+$(TESTS:%=tests/%.out): lib$(MODULE).$(LIBEXT)
+
 # Rules for debug channels
 
 debug_channels: dummy
Index: dlls/Makefile.in
===================================================================
RCS file: /opt/cvs-commit/wine/dlls/Makefile.in,v
retrieving revision 1.109
diff -u -r1.109 Makefile.in
--- dlls/Makefile.in	2001/11/06 17:52:37	1.109
+++ dlls/Makefile.in	2001/12/30 18:01:02
@@ -764,6 +764,9 @@
 
 # Misc rules
 
+$(SUBDIRS:%=%/__test__): dummy
+	@cd `dirname $@` && $(MAKE) test
+
 $(SUBDIRS:%=%/__checklink__): dummy
 	@cd `dirname $@` && $(MAKE) checklink
 
@@ -773,6 +776,8 @@
 install:: $(SUBDIRS:%=%/__install__)
 
 uninstall:: $(SUBDIRS:%=%/__uninstall__)
+
+test:: $(SUBDIRS:%=%/__test__)
 
 checklink:: $(SUBDIRS:%=%/__checklink__)
 
--- /dev/null	Fri Dec  7 20:45:56 2001
+++ programs/winetest/runtest	Sat Dec 29 17:00:48 2001
@@ -0,0 +1,9 @@
+#!/bin/sh
+topobjdir="$1"
+shift
+perldir="$topobjdir/programs/winetest"
+LD_LIBRARY_PATH="$topobjdir/dlls:$topobjdir:$LD_LIBRARY_PATH"
+export LD_LIBRARY_PATH
+WINESERVER="$topobjdir/server/wineserver"
+export WINESERVER
+exec $perldir/winetest -debugmsg -all -- -I $perldir $@

-- 
Alexandre Julliard
julliard at winehq.com




More information about the wine-devel mailing list