diff options
| author | peter <peter@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2007-02-25 22:19:19 +0000 |
|---|---|---|
| committer | peter <peter@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2007-02-25 22:19:19 +0000 |
| commit | 64a44e93576039e4059a3cdd23a047bbb369644b (patch) | |
| tree | 50d7ce3ab38d1933534d03c81b98649e2c8652db /packages/fcl-fpcunit | |
| parent | 0e00ae40b17c7b8cda0df9ebb776e8dda2dbdff7 (diff) | |
| download | fpc-64a44e93576039e4059a3cdd23a047bbb369644b.tar.gz | |
* split fcl into separate fcl-* packages
git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@6660 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'packages/fcl-fpcunit')
| -rw-r--r-- | packages/fcl-fpcunit/Makefile (renamed from packages/fcl-fpcunit/src/Makefile) | 1076 | ||||
| -rw-r--r-- | packages/fcl-fpcunit/Makefile.fpc (renamed from packages/fcl-fpcunit/src/Makefile.fpc) | 10 | ||||
| -rw-r--r-- | packages/fcl-fpcunit/src/DUnitCompatibleInterface.inc | 137 | ||||
| -rw-r--r-- | packages/fcl-fpcunit/src/fpcunit.pp | 1280 | ||||
| -rw-r--r-- | packages/fcl-fpcunit/src/testutils.pp | 113 |
5 files changed, 2181 insertions, 435 deletions
diff --git a/packages/fcl-fpcunit/src/Makefile b/packages/fcl-fpcunit/Makefile index 8990e4589c..f186222b18 100644 --- a/packages/fcl-fpcunit/src/Makefile +++ b/packages/fcl-fpcunit/Makefile @@ -1,5 +1,5 @@ # -# Don't edit, this file is generated by FPCMake Version 2.0.0 [2007/02/03] +# Don't edit, this file is generated by FPCMake Version 2.0.0 [2007/02/25] # default: all MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-wince arm-gba arm-nds arm-embedded arm-symbian powerpc64-linux powerpc64-embedded @@ -229,9 +229,9 @@ UNITSDIR:=$(wildcard $(FPCDIR)/units/$(TARGETSUFFIX)) ifeq ($(UNITSDIR),) UNITSDIR:=$(wildcard $(FPCDIR)/units/$(OS_TARGET)) endif -PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages/base $(FPCDIR)/packages/extra) -override PACKAGE_NAME=fcl -PACKAGEDIR_MAIN:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /fcl/Makefile.fpc,$(PACKAGESDIR)))))) +PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages $(FPCDIR)/packages/base $(FPCDIR)/packages/extra) +override PACKAGE_NAME=fcl-fpcunit +override PACKAGE_VERSION=2.0.0 ifeq ($(FULL_TARGET),i386-linux) override TARGET_UNITS+=testregistry testreport testdecorator ubmockobject xmlreporter fpcunitreport latextestreport xmltestreport plaintestreport endif @@ -385,159 +385,6 @@ endif ifeq ($(FULL_TARGET),powerpc64-embedded) override TARGET_UNITS+=testregistry testreport testdecorator ubmockobject xmlreporter fpcunitreport latextestreport xmltestreport plaintestreport endif -ifeq ($(FULL_TARGET),i386-linux) -override TARGET_EXAMPLEDIRS+=exampletests -endif -ifeq ($(FULL_TARGET),i386-go32v2) -override TARGET_EXAMPLEDIRS+=exampletests -endif -ifeq ($(FULL_TARGET),i386-win32) -override TARGET_EXAMPLEDIRS+=exampletests -endif -ifeq ($(FULL_TARGET),i386-os2) -override TARGET_EXAMPLEDIRS+=exampletests -endif -ifeq ($(FULL_TARGET),i386-freebsd) -override TARGET_EXAMPLEDIRS+=exampletests -endif -ifeq ($(FULL_TARGET),i386-beos) -override TARGET_EXAMPLEDIRS+=exampletests -endif -ifeq ($(FULL_TARGET),i386-netbsd) -override TARGET_EXAMPLEDIRS+=exampletests -endif -ifeq ($(FULL_TARGET),i386-solaris) -override TARGET_EXAMPLEDIRS+=exampletests -endif -ifeq ($(FULL_TARGET),i386-qnx) -override TARGET_EXAMPLEDIRS+=exampletests -endif -ifeq ($(FULL_TARGET),i386-netware) -override TARGET_EXAMPLEDIRS+=exampletests -endif -ifeq ($(FULL_TARGET),i386-openbsd) -override TARGET_EXAMPLEDIRS+=exampletests -endif -ifeq ($(FULL_TARGET),i386-wdosx) -override TARGET_EXAMPLEDIRS+=exampletests -endif -ifeq ($(FULL_TARGET),i386-darwin) -override TARGET_EXAMPLEDIRS+=exampletests -endif -ifeq ($(FULL_TARGET),i386-emx) -override TARGET_EXAMPLEDIRS+=exampletests -endif -ifeq ($(FULL_TARGET),i386-watcom) -override TARGET_EXAMPLEDIRS+=exampletests -endif -ifeq ($(FULL_TARGET),i386-netwlibc) -override TARGET_EXAMPLEDIRS+=exampletests -endif -ifeq ($(FULL_TARGET),i386-wince) -override TARGET_EXAMPLEDIRS+=exampletests -endif -ifeq ($(FULL_TARGET),i386-embedded) -override TARGET_EXAMPLEDIRS+=exampletests -endif -ifeq ($(FULL_TARGET),i386-symbian) -override TARGET_EXAMPLEDIRS+=exampletests -endif -ifeq ($(FULL_TARGET),m68k-linux) -override TARGET_EXAMPLEDIRS+=exampletests -endif -ifeq ($(FULL_TARGET),m68k-freebsd) -override TARGET_EXAMPLEDIRS+=exampletests -endif -ifeq ($(FULL_TARGET),m68k-netbsd) -override TARGET_EXAMPLEDIRS+=exampletests -endif -ifeq ($(FULL_TARGET),m68k-amiga) -override TARGET_EXAMPLEDIRS+=exampletests -endif -ifeq ($(FULL_TARGET),m68k-atari) -override TARGET_EXAMPLEDIRS+=exampletests -endif -ifeq ($(FULL_TARGET),m68k-openbsd) -override TARGET_EXAMPLEDIRS+=exampletests -endif -ifeq ($(FULL_TARGET),m68k-palmos) -override TARGET_EXAMPLEDIRS+=exampletests -endif -ifeq ($(FULL_TARGET),m68k-embedded) -override TARGET_EXAMPLEDIRS+=exampletests -endif -ifeq ($(FULL_TARGET),powerpc-linux) -override TARGET_EXAMPLEDIRS+=exampletests -endif -ifeq ($(FULL_TARGET),powerpc-netbsd) -override TARGET_EXAMPLEDIRS+=exampletests -endif -ifeq ($(FULL_TARGET),powerpc-amiga) -override TARGET_EXAMPLEDIRS+=exampletests -endif -ifeq ($(FULL_TARGET),powerpc-macos) -override TARGET_EXAMPLEDIRS+=exampletests -endif -ifeq ($(FULL_TARGET),powerpc-darwin) -override TARGET_EXAMPLEDIRS+=exampletests -endif -ifeq ($(FULL_TARGET),powerpc-morphos) -override TARGET_EXAMPLEDIRS+=exampletests -endif -ifeq ($(FULL_TARGET),powerpc-embedded) -override TARGET_EXAMPLEDIRS+=exampletests -endif -ifeq ($(FULL_TARGET),sparc-linux) -override TARGET_EXAMPLEDIRS+=exampletests -endif -ifeq ($(FULL_TARGET),sparc-netbsd) -override TARGET_EXAMPLEDIRS+=exampletests -endif -ifeq ($(FULL_TARGET),sparc-solaris) -override TARGET_EXAMPLEDIRS+=exampletests -endif -ifeq ($(FULL_TARGET),sparc-embedded) -override TARGET_EXAMPLEDIRS+=exampletests -endif -ifeq ($(FULL_TARGET),x86_64-linux) -override TARGET_EXAMPLEDIRS+=exampletests -endif -ifeq ($(FULL_TARGET),x86_64-freebsd) -override TARGET_EXAMPLEDIRS+=exampletests -endif -ifeq ($(FULL_TARGET),x86_64-win64) -override TARGET_EXAMPLEDIRS+=exampletests -endif -ifeq ($(FULL_TARGET),x86_64-embedded) -override TARGET_EXAMPLEDIRS+=exampletests -endif -ifeq ($(FULL_TARGET),arm-linux) -override TARGET_EXAMPLEDIRS+=exampletests -endif -ifeq ($(FULL_TARGET),arm-palmos) -override TARGET_EXAMPLEDIRS+=exampletests -endif -ifeq ($(FULL_TARGET),arm-wince) -override TARGET_EXAMPLEDIRS+=exampletests -endif -ifeq ($(FULL_TARGET),arm-gba) -override TARGET_EXAMPLEDIRS+=exampletests -endif -ifeq ($(FULL_TARGET),arm-nds) -override TARGET_EXAMPLEDIRS+=exampletests -endif -ifeq ($(FULL_TARGET),arm-embedded) -override TARGET_EXAMPLEDIRS+=exampletests -endif -ifeq ($(FULL_TARGET),arm-symbian) -override TARGET_EXAMPLEDIRS+=exampletests -endif -ifeq ($(FULL_TARGET),powerpc64-linux) -override TARGET_EXAMPLEDIRS+=exampletests -endif -ifeq ($(FULL_TARGET),powerpc64-embedded) -override TARGET_EXAMPLEDIRS+=exampletests -endif override INSTALL_FPCPACKAGE=y ifeq ($(FULL_TARGET),i386-linux) override COMPILER_OPTIONS+=-S2h @@ -693,157 +540,157 @@ ifeq ($(FULL_TARGET),powerpc64-embedded) override COMPILER_OPTIONS+=-S2h endif ifeq ($(FULL_TARGET),i386-linux) -override COMPILER_TARGETDIR+=. +override COMPILER_SOURCEDIR+=src endif ifeq ($(FULL_TARGET),i386-go32v2) -override COMPILER_TARGETDIR+=. +override COMPILER_SOURCEDIR+=src endif ifeq ($(FULL_TARGET),i386-win32) -override COMPILER_TARGETDIR+=. +override COMPILER_SOURCEDIR+=src endif ifeq ($(FULL_TARGET),i386-os2) -override COMPILER_TARGETDIR+=. +override COMPILER_SOURCEDIR+=src endif ifeq ($(FULL_TARGET),i386-freebsd) -override COMPILER_TARGETDIR+=. +override COMPILER_SOURCEDIR+=src endif ifeq ($(FULL_TARGET),i386-beos) -override COMPILER_TARGETDIR+=. +override COMPILER_SOURCEDIR+=src endif ifeq ($(FULL_TARGET),i386-netbsd) -override COMPILER_TARGETDIR+=. +override COMPILER_SOURCEDIR+=src endif ifeq ($(FULL_TARGET),i386-solaris) -override COMPILER_TARGETDIR+=. +override COMPILER_SOURCEDIR+=src endif ifeq ($(FULL_TARGET),i386-qnx) -override COMPILER_TARGETDIR+=. +override COMPILER_SOURCEDIR+=src endif ifeq ($(FULL_TARGET),i386-netware) -override COMPILER_TARGETDIR+=. +override COMPILER_SOURCEDIR+=src endif ifeq ($(FULL_TARGET),i386-openbsd) -override COMPILER_TARGETDIR+=. +override COMPILER_SOURCEDIR+=src endif ifeq ($(FULL_TARGET),i386-wdosx) -override COMPILER_TARGETDIR+=. +override COMPILER_SOURCEDIR+=src endif ifeq ($(FULL_TARGET),i386-darwin) -override COMPILER_TARGETDIR+=. +override COMPILER_SOURCEDIR+=src endif ifeq ($(FULL_TARGET),i386-emx) -override COMPILER_TARGETDIR+=. +override COMPILER_SOURCEDIR+=src endif ifeq ($(FULL_TARGET),i386-watcom) -override COMPILER_TARGETDIR+=. +override COMPILER_SOURCEDIR+=src endif ifeq ($(FULL_TARGET),i386-netwlibc) -override COMPILER_TARGETDIR+=. +override COMPILER_SOURCEDIR+=src endif ifeq ($(FULL_TARGET),i386-wince) -override COMPILER_TARGETDIR+=. +override COMPILER_SOURCEDIR+=src endif ifeq ($(FULL_TARGET),i386-embedded) -override COMPILER_TARGETDIR+=. +override COMPILER_SOURCEDIR+=src endif ifeq ($(FULL_TARGET),i386-symbian) -override COMPILER_TARGETDIR+=. +override COMPILER_SOURCEDIR+=src endif ifeq ($(FULL_TARGET),m68k-linux) -override COMPILER_TARGETDIR+=. +override COMPILER_SOURCEDIR+=src endif ifeq ($(FULL_TARGET),m68k-freebsd) -override COMPILER_TARGETDIR+=. +override COMPILER_SOURCEDIR+=src endif ifeq ($(FULL_TARGET),m68k-netbsd) -override COMPILER_TARGETDIR+=. +override COMPILER_SOURCEDIR+=src endif ifeq ($(FULL_TARGET),m68k-amiga) -override COMPILER_TARGETDIR+=. +override COMPILER_SOURCEDIR+=src endif ifeq ($(FULL_TARGET),m68k-atari) -override COMPILER_TARGETDIR+=. +override COMPILER_SOURCEDIR+=src endif ifeq ($(FULL_TARGET),m68k-openbsd) -override COMPILER_TARGETDIR+=. +override COMPILER_SOURCEDIR+=src endif ifeq ($(FULL_TARGET),m68k-palmos) -override COMPILER_TARGETDIR+=. +override COMPILER_SOURCEDIR+=src endif ifeq ($(FULL_TARGET),m68k-embedded) -override COMPILER_TARGETDIR+=. +override COMPILER_SOURCEDIR+=src endif ifeq ($(FULL_TARGET),powerpc-linux) -override COMPILER_TARGETDIR+=. +override COMPILER_SOURCEDIR+=src endif ifeq ($(FULL_TARGET),powerpc-netbsd) -override COMPILER_TARGETDIR+=. +override COMPILER_SOURCEDIR+=src endif ifeq ($(FULL_TARGET),powerpc-amiga) -override COMPILER_TARGETDIR+=. +override COMPILER_SOURCEDIR+=src endif ifeq ($(FULL_TARGET),powerpc-macos) -override COMPILER_TARGETDIR+=. +override COMPILER_SOURCEDIR+=src endif ifeq ($(FULL_TARGET),powerpc-darwin) -override COMPILER_TARGETDIR+=. +override COMPILER_SOURCEDIR+=src endif ifeq ($(FULL_TARGET),powerpc-morphos) -override COMPILER_TARGETDIR+=. +override COMPILER_SOURCEDIR+=src endif ifeq ($(FULL_TARGET),powerpc-embedded) -override COMPILER_TARGETDIR+=. +override COMPILER_SOURCEDIR+=src endif ifeq ($(FULL_TARGET),sparc-linux) -override COMPILER_TARGETDIR+=. +override COMPILER_SOURCEDIR+=src endif ifeq ($(FULL_TARGET),sparc-netbsd) -override COMPILER_TARGETDIR+=. +override COMPILER_SOURCEDIR+=src endif ifeq ($(FULL_TARGET),sparc-solaris) -override COMPILER_TARGETDIR+=. +override COMPILER_SOURCEDIR+=src endif ifeq ($(FULL_TARGET),sparc-embedded) -override COMPILER_TARGETDIR+=. +override COMPILER_SOURCEDIR+=src endif ifeq ($(FULL_TARGET),x86_64-linux) -override COMPILER_TARGETDIR+=. +override COMPILER_SOURCEDIR+=src endif ifeq ($(FULL_TARGET),x86_64-freebsd) -override COMPILER_TARGETDIR+=. +override COMPILER_SOURCEDIR+=src endif ifeq ($(FULL_TARGET),x86_64-win64) -override COMPILER_TARGETDIR+=. +override COMPILER_SOURCEDIR+=src endif ifeq ($(FULL_TARGET),x86_64-embedded) -override COMPILER_TARGETDIR+=. +override COMPILER_SOURCEDIR+=src endif ifeq ($(FULL_TARGET),arm-linux) -override COMPILER_TARGETDIR+=. +override COMPILER_SOURCEDIR+=src endif ifeq ($(FULL_TARGET),arm-palmos) -override COMPILER_TARGETDIR+=. +override COMPILER_SOURCEDIR+=src endif ifeq ($(FULL_TARGET),arm-wince) -override COMPILER_TARGETDIR+=. +override COMPILER_SOURCEDIR+=src endif ifeq ($(FULL_TARGET),arm-gba) -override COMPILER_TARGETDIR+=. +override COMPILER_SOURCEDIR+=src endif ifeq ($(FULL_TARGET),arm-nds) -override COMPILER_TARGETDIR+=. +override COMPILER_SOURCEDIR+=src endif ifeq ($(FULL_TARGET),arm-embedded) -override COMPILER_TARGETDIR+=. +override COMPILER_SOURCEDIR+=src endif ifeq ($(FULL_TARGET),arm-symbian) -override COMPILER_TARGETDIR+=. +override COMPILER_SOURCEDIR+=src endif ifeq ($(FULL_TARGET),powerpc64-linux) -override COMPILER_TARGETDIR+=. +override COMPILER_SOURCEDIR+=src endif ifeq ($(FULL_TARGET),powerpc64-embedded) -override COMPILER_TARGETDIR+=. +override COMPILER_SOURCEDIR+=src endif ifdef REQUIRE_UNITSDIR override UNITSDIR+=$(REQUIRE_UNITSDIR) @@ -1592,159 +1439,450 @@ else TAROPT=vz TAREXT=.tar.gz endif -override REQUIRE_PACKAGES=rtl +override REQUIRE_PACKAGES=rtl fcl-xml ifeq ($(FULL_TARGET),i386-linux) REQUIRE_PACKAGES_RTL=1 +REQUIRE_PACKAGES_NETDB=1 +REQUIRE_PACKAGES_HASH=1 +REQUIRE_PACKAGES_PASZLIB=1 +REQUIRE_PACKAGES_LIBASYNC=1 +REQUIRE_PACKAGES_PTHREADS=1 +REQUIRE_PACKAGES_FCL-BASE=1 +REQUIRE_PACKAGES_FCL-XML=1 endif ifeq ($(FULL_TARGET),i386-go32v2) REQUIRE_PACKAGES_RTL=1 +REQUIRE_PACKAGES_NETDB=1 +REQUIRE_PACKAGES_HASH=1 +REQUIRE_PACKAGES_PASZLIB=1 +REQUIRE_PACKAGES_FCL-BASE=1 +REQUIRE_PACKAGES_FCL-XML=1 endif ifeq ($(FULL_TARGET),i386-win32) REQUIRE_PACKAGES_RTL=1 +REQUIRE_PACKAGES_NETDB=1 +REQUIRE_PACKAGES_HASH=1 +REQUIRE_PACKAGES_PASZLIB=1 +REQUIRE_PACKAGES_WINUNITS=1 +REQUIRE_PACKAGES_FCL-BASE=1 +REQUIRE_PACKAGES_FCL-XML=1 endif ifeq ($(FULL_TARGET),i386-os2) REQUIRE_PACKAGES_RTL=1 +REQUIRE_PACKAGES_NETDB=1 +REQUIRE_PACKAGES_HASH=1 +REQUIRE_PACKAGES_PASZLIB=1 +REQUIRE_PACKAGES_FCL-BASE=1 +REQUIRE_PACKAGES_FCL-XML=1 endif ifeq ($(FULL_TARGET),i386-freebsd) REQUIRE_PACKAGES_RTL=1 +REQUIRE_PACKAGES_NETDB=1 +REQUIRE_PACKAGES_HASH=1 +REQUIRE_PACKAGES_PASZLIB=1 +REQUIRE_PACKAGES_LIBASYNC=1 +REQUIRE_PACKAGES_PTHREADS=1 +REQUIRE_PACKAGES_FCL-BASE=1 +REQUIRE_PACKAGES_FCL-XML=1 endif ifeq ($(FULL_TARGET),i386-beos) REQUIRE_PACKAGES_RTL=1 +REQUIRE_PACKAGES_NETDB=1 +REQUIRE_PACKAGES_HASH=1 +REQUIRE_PACKAGES_PASZLIB=1 +REQUIRE_PACKAGES_FCL-BASE=1 +REQUIRE_PACKAGES_FCL-XML=1 endif ifeq ($(FULL_TARGET),i386-netbsd) REQUIRE_PACKAGES_RTL=1 +REQUIRE_PACKAGES_NETDB=1 +REQUIRE_PACKAGES_HASH=1 +REQUIRE_PACKAGES_PASZLIB=1 +REQUIRE_PACKAGES_LIBASYNC=1 +REQUIRE_PACKAGES_FCL-BASE=1 +REQUIRE_PACKAGES_FCL-XML=1 endif ifeq ($(FULL_TARGET),i386-solaris) REQUIRE_PACKAGES_RTL=1 +REQUIRE_PACKAGES_NETDB=1 +REQUIRE_PACKAGES_HASH=1 +REQUIRE_PACKAGES_PASZLIB=1 +REQUIRE_PACKAGES_LIBASYNC=1 +REQUIRE_PACKAGES_PTHREADS=1 +REQUIRE_PACKAGES_FCL-BASE=1 +REQUIRE_PACKAGES_FCL-XML=1 endif ifeq ($(FULL_TARGET),i386-qnx) REQUIRE_PACKAGES_RTL=1 +REQUIRE_PACKAGES_NETDB=1 +REQUIRE_PACKAGES_HASH=1 +REQUIRE_PACKAGES_PASZLIB=1 +REQUIRE_PACKAGES_FCL-BASE=1 +REQUIRE_PACKAGES_FCL-XML=1 endif ifeq ($(FULL_TARGET),i386-netware) REQUIRE_PACKAGES_RTL=1 +REQUIRE_PACKAGES_NETDB=1 +REQUIRE_PACKAGES_HASH=1 +REQUIRE_PACKAGES_PASZLIB=1 +REQUIRE_PACKAGES_FCL-BASE=1 +REQUIRE_PACKAGES_FCL-XML=1 endif ifeq ($(FULL_TARGET),i386-openbsd) REQUIRE_PACKAGES_RTL=1 +REQUIRE_PACKAGES_NETDB=1 +REQUIRE_PACKAGES_HASH=1 +REQUIRE_PACKAGES_PASZLIB=1 +REQUIRE_PACKAGES_LIBASYNC=1 +REQUIRE_PACKAGES_FCL-BASE=1 +REQUIRE_PACKAGES_FCL-XML=1 endif ifeq ($(FULL_TARGET),i386-wdosx) REQUIRE_PACKAGES_RTL=1 +REQUIRE_PACKAGES_NETDB=1 +REQUIRE_PACKAGES_HASH=1 +REQUIRE_PACKAGES_PASZLIB=1 +REQUIRE_PACKAGES_FCL-BASE=1 +REQUIRE_PACKAGES_FCL-XML=1 endif ifeq ($(FULL_TARGET),i386-darwin) REQUIRE_PACKAGES_RTL=1 +REQUIRE_PACKAGES_NETDB=1 +REQUIRE_PACKAGES_HASH=1 +REQUIRE_PACKAGES_PASZLIB=1 +REQUIRE_PACKAGES_LIBASYNC=1 +REQUIRE_PACKAGES_PTHREADS=1 +REQUIRE_PACKAGES_FCL-BASE=1 +REQUIRE_PACKAGES_FCL-XML=1 endif ifeq ($(FULL_TARGET),i386-emx) REQUIRE_PACKAGES_RTL=1 +REQUIRE_PACKAGES_NETDB=1 +REQUIRE_PACKAGES_HASH=1 +REQUIRE_PACKAGES_PASZLIB=1 +REQUIRE_PACKAGES_FCL-BASE=1 +REQUIRE_PACKAGES_FCL-XML=1 endif ifeq ($(FULL_TARGET),i386-watcom) REQUIRE_PACKAGES_RTL=1 +REQUIRE_PACKAGES_NETDB=1 +REQUIRE_PACKAGES_HASH=1 +REQUIRE_PACKAGES_PASZLIB=1 +REQUIRE_PACKAGES_FCL-BASE=1 +REQUIRE_PACKAGES_FCL-XML=1 endif ifeq ($(FULL_TARGET),i386-netwlibc) REQUIRE_PACKAGES_RTL=1 +REQUIRE_PACKAGES_NETDB=1 +REQUIRE_PACKAGES_HASH=1 +REQUIRE_PACKAGES_PASZLIB=1 +REQUIRE_PACKAGES_FCL-BASE=1 +REQUIRE_PACKAGES_FCL-XML=1 endif ifeq ($(FULL_TARGET),i386-wince) REQUIRE_PACKAGES_RTL=1 +REQUIRE_PACKAGES_NETDB=1 +REQUIRE_PACKAGES_HASH=1 +REQUIRE_PACKAGES_PASZLIB=1 +REQUIRE_PACKAGES_FCL-BASE=1 +REQUIRE_PACKAGES_FCL-XML=1 endif ifeq ($(FULL_TARGET),i386-embedded) REQUIRE_PACKAGES_RTL=1 +REQUIRE_PACKAGES_NETDB=1 +REQUIRE_PACKAGES_HASH=1 +REQUIRE_PACKAGES_PASZLIB=1 +REQUIRE_PACKAGES_FCL-BASE=1 +REQUIRE_PACKAGES_FCL-XML=1 endif ifeq ($(FULL_TARGET),i386-symbian) REQUIRE_PACKAGES_RTL=1 +REQUIRE_PACKAGES_NETDB=1 +REQUIRE_PACKAGES_HASH=1 +REQUIRE_PACKAGES_PASZLIB=1 +REQUIRE_PACKAGES_FCL-BASE=1 +REQUIRE_PACKAGES_FCL-XML=1 endif ifeq ($(FULL_TARGET),m68k-linux) REQUIRE_PACKAGES_RTL=1 +REQUIRE_PACKAGES_NETDB=1 +REQUIRE_PACKAGES_HASH=1 +REQUIRE_PACKAGES_PASZLIB=1 +REQUIRE_PACKAGES_LIBASYNC=1 +REQUIRE_PACKAGES_PTHREADS=1 +REQUIRE_PACKAGES_FCL-BASE=1 +REQUIRE_PACKAGES_FCL-XML=1 endif ifeq ($(FULL_TARGET),m68k-freebsd) REQUIRE_PACKAGES_RTL=1 +REQUIRE_PACKAGES_NETDB=1 +REQUIRE_PACKAGES_HASH=1 +REQUIRE_PACKAGES_PASZLIB=1 +REQUIRE_PACKAGES_LIBASYNC=1 +REQUIRE_PACKAGES_PTHREADS=1 +REQUIRE_PACKAGES_FCL-BASE=1 +REQUIRE_PACKAGES_FCL-XML=1 endif ifeq ($(FULL_TARGET),m68k-netbsd) REQUIRE_PACKAGES_RTL=1 +REQUIRE_PACKAGES_NETDB=1 +REQUIRE_PACKAGES_HASH=1 +REQUIRE_PACKAGES_PASZLIB=1 +REQUIRE_PACKAGES_LIBASYNC=1 +REQUIRE_PACKAGES_FCL-BASE=1 +REQUIRE_PACKAGES_FCL-XML=1 endif ifeq ($(FULL_TARGET),m68k-amiga) REQUIRE_PACKAGES_RTL=1 +REQUIRE_PACKAGES_NETDB=1 +REQUIRE_PACKAGES_HASH=1 +REQUIRE_PACKAGES_PASZLIB=1 +REQUIRE_PACKAGES_FCL-BASE=1 +REQUIRE_PACKAGES_FCL-XML=1 endif ifeq ($(FULL_TARGET),m68k-atari) REQUIRE_PACKAGES_RTL=1 +REQUIRE_PACKAGES_NETDB=1 +REQUIRE_PACKAGES_HASH=1 +REQUIRE_PACKAGES_PASZLIB=1 +REQUIRE_PACKAGES_FCL-BASE=1 +REQUIRE_PACKAGES_FCL-XML=1 endif ifeq ($(FULL_TARGET),m68k-openbsd) REQUIRE_PACKAGES_RTL=1 +REQUIRE_PACKAGES_NETDB=1 +REQUIRE_PACKAGES_HASH=1 +REQUIRE_PACKAGES_PASZLIB=1 +REQUIRE_PACKAGES_LIBASYNC=1 +REQUIRE_PACKAGES_FCL-BASE=1 +REQUIRE_PACKAGES_FCL-XML=1 endif ifeq ($(FULL_TARGET),m68k-palmos) REQUIRE_PACKAGES_RTL=1 +REQUIRE_PACKAGES_NETDB=1 +REQUIRE_PACKAGES_HASH=1 +REQUIRE_PACKAGES_PASZLIB=1 +REQUIRE_PACKAGES_FCL-BASE=1 +REQUIRE_PACKAGES_FCL-XML=1 endif ifeq ($(FULL_TARGET),m68k-embedded) REQUIRE_PACKAGES_RTL=1 +REQUIRE_PACKAGES_NETDB=1 +REQUIRE_PACKAGES_HASH=1 +REQUIRE_PACKAGES_PASZLIB=1 +REQUIRE_PACKAGES_FCL-BASE=1 +REQUIRE_PACKAGES_FCL-XML=1 endif ifeq ($(FULL_TARGET),powerpc-linux) REQUIRE_PACKAGES_RTL=1 +REQUIRE_PACKAGES_NETDB=1 +REQUIRE_PACKAGES_HASH=1 +REQUIRE_PACKAGES_PASZLIB=1 +REQUIRE_PACKAGES_LIBASYNC=1 +REQUIRE_PACKAGES_PTHREADS=1 +REQUIRE_PACKAGES_FCL-BASE=1 +REQUIRE_PACKAGES_FCL-XML=1 endif ifeq ($(FULL_TARGET),powerpc-netbsd) REQUIRE_PACKAGES_RTL=1 +REQUIRE_PACKAGES_NETDB=1 +REQUIRE_PACKAGES_HASH=1 +REQUIRE_PACKAGES_PASZLIB=1 +REQUIRE_PACKAGES_LIBASYNC=1 +REQUIRE_PACKAGES_FCL-BASE=1 +REQUIRE_PACKAGES_FCL-XML=1 endif ifeq ($(FULL_TARGET),powerpc-amiga) REQUIRE_PACKAGES_RTL=1 +REQUIRE_PACKAGES_NETDB=1 +REQUIRE_PACKAGES_HASH=1 +REQUIRE_PACKAGES_PASZLIB=1 +REQUIRE_PACKAGES_FCL-BASE=1 +REQUIRE_PACKAGES_FCL-XML=1 endif ifeq ($(FULL_TARGET),powerpc-macos) REQUIRE_PACKAGES_RTL=1 +REQUIRE_PACKAGES_NETDB=1 +REQUIRE_PACKAGES_HASH=1 +REQUIRE_PACKAGES_PASZLIB=1 +REQUIRE_PACKAGES_FCL-BASE=1 +REQUIRE_PACKAGES_FCL-XML=1 endif ifeq ($(FULL_TARGET),powerpc-darwin) REQUIRE_PACKAGES_RTL=1 +REQUIRE_PACKAGES_NETDB=1 +REQUIRE_PACKAGES_HASH=1 +REQUIRE_PACKAGES_PASZLIB=1 +REQUIRE_PACKAGES_LIBASYNC=1 +REQUIRE_PACKAGES_PTHREADS=1 +REQUIRE_PACKAGES_FCL-BASE=1 +REQUIRE_PACKAGES_FCL-XML=1 endif ifeq ($(FULL_TARGET),powerpc-morphos) REQUIRE_PACKAGES_RTL=1 +REQUIRE_PACKAGES_NETDB=1 +REQUIRE_PACKAGES_HASH=1 +REQUIRE_PACKAGES_PASZLIB=1 +REQUIRE_PACKAGES_FCL-BASE=1 +REQUIRE_PACKAGES_FCL-XML=1 endif ifeq ($(FULL_TARGET),powerpc-embedded) REQUIRE_PACKAGES_RTL=1 +REQUIRE_PACKAGES_NETDB=1 +REQUIRE_PACKAGES_HASH=1 +REQUIRE_PACKAGES_PASZLIB=1 +REQUIRE_PACKAGES_FCL-BASE=1 +REQUIRE_PACKAGES_FCL-XML=1 endif ifeq ($(FULL_TARGET),sparc-linux) REQUIRE_PACKAGES_RTL=1 +REQUIRE_PACKAGES_NETDB=1 +REQUIRE_PACKAGES_HASH=1 +REQUIRE_PACKAGES_PASZLIB=1 +REQUIRE_PACKAGES_LIBASYNC=1 +REQUIRE_PACKAGES_PTHREADS=1 +REQUIRE_PACKAGES_FCL-BASE=1 +REQUIRE_PACKAGES_FCL-XML=1 endif ifeq ($(FULL_TARGET),sparc-netbsd) REQUIRE_PACKAGES_RTL=1 +REQUIRE_PACKAGES_NETDB=1 +REQUIRE_PACKAGES_HASH=1 +REQUIRE_PACKAGES_PASZLIB=1 +REQUIRE_PACKAGES_LIBASYNC=1 +REQUIRE_PACKAGES_FCL-BASE=1 +REQUIRE_PACKAGES_FCL-XML=1 endif ifeq ($(FULL_TARGET),sparc-solaris) REQUIRE_PACKAGES_RTL=1 +REQUIRE_PACKAGES_NETDB=1 +REQUIRE_PACKAGES_HASH=1 +REQUIRE_PACKAGES_PASZLIB=1 +REQUIRE_PACKAGES_LIBASYNC=1 +REQUIRE_PACKAGES_PTHREADS=1 +REQUIRE_PACKAGES_FCL-BASE=1 +REQUIRE_PACKAGES_FCL-XML=1 endif ifeq ($(FULL_TARGET),sparc-embedded) REQUIRE_PACKAGES_RTL=1 +REQUIRE_PACKAGES_NETDB=1 +REQUIRE_PACKAGES_HASH=1 +REQUIRE_PACKAGES_PASZLIB=1 +REQUIRE_PACKAGES_FCL-BASE=1 +REQUIRE_PACKAGES_FCL-XML=1 endif ifeq ($(FULL_TARGET),x86_64-linux) REQUIRE_PACKAGES_RTL=1 +REQUIRE_PACKAGES_NETDB=1 +REQUIRE_PACKAGES_HASH=1 +REQUIRE_PACKAGES_PASZLIB=1 +REQUIRE_PACKAGES_LIBASYNC=1 +REQUIRE_PACKAGES_PTHREADS=1 +REQUIRE_PACKAGES_FCL-BASE=1 +REQUIRE_PACKAGES_FCL-XML=1 endif ifeq ($(FULL_TARGET),x86_64-freebsd) REQUIRE_PACKAGES_RTL=1 +REQUIRE_PACKAGES_NETDB=1 +REQUIRE_PACKAGES_HASH=1 +REQUIRE_PACKAGES_PASZLIB=1 +REQUIRE_PACKAGES_LIBASYNC=1 +REQUIRE_PACKAGES_PTHREADS=1 +REQUIRE_PACKAGES_FCL-BASE=1 +REQUIRE_PACKAGES_FCL-XML=1 endif ifeq ($(FULL_TARGET),x86_64-win64) REQUIRE_PACKAGES_RTL=1 +REQUIRE_PACKAGES_NETDB=1 +REQUIRE_PACKAGES_HASH=1 +REQUIRE_PACKAGES_PASZLIB=1 +REQUIRE_PACKAGES_WINUNITS=1 +REQUIRE_PACKAGES_FCL-BASE=1 +REQUIRE_PACKAGES_FCL-XML=1 endif ifeq ($(FULL_TARGET),x86_64-embedded) REQUIRE_PACKAGES_RTL=1 +REQUIRE_PACKAGES_NETDB=1 +REQUIRE_PACKAGES_HASH=1 +REQUIRE_PACKAGES_PASZLIB=1 +REQUIRE_PACKAGES_FCL-BASE=1 +REQUIRE_PACKAGES_FCL-XML=1 endif ifeq ($(FULL_TARGET),arm-linux) REQUIRE_PACKAGES_RTL=1 +REQUIRE_PACKAGES_NETDB=1 +REQUIRE_PACKAGES_HASH=1 +REQUIRE_PACKAGES_PASZLIB=1 +REQUIRE_PACKAGES_LIBASYNC=1 +REQUIRE_PACKAGES_PTHREADS=1 +REQUIRE_PACKAGES_FCL-BASE=1 +REQUIRE_PACKAGES_FCL-XML=1 endif ifeq ($(FULL_TARGET),arm-palmos) REQUIRE_PACKAGES_RTL=1 +REQUIRE_PACKAGES_NETDB=1 +REQUIRE_PACKAGES_HASH=1 +REQUIRE_PACKAGES_PASZLIB=1 +REQUIRE_PACKAGES_FCL-BASE=1 +REQUIRE_PACKAGES_FCL-XML=1 endif ifeq ($(FULL_TARGET),arm-wince) REQUIRE_PACKAGES_RTL=1 +REQUIRE_PACKAGES_NETDB=1 +REQUIRE_PACKAGES_HASH=1 +REQUIRE_PACKAGES_PASZLIB=1 +REQUIRE_PACKAGES_FCL-BASE=1 +REQUIRE_PACKAGES_FCL-XML=1 endif ifeq ($(FULL_TARGET),arm-gba) REQUIRE_PACKAGES_RTL=1 +REQUIRE_PACKAGES_NETDB=1 +REQUIRE_PACKAGES_HASH=1 +REQUIRE_PACKAGES_PASZLIB=1 +REQUIRE_PACKAGES_FCL-BASE=1 +REQUIRE_PACKAGES_FCL-XML=1 endif ifeq ($(FULL_TARGET),arm-nds) REQUIRE_PACKAGES_RTL=1 +REQUIRE_PACKAGES_NETDB=1 +REQUIRE_PACKAGES_HASH=1 +REQUIRE_PACKAGES_PASZLIB=1 +REQUIRE_PACKAGES_FCL-BASE=1 +REQUIRE_PACKAGES_FCL-XML=1 endif ifeq ($(FULL_TARGET),arm-embedded) REQUIRE_PACKAGES_RTL=1 +REQUIRE_PACKAGES_NETDB=1 +REQUIRE_PACKAGES_HASH=1 +REQUIRE_PACKAGES_PASZLIB=1 +REQUIRE_PACKAGES_FCL-BASE=1 +REQUIRE_PACKAGES_FCL-XML=1 endif ifeq ($(FULL_TARGET),arm-symbian) REQUIRE_PACKAGES_RTL=1 +REQUIRE_PACKAGES_NETDB=1 +REQUIRE_PACKAGES_HASH=1 +REQUIRE_PACKAGES_PASZLIB=1 +REQUIRE_PACKAGES_FCL-BASE=1 +REQUIRE_PACKAGES_FCL-XML=1 endif ifeq ($(FULL_TARGET),powerpc64-linux) REQUIRE_PACKAGES_RTL=1 +REQUIRE_PACKAGES_NETDB=1 +REQUIRE_PACKAGES_HASH=1 +REQUIRE_PACKAGES_PASZLIB=1 +REQUIRE_PACKAGES_LIBASYNC=1 +REQUIRE_PACKAGES_PTHREADS=1 +REQUIRE_PACKAGES_FCL-BASE=1 +REQUIRE_PACKAGES_FCL-XML=1 endif ifeq ($(FULL_TARGET),powerpc64-embedded) REQUIRE_PACKAGES_RTL=1 +REQUIRE_PACKAGES_NETDB=1 +REQUIRE_PACKAGES_HASH=1 +REQUIRE_PACKAGES_PASZLIB=1 +REQUIRE_PACKAGES_FCL-BASE=1 +REQUIRE_PACKAGES_FCL-XML=1 endif ifdef REQUIRE_PACKAGES_RTL PACKAGEDIR_RTL:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /rtl/Makefile.fpc,$(PACKAGESDIR)))))) @@ -1772,6 +1910,214 @@ ifdef UNITDIR_RTL override COMPILER_UNITDIR+=$(UNITDIR_RTL) endif endif +ifdef REQUIRE_PACKAGES_NETDB +PACKAGEDIR_NETDB:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /netdb/Makefile.fpc,$(PACKAGESDIR)))))) +ifneq ($(PACKAGEDIR_NETDB),) +ifneq ($(wildcard $(PACKAGEDIR_NETDB)/units/$(TARGETSUFFIX)),) +UNITDIR_NETDB=$(PACKAGEDIR_NETDB)/units/$(TARGETSUFFIX) +else +UNITDIR_NETDB=$(PACKAGEDIR_NETDB) +endif +ifdef CHECKDEPEND +$(PACKAGEDIR_NETDB)/$(FPCMADE): + $(MAKE) -C $(PACKAGEDIR_NETDB) $(FPCMADE) +override ALLDEPENDENCIES+=$(PACKAGEDIR_NETDB)/$(FPCMADE) +endif +else +PACKAGEDIR_NETDB= +UNITDIR_NETDB:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /netdb/Package.fpc,$(UNITSDIR))))) +ifneq ($(UNITDIR_NETDB),) +UNITDIR_NETDB:=$(firstword $(UNITDIR_NETDB)) +else +UNITDIR_NETDB= +endif +endif +ifdef UNITDIR_NETDB +override COMPILER_UNITDIR+=$(UNITDIR_NETDB) +endif +endif +ifdef REQUIRE_PACKAGES_HASH +PACKAGEDIR_HASH:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /hash/Makefile.fpc,$(PACKAGESDIR)))))) +ifneq ($(PACKAGEDIR_HASH),) +ifneq ($(wildcard $(PACKAGEDIR_HASH)/units/$(TARGETSUFFIX)),) +UNITDIR_HASH=$(PACKAGEDIR_HASH)/units/$(TARGETSUFFIX) +else +UNITDIR_HASH=$(PACKAGEDIR_HASH) +endif +ifdef CHECKDEPEND +$(PACKAGEDIR_HASH)/$(FPCMADE): + $(MAKE) -C $(PACKAGEDIR_HASH) $(FPCMADE) +override ALLDEPENDENCIES+=$(PACKAGEDIR_HASH)/$(FPCMADE) +endif +else +PACKAGEDIR_HASH= +UNITDIR_HASH:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /hash/Package.fpc,$(UNITSDIR))))) +ifneq ($(UNITDIR_HASH),) +UNITDIR_HASH:=$(firstword $(UNITDIR_HASH)) +else +UNITDIR_HASH= +endif +endif +ifdef UNITDIR_HASH +override COMPILER_UNITDIR+=$(UNITDIR_HASH) +endif +endif +ifdef REQUIRE_PACKAGES_PASZLIB +PACKAGEDIR_PASZLIB:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /paszlib/Makefile.fpc,$(PACKAGESDIR)))))) +ifneq ($(PACKAGEDIR_PASZLIB),) +ifneq ($(wildcard $(PACKAGEDIR_PASZLIB)/units/$(TARGETSUFFIX)),) +UNITDIR_PASZLIB=$(PACKAGEDIR_PASZLIB)/units/$(TARGETSUFFIX) +else +UNITDIR_PASZLIB=$(PACKAGEDIR_PASZLIB) +endif +ifdef CHECKDEPEND +$(PACKAGEDIR_PASZLIB)/$(FPCMADE): + $(MAKE) -C $(PACKAGEDIR_PASZLIB) $(FPCMADE) +override ALLDEPENDENCIES+=$(PACKAGEDIR_PASZLIB)/$(FPCMADE) +endif +else +PACKAGEDIR_PASZLIB= +UNITDIR_PASZLIB:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /paszlib/Package.fpc,$(UNITSDIR))))) +ifneq ($(UNITDIR_PASZLIB),) +UNITDIR_PASZLIB:=$(firstword $(UNITDIR_PASZLIB)) +else +UNITDIR_PASZLIB= +endif +endif +ifdef UNITDIR_PASZLIB +override COMPILER_UNITDIR+=$(UNITDIR_PASZLIB) +endif +endif +ifdef REQUIRE_PACKAGES_LIBASYNC +PACKAGEDIR_LIBASYNC:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /libasync/Makefile.fpc,$(PACKAGESDIR)))))) +ifneq ($(PACKAGEDIR_LIBASYNC),) +ifneq ($(wildcard $(PACKAGEDIR_LIBASYNC)/units/$(TARGETSUFFIX)),) +UNITDIR_LIBASYNC=$(PACKAGEDIR_LIBASYNC)/units/$(TARGETSUFFIX) +else +UNITDIR_LIBASYNC=$(PACKAGEDIR_LIBASYNC) +endif +ifdef CHECKDEPEND +$(PACKAGEDIR_LIBASYNC)/$(FPCMADE): + $(MAKE) -C $(PACKAGEDIR_LIBASYNC) $(FPCMADE) +override ALLDEPENDENCIES+=$(PACKAGEDIR_LIBASYNC)/$(FPCMADE) +endif +else +PACKAGEDIR_LIBASYNC= +UNITDIR_LIBASYNC:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /libasync/Package.fpc,$(UNITSDIR))))) +ifneq ($(UNITDIR_LIBASYNC),) +UNITDIR_LIBASYNC:=$(firstword $(UNITDIR_LIBASYNC)) +else +UNITDIR_LIBASYNC= +endif +endif +ifdef UNITDIR_LIBASYNC +override COMPILER_UNITDIR+=$(UNITDIR_LIBASYNC) +endif +endif +ifdef REQUIRE_PACKAGES_PTHREADS +PACKAGEDIR_PTHREADS:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /pthreads/Makefile.fpc,$(PACKAGESDIR)))))) +ifneq ($(PACKAGEDIR_PTHREADS),) +ifneq ($(wildcard $(PACKAGEDIR_PTHREADS)/units/$(TARGETSUFFIX)),) +UNITDIR_PTHREADS=$(PACKAGEDIR_PTHREADS)/units/$(TARGETSUFFIX) +else +UNITDIR_PTHREADS=$(PACKAGEDIR_PTHREADS) +endif +ifdef CHECKDEPEND +$(PACKAGEDIR_PTHREADS)/$(FPCMADE): + $(MAKE) -C $(PACKAGEDIR_PTHREADS) $(FPCMADE) +override ALLDEPENDENCIES+=$(PACKAGEDIR_PTHREADS)/$(FPCMADE) +endif +else +PACKAGEDIR_PTHREADS= +UNITDIR_PTHREADS:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /pthreads/Package.fpc,$(UNITSDIR))))) +ifneq ($(UNITDIR_PTHREADS),) +UNITDIR_PTHREADS:=$(firstword $(UNITDIR_PTHREADS)) +else +UNITDIR_PTHREADS= +endif +endif +ifdef UNITDIR_PTHREADS +override COMPILER_UNITDIR+=$(UNITDIR_PTHREADS) +endif +endif +ifdef REQUIRE_PACKAGES_FCL-BASE +PACKAGEDIR_FCL-BASE:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /fcl-base/Makefile.fpc,$(PACKAGESDIR)))))) +ifneq ($(PACKAGEDIR_FCL-BASE),) +ifneq ($(wildcard $(PACKAGEDIR_FCL-BASE)/units/$(TARGETSUFFIX)),) +UNITDIR_FCL-BASE=$(PACKAGEDIR_FCL-BASE)/units/$(TARGETSUFFIX) +else +UNITDIR_FCL-BASE=$(PACKAGEDIR_FCL-BASE) +endif +ifdef CHECKDEPEND +$(PACKAGEDIR_FCL-BASE)/$(FPCMADE): + $(MAKE) -C $(PACKAGEDIR_FCL-BASE) $(FPCMADE) +override ALLDEPENDENCIES+=$(PACKAGEDIR_FCL-BASE)/$(FPCMADE) +endif +else +PACKAGEDIR_FCL-BASE= +UNITDIR_FCL-BASE:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /fcl-base/Package.fpc,$(UNITSDIR))))) +ifneq ($(UNITDIR_FCL-BASE),) +UNITDIR_FCL-BASE:=$(firstword $(UNITDIR_FCL-BASE)) +else +UNITDIR_FCL-BASE= +endif +endif +ifdef UNITDIR_FCL-BASE +override COMPILER_UNITDIR+=$(UNITDIR_FCL-BASE) +endif +endif +ifdef REQUIRE_PACKAGES_FCL-XML +PACKAGEDIR_FCL-XML:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /fcl-xml/Makefile.fpc,$(PACKAGESDIR)))))) +ifneq ($(PACKAGEDIR_FCL-XML),) +ifneq ($(wildcard $(PACKAGEDIR_FCL-XML)/units/$(TARGETSUFFIX)),) +UNITDIR_FCL-XML=$(PACKAGEDIR_FCL-XML)/units/$(TARGETSUFFIX) +else +UNITDIR_FCL-XML=$(PACKAGEDIR_FCL-XML) +endif +ifdef CHECKDEPEND +$(PACKAGEDIR_FCL-XML)/$(FPCMADE): + $(MAKE) -C $(PACKAGEDIR_FCL-XML) $(FPCMADE) +override ALLDEPENDENCIES+=$(PACKAGEDIR_FCL-XML)/$(FPCMADE) +endif +else +PACKAGEDIR_FCL-XML= +UNITDIR_FCL-XML:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /fcl-xml/Package.fpc,$(UNITSDIR))))) +ifneq ($(UNITDIR_FCL-XML),) +UNITDIR_FCL-XML:=$(firstword $(UNITDIR_FCL-XML)) +else +UNITDIR_FCL-XML= +endif +endif +ifdef UNITDIR_FCL-XML +override COMPILER_UNITDIR+=$(UNITDIR_FCL-XML) +endif +endif +ifdef REQUIRE_PACKAGES_WINUNITS +PACKAGEDIR_WINUNITS:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /winunits/Makefile.fpc,$(PACKAGESDIR)))))) +ifneq ($(PACKAGEDIR_WINUNITS),) +ifneq ($(wildcard $(PACKAGEDIR_WINUNITS)/units/$(TARGETSUFFIX)),) +UNITDIR_WINUNITS=$(PACKAGEDIR_WINUNITS)/units/$(TARGETSUFFIX) +else +UNITDIR_WINUNITS=$(PACKAGEDIR_WINUNITS) +endif +ifdef CHECKDEPEND +$(PACKAGEDIR_WINUNITS)/$(FPCMADE): + $(MAKE) -C $(PACKAGEDIR_WINUNITS) $(FPCMADE) +override ALLDEPENDENCIES+=$(PACKAGEDIR_WINUNITS)/$(FPCMADE) +endif +else +PACKAGEDIR_WINUNITS= +UNITDIR_WINUNITS:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /winunits/Package.fpc,$(UNITSDIR))))) +ifneq ($(UNITDIR_WINUNITS),) +UNITDIR_WINUNITS:=$(firstword $(UNITDIR_WINUNITS)) +else +UNITDIR_WINUNITS= +endif +endif +ifdef UNITDIR_WINUNITS +override COMPILER_UNITDIR+=$(UNITDIR_WINUNITS) +endif +endif ifndef NOCPUDEF override FPCOPTDEF=$(CPU_TARGET) endif @@ -1934,24 +2280,6 @@ ifdef TARGET_RSTS override RSTFILES=$(addsuffix $(RSTEXT),$(TARGET_RSTS)) override CLEANRSTFILES+=$(RSTFILES) endif -.PHONY: fpc_examples -ifneq ($(TARGET_EXAMPLES),) -HASEXAMPLES=1 -override EXAMPLESOURCEFILES:=$(wildcard $(addsuffix .pp,$(TARGET_EXAMPLES)) $(addsuffix .pas,$(TARGET_EXAMPLES)) $(addsuffix .lpr,$(TARGET_EXAMPLES)) $(addsuffix .dpr,$(TARGET_EXAMPLES))) -override EXAMPLEFILES:=$(addsuffix $(EXEEXT),$(TARGET_EXAMPLES)) -override EXAMPLEOFILES:=$(addsuffix $(OEXT),$(TARGET_EXAMPLES)) $(addprefix $(STATICLIBPREFIX),$(addsuffix $(STATICLIBEXT),$(TARGET_EXAMPLES))) $(addprefix $(IMPORTLIBPREFIX),$(addsuffix $(STATICLIBEXT),$(TARGET_EXAMPLES))) -override CLEANEXEFILES+=$(EXAMPLEFILES) $(EXAMPLEOFILES) -ifeq ($(OS_TARGET),os2) -override CLEANEXEFILES+=$(addsuffix $(AOUTEXT),$(TARGET_EXAMPLES)) -endif -ifeq ($(OS_TARGET),emx) -override CLEANEXEFILES+=$(addsuffix $(AOUTEXT),$(TARGET_EXAMPLES)) -endif -endif -ifneq ($(TARGET_EXAMPLEDIRS),) -HASEXAMPLES=1 -endif -fpc_examples: all $(EXAMPLEFILES) $(addsuffix _all,$(TARGET_EXAMPLEDIRS)) .PHONY: fpc_all fpc_smart fpc_debug fpc_release fpc_shared $(FPCMADE): $(ALLDEPENDENCIES) $(ALLTARGET) @$(ECHOREDIR) Compiled > $(FPCMADE) @@ -2095,6 +2423,88 @@ endif ifdef TARGET_EXAMPLEDIRS $(COPYTREE) $(addsuffix /*,$(TARGET_EXAMPLEDIRS)) $(INSTALL_EXAMPLEDIR) endif +.PHONY: fpc_distinstall +fpc_distinstall: install exampleinstall +.PHONY: fpc_zipinstall fpc_zipsourceinstall fpc_zipexampleinstall +ifndef PACKDIR +ifndef inUnix +PACKDIR=$(BASEDIR)/../fpc-pack +else +PACKDIR=/tmp/fpc-pack +endif +endif +ifndef ZIPNAME +ifdef DIST_ZIPNAME +ZIPNAME=$(DIST_ZIPNAME) +else +ZIPNAME=$(PACKAGE_NAME) +endif +endif +ifndef FULLZIPNAME +FULLZIPNAME=$(ZIPCROSSPREFIX)$(ZIPPREFIX)$(ZIPNAME)$(ZIPSUFFIX) +endif +ifndef ZIPTARGET +ifdef DIST_ZIPTARGET +ZIPTARGET=DIST_ZIPTARGET +else +ZIPTARGET=install +endif +endif +ifndef USEZIP +ifdef inUnix +USETAR=1 +endif +endif +ifndef inUnix +USEZIPWRAPPER=1 +endif +ifdef USEZIPWRAPPER +ZIPPATHSEP=$(PATHSEP) +ZIPWRAPPER=$(subst /,$(PATHSEP),$(DIST_DESTDIR)/fpczip$(SRCBATCHEXT)) +else +ZIPPATHSEP=/ +endif +ZIPCMD_CDPACK:=cd $(subst /,$(ZIPPATHSEP),$(PACKDIR)) +ZIPCMD_CDBASE:=cd $(subst /,$(ZIPPATHSEP),$(BASEDIR)) +ifdef USETAR +ZIPDESTFILE:=$(DIST_DESTDIR)/$(FULLZIPNAME)$(TAREXT) +ZIPCMD_ZIP:=$(TARPROG) cf$(TAROPT) $(ZIPDESTFILE) * +else +ZIPDESTFILE:=$(DIST_DESTDIR)/$(FULLZIPNAME)$(ZIPEXT) +ZIPCMD_ZIP:=$(subst /,$(ZIPPATHSEP),$(ZIPPROG)) -Dr $(ZIPOPT) $(ZIPDESTFILE) * +endif +fpc_zipinstall: + $(MAKE) $(ZIPTARGET) INSTALL_PREFIX=$(PACKDIR) ZIPINSTALL=1 + $(MKDIR) $(DIST_DESTDIR) + $(DEL) $(ZIPDESTFILE) +ifdef USEZIPWRAPPER +ifneq ($(ECHOREDIR),echo) + $(ECHOREDIR) -e "$(subst \,\\,$(ZIPCMD_CDPACK))" > $(ZIPWRAPPER) + $(ECHOREDIR) -e "$(subst \,\\,$(ZIPCMD_ZIP))" >> $(ZIPWRAPPER) + $(ECHOREDIR) -e "$(subst \,\\,$(ZIPCMD_CDBASE))" >> $(ZIPWRAPPER) +else + echo $(ZIPCMD_CDPACK) > $(ZIPWRAPPER) + echo $(ZIPCMD_ZIP) >> $(ZIPWRAPPER) + echo $(ZIPCMD_CDBASE) >> $(ZIPWRAPPER) +endif +ifdef inUnix + /bin/sh $(ZIPWRAPPER) +else + $(ZIPWRAPPER) +endif + $(DEL) $(ZIPWRAPPER) +else + $(ZIPCMD_CDPACK) ; $(ZIPCMD_ZIP) ; $(ZIPCMD_CDBASE) +endif + $(DELTREE) $(PACKDIR) +fpc_zipsourceinstall: + $(MAKE) fpc_zipinstall ZIPTARGET=sourceinstall ZIPSUFFIX=$(ZIPSOURCESUFFIX) +fpc_zipexampleinstall: +ifdef HASEXAMPLES + $(MAKE) fpc_zipinstall ZIPTARGET=exampleinstall ZIPSUFFIX=$(ZIPEXAMPLESUFFIX) +endif +fpc_zipdistinstall: + $(MAKE) fpc_zipinstall ZIPTARGET=distinstall .PHONY: fpc_clean fpc_cleanall fpc_distclean ifdef EXEFILES override CLEANEXEFILES:=$(addprefix $(TARGETDIRPREFIX),$(CLEANEXEFILES)) @@ -2268,220 +2678,22 @@ endif fpc_makefile_sub2: $(addsuffix _makefile_dirs,$(TARGET_DIRS) $(TARGET_EXAMPLEDIRS)) fpc_makefile_dirs: fpc_makefile_sub1 fpc_makefile_sub2 fpc_makefiles: fpc_makefile fpc_makefile_dirs -ifeq ($(FULL_TARGET),i386-linux) -TARGET_EXAMPLEDIRS_EXAMPLETESTS=1 -endif -ifeq ($(FULL_TARGET),i386-go32v2) -TARGET_EXAMPLEDIRS_EXAMPLETESTS=1 -endif -ifeq ($(FULL_TARGET),i386-win32) -TARGET_EXAMPLEDIRS_EXAMPLETESTS=1 -endif -ifeq ($(FULL_TARGET),i386-os2) -TARGET_EXAMPLEDIRS_EXAMPLETESTS=1 -endif -ifeq ($(FULL_TARGET),i386-freebsd) -TARGET_EXAMPLEDIRS_EXAMPLETESTS=1 -endif -ifeq ($(FULL_TARGET),i386-beos) -TARGET_EXAMPLEDIRS_EXAMPLETESTS=1 -endif -ifeq ($(FULL_TARGET),i386-netbsd) -TARGET_EXAMPLEDIRS_EXAMPLETESTS=1 -endif -ifeq ($(FULL_TARGET),i386-solaris) -TARGET_EXAMPLEDIRS_EXAMPLETESTS=1 -endif -ifeq ($(FULL_TARGET),i386-qnx) -TARGET_EXAMPLEDIRS_EXAMPLETESTS=1 -endif -ifeq ($(FULL_TARGET),i386-netware) -TARGET_EXAMPLEDIRS_EXAMPLETESTS=1 -endif -ifeq ($(FULL_TARGET),i386-openbsd) -TARGET_EXAMPLEDIRS_EXAMPLETESTS=1 -endif -ifeq ($(FULL_TARGET),i386-wdosx) -TARGET_EXAMPLEDIRS_EXAMPLETESTS=1 -endif -ifeq ($(FULL_TARGET),i386-darwin) -TARGET_EXAMPLEDIRS_EXAMPLETESTS=1 -endif -ifeq ($(FULL_TARGET),i386-emx) -TARGET_EXAMPLEDIRS_EXAMPLETESTS=1 -endif -ifeq ($(FULL_TARGET),i386-watcom) -TARGET_EXAMPLEDIRS_EXAMPLETESTS=1 -endif -ifeq ($(FULL_TARGET),i386-netwlibc) -TARGET_EXAMPLEDIRS_EXAMPLETESTS=1 -endif -ifeq ($(FULL_TARGET),i386-wince) -TARGET_EXAMPLEDIRS_EXAMPLETESTS=1 -endif -ifeq ($(FULL_TARGET),i386-embedded) -TARGET_EXAMPLEDIRS_EXAMPLETESTS=1 -endif -ifeq ($(FULL_TARGET),i386-symbian) -TARGET_EXAMPLEDIRS_EXAMPLETESTS=1 -endif -ifeq ($(FULL_TARGET),m68k-linux) -TARGET_EXAMPLEDIRS_EXAMPLETESTS=1 -endif -ifeq ($(FULL_TARGET),m68k-freebsd) -TARGET_EXAMPLEDIRS_EXAMPLETESTS=1 -endif -ifeq ($(FULL_TARGET),m68k-netbsd) -TARGET_EXAMPLEDIRS_EXAMPLETESTS=1 -endif -ifeq ($(FULL_TARGET),m68k-amiga) -TARGET_EXAMPLEDIRS_EXAMPLETESTS=1 -endif -ifeq ($(FULL_TARGET),m68k-atari) -TARGET_EXAMPLEDIRS_EXAMPLETESTS=1 -endif -ifeq ($(FULL_TARGET),m68k-openbsd) -TARGET_EXAMPLEDIRS_EXAMPLETESTS=1 -endif -ifeq ($(FULL_TARGET),m68k-palmos) -TARGET_EXAMPLEDIRS_EXAMPLETESTS=1 -endif -ifeq ($(FULL_TARGET),m68k-embedded) -TARGET_EXAMPLEDIRS_EXAMPLETESTS=1 -endif -ifeq ($(FULL_TARGET),powerpc-linux) -TARGET_EXAMPLEDIRS_EXAMPLETESTS=1 -endif -ifeq ($(FULL_TARGET),powerpc-netbsd) -TARGET_EXAMPLEDIRS_EXAMPLETESTS=1 -endif -ifeq ($(FULL_TARGET),powerpc-amiga) -TARGET_EXAMPLEDIRS_EXAMPLETESTS=1 -endif -ifeq ($(FULL_TARGET),powerpc-macos) -TARGET_EXAMPLEDIRS_EXAMPLETESTS=1 -endif -ifeq ($(FULL_TARGET),powerpc-darwin) -TARGET_EXAMPLEDIRS_EXAMPLETESTS=1 -endif -ifeq ($(FULL_TARGET),powerpc-morphos) -TARGET_EXAMPLEDIRS_EXAMPLETESTS=1 -endif -ifeq ($(FULL_TARGET),powerpc-embedded) -TARGET_EXAMPLEDIRS_EXAMPLETESTS=1 -endif -ifeq ($(FULL_TARGET),sparc-linux) -TARGET_EXAMPLEDIRS_EXAMPLETESTS=1 -endif -ifeq ($(FULL_TARGET),sparc-netbsd) -TARGET_EXAMPLEDIRS_EXAMPLETESTS=1 -endif -ifeq ($(FULL_TARGET),sparc-solaris) -TARGET_EXAMPLEDIRS_EXAMPLETESTS=1 -endif -ifeq ($(FULL_TARGET),sparc-embedded) -TARGET_EXAMPLEDIRS_EXAMPLETESTS=1 -endif -ifeq ($(FULL_TARGET),x86_64-linux) -TARGET_EXAMPLEDIRS_EXAMPLETESTS=1 -endif -ifeq ($(FULL_TARGET),x86_64-freebsd) -TARGET_EXAMPLEDIRS_EXAMPLETESTS=1 -endif -ifeq ($(FULL_TARGET),x86_64-win64) -TARGET_EXAMPLEDIRS_EXAMPLETESTS=1 -endif -ifeq ($(FULL_TARGET),x86_64-embedded) -TARGET_EXAMPLEDIRS_EXAMPLETESTS=1 -endif -ifeq ($(FULL_TARGET),arm-linux) -TARGET_EXAMPLEDIRS_EXAMPLETESTS=1 -endif -ifeq ($(FULL_TARGET),arm-palmos) -TARGET_EXAMPLEDIRS_EXAMPLETESTS=1 -endif -ifeq ($(FULL_TARGET),arm-wince) -TARGET_EXAMPLEDIRS_EXAMPLETESTS=1 -endif -ifeq ($(FULL_TARGET),arm-gba) -TARGET_EXAMPLEDIRS_EXAMPLETESTS=1 -endif -ifeq ($(FULL_TARGET),arm-nds) -TARGET_EXAMPLEDIRS_EXAMPLETESTS=1 -endif -ifeq ($(FULL_TARGET),arm-embedded) -TARGET_EXAMPLEDIRS_EXAMPLETESTS=1 -endif -ifeq ($(FULL_TARGET),arm-symbian) -TARGET_EXAMPLEDIRS_EXAMPLETESTS=1 -endif -ifeq ($(FULL_TARGET),powerpc64-linux) -TARGET_EXAMPLEDIRS_EXAMPLETESTS=1 -endif -ifeq ($(FULL_TARGET),powerpc64-embedded) -TARGET_EXAMPLEDIRS_EXAMPLETESTS=1 -endif -ifdef TARGET_EXAMPLEDIRS_EXAMPLETESTS -exampletests_all: - $(MAKE) -C exampletests all -exampletests_debug: - $(MAKE) -C exampletests debug -exampletests_smart: - $(MAKE) -C exampletests smart -exampletests_release: - $(MAKE) -C exampletests release -exampletests_units: - $(MAKE) -C exampletests units -exampletests_examples: - $(MAKE) -C exampletests examples -exampletests_shared: - $(MAKE) -C exampletests shared -exampletests_install: - $(MAKE) -C exampletests install -exampletests_sourceinstall: - $(MAKE) -C exampletests sourceinstall -exampletests_exampleinstall: - $(MAKE) -C exampletests exampleinstall -exampletests_distinstall: - $(MAKE) -C exampletests distinstall -exampletests_zipinstall: - $(MAKE) -C exampletests zipinstall -exampletests_zipsourceinstall: - $(MAKE) -C exampletests zipsourceinstall -exampletests_zipexampleinstall: - $(MAKE) -C exampletests zipexampleinstall -exampletests_zipdistinstall: - $(MAKE) -C exampletests zipdistinstall -exampletests_clean: - $(MAKE) -C exampletests clean -exampletests_distclean: - $(MAKE) -C exampletests distclean -exampletests_cleanall: - $(MAKE) -C exampletests cleanall -exampletests_info: - $(MAKE) -C exampletests info -exampletests_makefiles: - $(MAKE) -C exampletests makefiles -exampletests: - $(MAKE) -C exampletests all -.PHONY: exampletests_all exampletests_debug exampletests_smart exampletests_release exampletests_units exampletests_examples exampletests_shared exampletests_install exampletests_sourceinstall exampletests_exampleinstall exampletests_distinstall exampletests_zipinstall exampletests_zipsourceinstall exampletests_zipexampleinstall exampletests_zipdistinstall exampletests_clean exampletests_distclean exampletests_cleanall exampletests_info exampletests_makefiles exampletests -endif all: fpc_all debug: fpc_debug smart: fpc_smart release: fpc_release units: fpc_units -examples: fpc_examples +examples: shared: fpc_shared install: fpc_install sourceinstall: fpc_sourceinstall exampleinstall: fpc_exampleinstall -distinstall: -zipinstall: -zipsourceinstall: -zipexampleinstall: -zipdistinstall: -clean: fpc_clean $(addsuffix _clean,$(TARGET_EXAMPLEDIRS)) +distinstall: fpc_distinstall +zipinstall: fpc_zipinstall +zipsourceinstall: fpc_zipsourceinstall +zipexampleinstall: fpc_zipexampleinstall +zipdistinstall: fpc_zipdistinstall +clean: fpc_clean distclean: fpc_distclean cleanall: fpc_cleanall info: fpc_info diff --git a/packages/fcl-fpcunit/src/Makefile.fpc b/packages/fcl-fpcunit/Makefile.fpc index e809083ae5..ce7c548dfb 100644 --- a/packages/fcl-fpcunit/src/Makefile.fpc +++ b/packages/fcl-fpcunit/Makefile.fpc @@ -3,16 +3,20 @@ # [package] -main=fcl +name=fcl-fpcunit +version=2.0.0 [target] units=testregistry testreport testdecorator ubmockobject xmlreporter \ fpcunitreport latextestreport xmltestreport plaintestreport -exampledirs=exampletests +#exampledirs=exampletests + +[require] +packages=fcl-xml [compiler] options=-S2h -targetdir=. +sourcedir=src [install] fpcpackage=y diff --git a/packages/fcl-fpcunit/src/DUnitCompatibleInterface.inc b/packages/fcl-fpcunit/src/DUnitCompatibleInterface.inc new file mode 100644 index 0000000000..6fc47f97ea --- /dev/null +++ b/packages/fcl-fpcunit/src/DUnitCompatibleInterface.inc @@ -0,0 +1,137 @@ +{%MainUnit fpcunit.pp} + +{$IFDEF read_interface} + + class procedure Check(pValue: boolean; pMessage: string = ''); + class procedure CheckEquals(expected, actual: extended; msg: string = ''); overload; + class procedure CheckEquals(expected, actual: string; msg: string = ''); overload; + class procedure CheckEquals(expected, actual: extended; delta: extended; msg: string = ''); overload; + class procedure CheckEquals(expected, actual: integer; msg: string = ''); overload; + class procedure CheckEquals(expected, actual: boolean; msg: string = ''); overload; + class procedure CheckEquals(expected, actual: TClass; msg: string = ''); overload; + class procedure CheckNotEquals(expected, actual: string; msg: string = ''); overload; + class procedure CheckNotEquals(expected, actual: integer; msg: string = ''); overload; virtual; + class procedure CheckNotEquals(expected, actual: boolean; msg: string = ''); overload; virtual; + class procedure CheckNotEquals(expected: extended; actual: extended; delta: extended = 0; msg: string = ''); overload; virtual; + class procedure CheckNull(obj: IUnknown; msg: string = ''); overload; + class procedure CheckNull(obj: TObject; msg: string = ''); overload; + class procedure CheckNotNull(obj: TObject; msg: string = ''); overload; + class procedure CheckIs(obj :TObject; pClass: TClass; msg: string = ''); overload; + class procedure CheckSame(expected, actual: TObject; msg: string = ''); overload; + class procedure FailNotEquals(expected, actual: string; msg: string = ''; errorAddr: Pointer = nil); virtual; + + { + *** TODO *** + procedure CheckEqualsBin(expected, actual: longword; msg: string = ''; digits: integer=32); virtual; + procedure CheckEqualsHex(expected, actual: longword; msg: string = ''; digits: integer=8); virtual; + procedure CheckNotEqualsBin(expected, actual: longword; msg: string = ''; digits: integer=32); virtual; + procedure CheckNotEqualsHex(expected, actual: longword; msg: string = ''; digits: integer=8); virtual; + procedure CheckNotNull(obj :IUnknown; msg :string = ''); overload; virtual; + procedure CheckSame(expected, actual: IUnknown; msg: string = ''); overload; virtual; + procedure CheckException(AMethod: TTestMethod; AExceptionClass: TClass; msg :string = ''); + procedure CheckInherits(expected, actual: TClass; msg: string = ''); overload; virtual; + } + +{$ENDIF read_interface} + + +{$IFDEF read_implementation} + +class procedure TAssert.Check(pValue: boolean; pMessage: string); +begin + AssertTrue(pMessage, pValue); +end; + +class procedure TAssert.CheckEquals(expected, actual: extended; msg: string); +begin + AssertEquals(msg, expected, actual); +end; + +class procedure TAssert.CheckEquals(expected, actual: string; msg: string); +begin + AssertEquals(msg, expected, actual); +end; + +class procedure TAssert.CheckEquals(expected, actual: extended; + delta: extended; msg: string); +begin + AssertEquals(msg, expected, actual, delta); +end; + +class procedure TAssert.CheckEquals(expected, actual: integer; msg: string); +begin + AssertEquals(msg, expected, actual); +end; + +class procedure TAssert.CheckEquals(expected, actual: boolean; msg: string); +begin + AssertEquals(msg, expected, actual); +end; + +class procedure TAssert.CheckEquals(expected, actual: TClass; msg: string); +begin + AssertEquals(msg, expected, actual); +end; + +class procedure TAssert.CheckNotEquals(expected, actual: string; msg: string); +begin + if AnsiCompareStr(Expected, Actual) = 0 then + Fail(msg + ComparisonMsg(Expected, Actual)); +end; + +class procedure TAssert.CheckNotEquals(expected, actual: integer; msg: string); +begin + if (expected = actual) then + Fail(msg + ComparisonMsg(IntToStr(expected), IntToStr(actual))); +end; + +class procedure TAssert.CheckNotEquals(expected, actual: boolean; msg: string); +begin + if (expected = actual) then + Fail(msg + ComparisonMsg(BoolToStr(expected), BoolToStr(actual))); +end; + +class procedure TAssert.CheckNotEquals(expected: extended; actual: extended; + delta: extended; msg: string); +begin + if (abs(expected-actual) <= delta) then + FailNotEquals(FloatToStr(expected), FloatToStr(actual), msg, nil); +end; + +class procedure TAssert.CheckNull(obj: IUnknown; msg: string); +begin + AssertNullIntf(msg, obj); +end; + +class procedure TAssert.CheckNull(obj: TObject; msg: string); +begin + AssertNull(msg, obj); +end; + +class procedure TAssert.CheckNotNull(obj: TObject; msg: string); +begin + AssertNotNull(msg, obj); +end; + +class procedure TAssert.CheckIs(obj: TObject; pClass: TClass; msg: string); +begin + Assert(pClass <> nil); + if obj = nil then + Fail(ComparisonMsg(pClass.ClassName, 'nil')) + else if not obj.ClassType.InheritsFrom(pClass) then + Fail(ComparisonMsg(pClass.ClassName, obj.ClassName)); +end; + +class procedure TAssert.CheckSame(expected, actual: TObject; msg: string); +begin + AssertSame(msg, expected, actual); +end; + +class procedure TAssert.FailNotEquals(expected, actual: string; msg: string; + errorAddr: Pointer); +begin + Fail(msg + ComparisonMsg(Expected, Actual)); +end; + +{$ENDIF read_implementation} + diff --git a/packages/fcl-fpcunit/src/fpcunit.pp b/packages/fcl-fpcunit/src/fpcunit.pp new file mode 100644 index 0000000000..b5f83fe812 --- /dev/null +++ b/packages/fcl-fpcunit/src/fpcunit.pp @@ -0,0 +1,1280 @@ +{ + This file is part of the Free Component Library (FCL) + Copyright (c) 2004 by Dean Zobec, Michael Van Canneyt + + Port to Free Pascal of the JUnit framework. + + See the file COPYING.FPC, included in this distribution, + for details about the copyright. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + + **********************************************************************} +unit fpcunit; + +{$mode objfpc} +{$h+} + +interface +{$IFNDEF MORPHOS} + {$DEFINE SHOWLINEINFO} +{$ENDIF} + +{ Uncomment this define to remove the DUnit compatibility interface. } +{$DEFINE DUnit} + +uses + {$ifdef SHOWLINEINFO} + LineInfo, + {$endif} + SysUtils + ,Classes + ; + + +{ This lets us use a single include file for both the Interface and + Implementation sections. } +{$define read_interface} +{$undef read_implementation} + + +type + + EAssertionFailedError = class(Exception) + constructor Create; overload; + constructor Create(const msg :string); overload; + end; + + + EIgnoredTest = class(EAssertionFailedError); + + + TTestStep = (stSetUp, stRunTest, stTearDown, stNothing); + + + TRunMethod = procedure of object; + + TTestResult = class; + TTestSuite = class; + + {$M+} + TTest = class(TObject) + protected + FLastStep: TTestStep; + function GetTestName: string; virtual; + function GetTestSuiteName: string; virtual; + function GetEnableIgnores: boolean; virtual; + procedure SetTestSuiteName(const aName: string); virtual; abstract; + procedure SetEnableIgnores(Value: boolean); virtual; abstract; + public + function CountTestCases: integer; virtual; + procedure Run(AResult: TTestResult); virtual; + procedure Ignore(const AMessage: string); + published + property TestName: string read GetTestName; + property TestSuiteName: string read GetTestSuiteName write SetTestSuiteName; + property LastStep: TTestStep read FLastStep; + property EnableIgnores: boolean read GetEnableIgnores write SetEnableIgnores; + end; + {$M-} + + + { TAssert } + + TAssert = class(TTest) + public + class procedure Fail(const AMessage: string); + class procedure AssertTrue(const AMessage: string; ACondition: boolean); overload; + class procedure AssertTrue(ACondition: boolean); overload; + class procedure AssertFalse(const AMessage: string; ACondition: boolean); overload; + class procedure AssertFalse(ACondition: boolean); overload; + class procedure AssertEquals(const AMessage: string; Expected, Actual: string); overload; + class procedure AssertEquals(Expected, Actual: string); overload; + class procedure AssertEquals(const AMessage: string; Expected, Actual: integer); overload; + class procedure AssertEquals(Expected, Actual: integer); overload; + class procedure AssertEquals(const AMessage: string; Expected, Actual: int64); overload; + class procedure AssertEquals(Expected, Actual: int64); overload; + class procedure AssertEquals(const AMessage: string; Expected, Actual: currency); overload; + class procedure AssertEquals(Expected, Actual: currency); overload; + class procedure AssertEquals(const AMessage: string; Expected, Actual, Delta: double); overload; + class procedure AssertEquals(Expected, Actual, Delta: double); overload; + class procedure AssertEquals(const AMessage: string; Expected, Actual: boolean); overload; + class procedure AssertEquals(Expected, Actual: boolean); overload; + class procedure AssertEquals(const AMessage: string; Expected, Actual: char); overload; + class procedure AssertEquals(Expected, Actual: char); overload; + class procedure AssertEquals(const AMessage: string; Expected, Actual: TClass); overload; + class procedure AssertEquals(Expected, Actual: TClass); overload; + class procedure AssertSame(const AMessage: string; Expected, Actual: TObject); overload; + class procedure AssertSame(Expected, Actual: TObject); overload; + class procedure AssertSame(const AMessage: string; Expected, Actual: Pointer); overload; + class procedure AssertSame(Expected, Actual: Pointer); overload; + class procedure AssertNotSame(const AMessage: string; Expected, Actual: TObject); overload; + class procedure AssertNotSame(Expected, Actual: TObject); overload; + class procedure AssertNotSame(const AMessage: string; Expected, Actual: Pointer); overload; + class procedure AssertNotSame(Expected, Actual: Pointer); overload; + class procedure AssertNotNull(const AMessage: string; AObject: TObject); overload; + class procedure AssertNotNull(AObject: TObject); overload; + class procedure AssertNotNullIntf(const AMessage: string; AInterface: IInterface); overload; + class procedure AssertNotNullIntf(AInterface: IInterface); overload; + class procedure AssertNotNull(const AMessage: string; APointer: Pointer); overload; + class procedure AssertNotNull(APointer: Pointer); overload; + class procedure AssertNull(const AMessage: string; AObject: TObject); overload; + class procedure AssertNull(AObject: TObject); overload; + class procedure AssertNullIntf(const AMessage: string; AInterface: IInterface); overload; + class procedure AssertNullIntf(AInterface: IInterface); overload; + class procedure AssertNull(const AMessage: string; APointer: Pointer); overload; + class procedure AssertNull(APointer: Pointer); overload; + class procedure AssertNotNull(const AMessage, AString: string); overload; + class procedure AssertNotNull(const AString: string); overload; + class procedure AssertException(const AMessage: string; AExceptionClass: ExceptClass; AMethod: TRunMethod); overload; + class procedure AssertException(AExceptionClass: ExceptClass; AMethod: TRunMethod); overload; + + {$IFDEF DUnit} + {$I DUnitCompatibleInterface.inc} + {$ENDIF DUnit} + end; + + TTestFailure = class(TObject) + private + FTestName: string; + FTestSuiteName: string; + FLineNumber: longint; + FFailedMethodName: string; + FRaisedExceptionClass: TClass; + FRaisedExceptionMessage: string; + FSourceUnitName: string; + FTestLastStep: TTestStep; + function GetAsString: string; + function GetExceptionMessage: string; + function GetIsFailure: boolean; + function GetIsIgnoredTest: boolean; + function GetExceptionClassName: string; + procedure SetTestLastStep(const Value: TTestStep); + public + constructor CreateFailure(ATest: TTest; E: Exception; LastStep: TTestStep); + property ExceptionClass: TClass read FRaisedExceptionClass; + published + property AsString: string read GetAsString; + property IsFailure: boolean read GetIsFailure; + property IsIgnoredTest: boolean read GetIsIgnoredTest; + property ExceptionMessage: string read GetExceptionMessage; + property ExceptionClassName: string read GetExceptionClassName; + property SourceUnitName: string read FSourceUnitName write FSourceUnitName; + property LineNumber: longint read FLineNumber write FLineNumber; + property FailedMethodName: string read FFailedMethodName write FFailedMethodName; + property TestLastStep: TTestStep read FTestLastStep write SetTestLastStep; + end; + + ITestListener = interface + ['{0CE9D3AE-882A-D811-9401-ADEB5E4C7FC1}'] + procedure AddFailure(ATest: TTest; AFailure: TTestFailure); + procedure AddError(ATest: TTest; AError: TTestFailure); + procedure StartTest(ATest: TTest); + procedure EndTest(ATest: TTest); + procedure StartTestSuite(ATestSuite: TTestSuite); + procedure EndTestSuite(ATestSuite: TTestSuite); + end; + + TTestCase = class(TAssert) + private + FName: string; + FTestSuiteName: string; + FEnableIgnores: boolean; + protected + function CreateResult: TTestResult; virtual; + procedure SetUp; virtual; + procedure TearDown; virtual; + procedure RunTest; virtual; + function GetTestName: string; override; + function GetTestSuiteName: string; override; + function GetEnableIgnores: boolean; override; + procedure SetTestSuiteName(const aName: string); override; + procedure SetTestName(const Value: string); virtual; + procedure SetEnableIgnores(Value: boolean); override; + procedure RunBare; virtual; + public + constructor Create; virtual; + constructor CreateWith(const ATestName: string; const ATestSuiteName: string); virtual; + constructor CreateWithName(const AName: string); virtual; + function CountTestCases: integer; override; + function CreateResultAndRun: TTestResult; virtual; + procedure Run(AResult: TTestResult); override; + function AsString: string; + property TestSuiteName: string read GetTestSuiteName write SetTestSuiteName; + published + property TestName: string read GetTestName write SetTestName; + end; + + TTestCaseClass = class of TTestCase; + + TTestSuite = class(TTest) + private + FTests: TFPList; + FName: string; + FTestSuiteName: string; + FEnableIgnores: boolean; + function GetTest(Index: integer): TTest; + protected + function GetTestName: string; override; + function GetTestSuiteName: string; override; + function GetEnableIgnores: boolean; override; + procedure SetTestSuiteName(const aName: string); override; + procedure SetTestName(const Value: string); virtual; + procedure SetEnableIgnores(Value: boolean); override; + public + constructor Create(AClass: TClass; AName: string); reintroduce; overload; virtual; + constructor Create(AClass: TClass); reintroduce; overload; virtual; + constructor Create(AClassArray: Array of TClass); reintroduce; overload; virtual; + constructor Create(AName: string); reintroduce; overload; virtual; + constructor Create; reintroduce; overload; virtual; + destructor Destroy; override; + function CountTestCases: integer; override; + procedure Run(AResult: TTestResult); override; + procedure RunTest(ATest: TTest; AResult: TTestResult); virtual; + procedure AddTest(ATest: TTest); overload; virtual; + procedure AddTestSuiteFromClass(ATestClass: TClass); virtual; + class function Warning(const aMessage: string): TTestCase; + property Test[Index: integer]: TTest read GetTest; default; + property TestSuiteName: string read GetTestSuiteName write SetTestSuiteName; + property TestName: string read GetTestName write SetTestName; + property Tests: TFPList read FTests; + end; + + TProtect = procedure(aTest: TTest; aResult: TTestResult); + + { TTestResult } + + TTestResult = class(TObject) + protected + FRunTests: integer; + FFailures: TFPList; + FIgnoredTests: TFPList; + FErrors: TFPList; + FListeners: TFPList; + FSkippedTests: TFPList; + FStartingTime: TDateTime; + function GetNumErrors: integer; + function GetNumFailures: integer; + function GetNumIgnoredTests: integer; + function GetNumSkipped: integer; + public + constructor Create; virtual; + destructor Destroy; override; + procedure ClearErrorLists; + procedure StartTest(ATest: TTest); + procedure AddFailure(ATest: TTest; E: EAssertionFailedError; aFailureList: TFPList); + procedure AddError(ATest: TTest; E: Exception; AUnitName: string; + AFailedMethodName: string; ALineNumber: longint); + procedure EndTest(ATest: TTest); + procedure AddListener(AListener: ITestListener); + procedure RemoveListener(AListener: ITestListener); + procedure Run(ATestCase: TTestCase); + procedure RunProtected(ATestCase: TTest; protect: TProtect); + function WasSuccessful: boolean; + function SkipTest(ATestCase: TTestCase): boolean; + procedure AddToSkipList(ATestCase: TTestCase); + procedure RemoveFromSkipList(ATestCase: TTestCase); + procedure StartTestSuite(ATestSuite: TTestSuite); + procedure EndTestSuite(ATestSuite: TTestSuite); + published + property Listeners: TFPList read FListeners; + property Failures: TFPList read FFailures; + property IgnoredTests: TFPList read FIgnoredTests; + property Errors: TFPList read FErrors; + property RunTests: integer read FRunTests; + property NumberOfErrors: integer read GetNumErrors; + property NumberOfFailures: integer read GetNumFailures; + property NumberOfIgnoredTests: integer read GetNumIgnoredTests; + property NumberOfSkippedTests: integer read GetNumSkipped; + property StartingTime: TDateTime read FStartingTime; + end; + + function ComparisonMsg(const aExpected: string; const aActual: string): string; + + +Resourcestring + + SCompare = ' expected: <%s> but was: <%s>'; + SExpectedNotSame = 'expected not same'; + SExceptionCompare = 'Exception %s expected but %s was raised'; + SMethodNotFound = 'Method <%s> not found'; + SNoValidInheritance = ' does not inherit from TTestCase'; + SNoValidTests = 'No valid tests found in '; + + +implementation + +uses + testutils; + + +{ This lets us use a single include file for both the Interface and + Implementation sections. } +{$undef read_interface} +{$define read_implementation} + + +type + + TTestWarning = class(TTestCase) + private + FMessage: String; + protected + procedure RunTest; override; + end; + + +procedure TTestWarning.RunTest; +begin + Fail(FMessage); +end; + + +function ComparisonMsg(const aExpected: string; const aActual: string): string; +begin + Result := format(SCompare, [aExpected, aActual]); +end; + + +constructor EAssertionFailedError.Create; +begin + inherited Create(''); +end; + + +constructor EAssertionFailedError.Create(const msg: string); +begin + inherited Create(msg); +end; + + +constructor TTestFailure.CreateFailure(ATest: TTest; E: Exception; LastStep: TTestStep); +begin + inherited Create; + FTestName := ATest.GetTestName; + FTestSuiteName := ATest.GetTestSuiteName; + FRaisedExceptionClass := E.ClassType; + FRaisedExceptionMessage := E.Message; + FTestLastStep := LastStep; +end; + + +function TTestFailure.GetAsString: string; +var + s: string; +begin + if FTestSuiteName <> '' then + s := FTestSuiteName + '.' + else + s := ''; + Result := s + FTestName + ': ' + FRaisedExceptionMessage; +end; + + +function TTestFailure.GetExceptionClassName: string; +begin + Result := FRaisedExceptionClass.ClassName; +end; + + +function TTestFailure.GetExceptionMessage: string; +begin + Result := FRaisedExceptionMessage; + if TestLastStep = stSetUp then + Result := '[SETUP] ' + Result + else if TestLastStep = stTearDown then + Result := '[TEARDOWN] ' + Result; +end; + + +function TTestFailure.GetIsFailure: boolean; +begin + Result := FRaisedExceptionClass.InheritsFrom(EAssertionFailedError); +end; + +function TTestFailure.GetIsIgnoredTest: boolean; +begin + Result := FRaisedExceptionClass.InheritsFrom(EIgnoredTest); +end; + +procedure TTestFailure.SetTestLastStep(const Value: TTestStep); +begin + FTestLastStep := Value; +end; + + +{ TTest} + +function TTest.GetTestName: string; +begin + Result := 'TTest'; +end; + + +function TTest.GetTestSuiteName: string; +begin + Result := 'TTest'; +end; + + +function TTest.CountTestCases: integer; +begin + Result := 0; +end; + +function TTest.GetEnableIgnores: boolean; +begin + Result := True; +end; + +procedure TTest.Run(AResult: TTestResult); +begin + { do nothing } +end; + +procedure TTest.Ignore(const AMessage: String); +begin + if EnableIgnores then raise EIgnoredTest.Create(AMessage); +end; + +{ TAssert } + +class procedure TAssert.Fail(const AMessage: String); +begin + raise EAssertionFailedError.Create(AMessage); +end; + + +class procedure TAssert.AssertTrue(const AMessage: String; ACondition: Boolean); +begin + if (not ACondition) then + Fail(AMessage); +end; + + +class procedure TAssert.AssertTrue(ACondition: Boolean); +begin + AssertTrue('', ACondition); +end; + + +class procedure TAssert.AssertFalse(const AMessage: String; ACondition: Boolean); +begin + AssertTrue(AMessage, not ACondition); +end; + + +class procedure TAssert.AssertFalse(ACondition: Boolean); +begin + AssertFalse('', ACondition); +end; + + +class procedure TAssert.AssertEquals(const AMessage: string; Expected, Actual: string); +begin + AssertTrue(AMessage + ComparisonMsg(Expected, Actual), AnsiCompareStr(Expected, Actual) = 0); +end; + + +class procedure TAssert.AssertEquals(Expected, Actual: string); +begin + AssertEquals('', Expected, Actual); +end; + + +class procedure TAssert.AssertNotNull(const AString: string); +begin + AssertNotNull('', AString); +end; + + +class procedure TAssert.AssertEquals(const AMessage: string; Expected, Actual: integer); +begin + AssertTrue(AMessage + ComparisonMsg(IntToStr(Expected), IntToStr(Actual)), Expected = Actual); +end; + + +class procedure TAssert.AssertEquals(Expected, Actual: integer); +begin + AssertEquals('', Expected, Actual); +end; + + +class procedure TAssert.AssertEquals(const AMessage: string; Expected, Actual: int64); +begin + AssertTrue(AMessage + ComparisonMsg(IntToStr(Expected), IntToStr(Actual)), Expected = Actual); +end; + + +class procedure TAssert.AssertEquals(Expected, Actual: int64); +begin + AssertEquals('', Expected, Actual); +end; + + +class procedure TAssert.AssertEquals(const AMessage: string; Expected, Actual: currency); +begin + AssertTrue(AMessage + ComparisonMsg(FloatToStr(Expected), FloatToStr(Actual)), Expected = Actual); +end; + + +class procedure TAssert.AssertEquals(Expected, Actual: currency); +begin + AssertEquals('', Expected, Actual); +end; + + +class procedure TAssert.AssertEquals(const AMessage: string; Expected, Actual, Delta: double); +begin + AssertTrue(AMessage + ComparisonMsg(FloatToStr(Expected),FloatToStr(Actual)), + (Abs(Expected - Actual) <= Delta)); +end; + + +class procedure TAssert.AssertEquals(Expected, Actual, Delta: double); +begin + AssertEquals('', Expected, Actual, Delta); +end; + + +class procedure TAssert.AssertNotNull(const AMessage, AString: string); +begin + AssertTrue(AMessage, AString <> ''); +end; + + +class procedure TAssert.AssertEquals(const AMessage: string; Expected, Actual: boolean); +begin + AssertTrue(AMessage + ComparisonMsg(BoolToStr(Expected, true), BoolToStr(Actual, true)), Expected = Actual); +end; + + +class procedure TAssert.AssertEquals(Expected, Actual: boolean); +begin + AssertEquals('', Expected, Actual); +end; + + +class procedure TAssert.AssertEquals(const AMessage: string; Expected, Actual: char); +begin + AssertTrue(AMessage + ComparisonMsg(Expected, Actual), Expected = Actual); +end; + + +class procedure TAssert.AssertEquals(Expected, Actual: char); +begin + AssertEquals('', Expected, Actual); +end; + + +class procedure TAssert.AssertEquals(const AMessage: string; Expected, Actual: TClass); +begin + AssertTrue(AMessage + ComparisonMsg(Expected.ClassName, Actual.ClassName), Expected = Actual); +end; + + +class procedure TAssert.AssertEquals(Expected, Actual: TClass); +begin + AssertEquals('', Expected, Actual); +end; + + +class procedure TAssert.AssertSame(const AMessage: string; Expected, Actual: TObject); +begin + AssertTrue(AMessage + ComparisonMsg(IntToStr(PtrInt(Expected)), IntToStr(PtrInt(Actual))), + Expected = Actual); +end; + + +class procedure TAssert.AssertSame(Expected, Actual: TObject); +begin + AssertSame('', Expected, Actual); +end; + + +class procedure TAssert.AssertSame(const AMessage: string; Expected, Actual: Pointer); +begin + AssertTrue(AMessage + ComparisonMsg(IntToStr(PtrInt(Expected)), IntToStr(PtrInt(Actual))), + Expected = Actual); +end; + + +class procedure TAssert.AssertSame(Expected, Actual: Pointer); +begin + AssertSame('', Expected, Actual); +end; + + +class procedure TAssert.AssertNotSame(const AMessage: string; Expected, Actual: TObject); +begin + AssertFalse(SExpectedNotSame, Expected = Actual); +end; + + +class procedure TAssert.AssertNotSame(Expected, Actual: TObject); +begin + AssertNotSame('', Expected, Actual); +end; + + +class procedure TAssert.AssertNotSame(const AMessage: string; Expected, Actual: Pointer); +begin + AssertFalse(SExpectedNotSame, Expected = Actual); +end; + + +class procedure TAssert.AssertNotSame(Expected, Actual: Pointer); +begin + AssertNotSame('', Expected, Actual); +end; + + +class procedure TAssert.AssertNotNull(const AMessage: string; AObject: TObject); +begin + AssertTrue(AMessage, (AObject <> nil)); +end; + + +class procedure TAssert.AssertNotNull(AObject: TObject); +begin + AssertNotNull('', AObject); +end; + + +class procedure TAssert.AssertNotNullIntf(const AMessage: string; AInterface: IInterface); +begin + AssertTrue(AMessage, (AInterface <> nil)); +end; + + +class procedure TAssert.AssertNotNullIntf(AInterface: IInterface); +begin + AssertNotNull('', AInterface); +end; + + +class procedure TAssert.AssertNotNull(const AMessage: string; APointer: Pointer); +begin + AssertTrue(AMessage, (APointer <> nil)); +end; + + +class procedure TAssert.AssertNotNull(APointer: Pointer); +begin + AssertNotNull('', APointer); +end; + + +class procedure TAssert.AssertNull(const AMessage: string; AObject: TObject); +begin + AssertTrue(AMessage, (AObject = nil)); +end; + + +class procedure TAssert.AssertNull(AObject: TObject); +begin + AssertNull('', AObject); +end; + + +class procedure TAssert.AssertNullIntf(const AMessage: string; AInterface: IInterface); +begin + AssertTrue(AMessage, (AInterface = nil)); +end; + + +class procedure TAssert.AssertNullINtf(AInterface: IInterface); +begin + AssertNull('', AInterface); +end; + + +class procedure TAssert.AssertNull(const AMessage: string; APointer: Pointer); +begin + AssertTrue(AMessage, (APointer = nil)); +end; + + +class procedure TAssert.AssertNull(APointer: Pointer); +begin + AssertNull('', APointer); +end; + + +class procedure TAssert.AssertException(const AMessage: string; AExceptionClass: ExceptClass; + AMethod: TRunMethod); +var + Passed : Boolean; + ExceptionName: string; +begin + Passed := False; + try + AMethod; + except + on E: Exception do + begin + ExceptionName := E.ClassName; + if E.ClassType.InheritsFrom(AExceptionClass) then + begin + Passed := AExceptionClass.ClassName = E.ClassName; + end; + end; + end; + AssertTrue(Format(SExceptionCompare, [AExceptionClass.ClassName, ExceptionName])+ ': ' + AMessage, Passed); +end; + + +class procedure TAssert.AssertException(AExceptionClass: ExceptClass; + AMethod: TRunMethod); +begin + AssertException('', AExceptionClass, AMethod); +end; + + +{ DUnit compatibility interface } +{$IFDEF DUnit} + {$I DUnitCompatibleInterface.inc} +{$ENDIF DUnit} + + +constructor TTestCase.Create; +begin + inherited Create; + FEnableIgnores := True; +end; + + +constructor TTestCase.CreateWithName(const AName: string); +begin + Create; + FName := AName; +end; + + +constructor TTestCase.CreateWith(const ATestName: string; const ATestSuiteName: string); +begin + Create; + FName := ATestName; + FTestSuiteName := ATestSuiteName; +end; + + +function TTestCase.AsString: string; +begin + Result := TestName + '(' + ClassName + ')'; +end; + + +function TTestCase.CountTestCases: integer; +begin + Result := 1; +end; + + +function TTestCase.CreateResult: TTestResult; +begin + Result := TTestResult.Create; +end; + + +function TTestCase.GetTestName: string; +begin + Result := FName; +end; + + +function TTestCase.GetEnableIgnores: boolean; +begin + Result := FEnableIgnores; +end; + + +function TTestCase.GetTestSuiteName: string; +begin + Result := FTestSuiteName; +end; + + +procedure TTestCase.SetTestSuiteName(const aName: string); +begin + if FTestSuiteName <> aName then + FTestSuiteName := aName; +end; + + +procedure TTestCase.SetTestName(const Value: string); +begin + FName := Value; +end; + + +procedure TTestCase.SetEnableIgnores(Value: boolean); +begin + FEnableIgnores := Value; +end; + + +function TTestCase.CreateResultAndRun: TTestResult; +begin + Result := CreateResult; + Run(Result); +end; + + +procedure TTestCase.Run(AResult: TTestResult); +begin + (AResult).Run(Self); +end; + + +procedure TTestCase.RunBare; +begin + FLastStep := stSetUp; + SetUp; + try + FLastStep := stRunTest; + RunTest; + FLastStep := stTearDown; + finally + TearDown; + end; + FLastStep := stNothing; +end; + + +procedure TTestCase.RunTest; +var + m: TMethod; + RunMethod: TRunMethod; + pMethod : Pointer; +begin + AssertNotNull('name of the test not assigned', FName); + pMethod := Self.MethodAddress(FName); + if (Assigned(pMethod)) then + begin + m.Code := pMethod; + m.Data := self; + RunMethod := TRunMethod(m); + RunMethod; + end + else + begin + Fail(format(SMethodNotFound, [FName])); + end; +end; + + +procedure TTestCase.SetUp; +begin + { do nothing } +end; + + +procedure TTestCase.TearDown; +begin + { do nothing } +end; + + +constructor TTestSuite.Create(AClass: TClass; AName: string); +begin + Create(AClass); + FName := AName; +end; + + +constructor TTestSuite.Create(AClass: TClass); +var + ml: TStringList; + i: integer; + tc: TTestCaseClass; +begin + Create(AClass.ClassName); + if AClass.InheritsFrom(TTestCase) then + begin + tc := TTestCaseClass(AClass); + ml := TStringList.Create; + try + GetMethodList(AClass, ml); + for i := 0 to ml.Count -1 do + begin + AddTest(tc.CreateWith(ml.Strings[i], tc.ClassName)); + end; + finally + ml.Free; + end; + end + else + AddTest(Warning(AClass.ClassName + SNoValidInheritance)); + if FTests.Count = 0 then + AddTest(Warning(SNoValidTests + AClass.ClassName)); +end; + + +constructor TTestSuite.Create(AClassArray: Array of TClass); +var + i: integer; +begin + Create; + for i := Low(AClassArray) to High(AClassArray) do + if Assigned(AClassArray[i]) then + AddTest(TTestSuite.Create(AClassArray[i])); +end; + + +constructor TTestSuite.Create(AName: string); +begin + Create(); + FName := AName; +end; + + +constructor TTestSuite.Create; +begin + inherited Create; + FTests := TFPList.Create; + FEnableIgnores := True; +end; + + +destructor TTestSuite.Destroy; +begin + FreeObjects(FTests); + FTests.Free; + inherited Destroy; +end; + + +function TTestSuite.GetTest(Index: integer): TTest; +begin + Result := TTest(FTests[Index]); +end; + + +function TTestSuite.GetTestName: string; +begin + Result := FName; +end; + + +function TTestSuite.GetTestSuiteName: string; +begin + Result := FTestSuiteName; +end; + + +function TTestSuite.GetEnableIgnores: boolean; +begin + Result := FEnableIgnores; +end; + + +procedure TTestSuite.SetTestName(const Value: string); +begin + FName := Value; +end; + + +procedure TTestSuite.SetTestSuiteName(const aName: string); +begin + if FTestSuiteName <> aName then + FTestSuiteName := aName; +end; + + +procedure TTestSuite.SetEnableIgnores(Value: boolean); +var + i: integer; +begin + if FEnableIgnores <> Value then + begin + FEnableIgnores := Value; + for i := 0 to FTests.Count - 1 do + TTest(FTests[i]).EnableIgnores := Value; + end +end; + +function TTestSuite.CountTestCases: integer; +var + i: integer; +begin + Result := 0; + for i := 0 to FTests.Count - 1 do + begin + Result := Result + TTest(FTests[i]).CountTestCases; + end; +end; + + +procedure TTestSuite.Run(AResult: TTestResult); +var + i: integer; +begin + if FTests.Count > 0 then + AResult.StartTestSuite(self); + + for i := 0 to FTests.Count - 1 do + RunTest(TTest(FTests[i]), AResult); + + if FTests.Count > 0 then + AResult.EndTestSuite(self); +end; + + +procedure TTestSuite.RunTest(ATest: TTest; AResult: TTestResult); +begin + ATest.Run(AResult); +end; + + +procedure TTestSuite.AddTest(ATest: TTest); +begin + FTests.Add(ATest); + if ATest.TestSuiteName = '' then + ATest.TestSuiteName := Self.TestName; +end; + + +procedure TTestSuite.AddTestSuiteFromClass(ATestClass: TClass); +begin + AddTest(TTestSuite.Create(ATestClass)); +end; + + +class function TTestSuite.Warning(const aMessage: string): TTestCase; +var + w: TTestWarning; +begin + w := TTestWarning.Create; + w.FMessage := aMessage; + Result := w; +end; + + +constructor TTestResult.Create; +begin + inherited Create; + FFailures := TFPList.Create; + FIgnoredTests := TFPList.Create; + FErrors := TFPList.Create; + FListeners := TFPList.Create; + FSkippedTests := TFPList.Create; + FStartingTime := Now; +end; + + +destructor TTestResult.Destroy; +begin + FreeObjects(FFailures); + FFailures.Free; + FreeObjects(FIgnoredTests); + FIgnoredTests.Free; + FreeObjects(FErrors); + FErrors.Free; + FListeners.Free; + FSkippedTests.Free; +end; + + +procedure TTestResult.ClearErrorLists; +begin + FreeObjects(FFailures); + FFailures.Clear; + FreeObjects(FIgnoredTests); + FIgnoredTests.Clear; + FreeObjects(FErrors); + FErrors.Clear; +end; + + +function TTestResult.GetNumErrors: integer; +begin + Result := FErrors.Count; +end; + + +function TTestResult.GetNumFailures: integer; +begin + Result := FFailures.Count; +end; + +function TTestResult.GetNumIgnoredTests: integer; +begin + Result := FIgnoredTests.Count; +end; + +function TTestResult.GetNumSkipped: integer; +begin + Result := FSkippedTests.Count; +end; + + +procedure TTestResult.AddListener(AListener: ITestListener); +begin + FListeners.Add(pointer(AListener)); +end; + + +procedure TTestResult.RemoveListener(AListener: ITestListener); +begin + FListeners.Remove(pointer(AListener)); +end; + + +procedure TTestResult.AddFailure(ATest: TTest; E: EAssertionFailedError; aFailureList: TFPList); +var + i: integer; + f: TTestFailure; +begin + //lock mutex + f := TTestFailure.CreateFailure(ATest, E, ATest.LastStep); + aFailureList.Add(f); + for i := 0 to FListeners.Count - 1 do + ITestListener(FListeners[i]).AddFailure(ATest, f); + //unlock mutex +end; + + +procedure TTestResult.AddError(ATest: TTest; E: Exception; + AUnitName: string; AFailedMethodName: string; ALineNumber: longint); +var + i: integer; + f: TTestFailure; +begin + //lock mutex + f := TTestFailure.CreateFailure(ATest, E, ATest.LastStep); + f.SourceUnitName := AUnitName; + f.FailedMethodName := AFailedMethodName; + f.LineNumber := ALineNumber; + FErrors.Add(f); + for i := 0 to FListeners.Count - 1 do + ITestListener(FListeners[i]).AddError(ATest, f); + //unlock mutex +end; + + +procedure TTestResult.EndTest(ATest: TTest); +var + i: integer; +begin + for i := 0 to FListeners.Count - 1 do + ITestListener(FListeners[i]).EndTest(ATest); +end; + + +procedure ProtectTest(aTest: TTest; aResult: TTestResult); +begin + TTestCase(aTest).RunBare; +end; + + +procedure TTestResult.Run(ATestCase: TTestCase); +begin + if not SkipTest(ATestCase) then + begin + StartTest(ATestCase); + RunProtected(ATestCase, @ProtectTest); + EndTest(ATestCase); + end; +end; + + +procedure TTestResult.RunProtected(ATestCase: TTest; protect: TProtect); +var + func, source: shortstring; + line: longint; +begin + func := ''; + source := ''; + line := 0; + try + protect(ATestCase, Self); + except + on E: EIgnoredTest do + AddFailure(ATestCase, E, FIgnoredTests); + on E: EAssertionFailedError do + AddFailure(ATestCase, E, FFailures); + on E: Exception do + begin + {$ifdef SHOWLINEINFO} + GetLineInfo(LongWord(ExceptAddr), func, source, line); + {$endif} + AddError(ATestCase, E, source, func, line); + end; + end; +end; + + +procedure TTestResult.StartTest(ATest: TTest); +var + count: integer; + i: integer; +begin + count := ATest.CountTestCases; + //lock mutex + FRunTests := FRunTests + count; + for i := 0 to FListeners.Count - 1 do + ITestListener(FListeners[i]).StartTest(ATest); + //unlock mutex +end; + + +function TTestResult.WasSuccessful: boolean; +begin +//lock mutex + Result := (FErrors.Count = 0) and (FFailures.Count = 0); +//unlock mutex +end; + +function TTestResult.SkipTest(ATestCase: TTestCase): Boolean; +var + i: integer; +begin + Result := false; + if FSkippedTests.Count = 0 then + begin + result := false; + Exit; + end + else + for i := 0 to FSkippedTests.Count - 1 do + begin + if PtrInt(FSkippedTests[i]) = PtrInt(ATestCase) then + begin + Result := true; + Exit; + end; + end; +end; + + +procedure TTestResult.AddToSkipList(ATestCase: TTestCase); +begin + FSkippedTests.Add(ATestCase); +end; + +procedure TTestResult.RemoveFromSkipList(ATestCase: TTestCase); +begin + FSkippedTests.Remove(ATestCase); +end; + +procedure TTestResult.StartTestSuite(ATestSuite: TTestSuite); +var + i: integer; +begin + for i := 0 to FListeners.Count - 1 do + ITestListener(FListeners[i]).StartTestSuite(ATestSuite); +end; + +procedure TTestResult.EndTestSuite(ATestSuite: TTestSuite); +var + i: integer; +begin + for i := 0 to FListeners.Count - 1 do + ITestListener(FListeners[i]).EndTestSuite(ATestSuite); +end; + +end. + diff --git a/packages/fcl-fpcunit/src/testutils.pp b/packages/fcl-fpcunit/src/testutils.pp new file mode 100644 index 0000000000..f331faa5c1 --- /dev/null +++ b/packages/fcl-fpcunit/src/testutils.pp @@ -0,0 +1,113 @@ +{$mode objfpc} +{$h+} +{ + This file is part of the Free Component Library (FCL) + Copyright (c) 2004 by Dean Zobec + + Port to Free Pascal of the JUnit framework. + + See the file COPYING.FPC, included in this distribution, + for details about the copyright. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + + **********************************************************************} +unit testutils; + +interface + +uses + Classes, SysUtils; + +type + {$M+} + TNoRefCountObject = class(TObject, IInterface) + protected + { IInterface } + function QueryInterface(const IID: TGUID; out Obj): HResult; virtual; stdcall; + function _AddRef: Integer; stdcall; + function _Release: Integer; stdcall; + end; + {$M-} + +procedure FreeObjects(List: TFPList); +procedure GetMethodList( AObject: TObject; AList: TStrings ); overload; +procedure GetMethodList( AClass: TClass; AList: TStrings ); overload; + +implementation + +function TNoRefCountObject.QueryInterface(const IID: TGUID; out Obj): HResult; stdcall; +begin + if GetInterface(IID, Obj) then Result := 0 + else Result := HRESULT($80004002); +end; + +function TNoRefCountObject._AddRef: Integer;stdcall; +begin + Result := -1; +end; + +function TNoRefCountObject._Release: Integer;stdcall; +begin + Result := -1; +end; + +// been to the dentist and suffered a lot +// Hack Alert! see objpas.inc +// Get a list of published methods for a given class or object +procedure GetMethodList( AObject: TObject; AList: TStrings ); +begin + GetMethodList( AObject.ClassType, AList ); +end; + +procedure GetMethodList(AClass: TClass; AList: TStrings); +type + TMethodNameRec = packed record + name : pshortstring; + addr : pointer; + end; + + TMethodNameTable = packed record + count : dword; + entries : packed array[0..0] of TMethodNameRec; + end; + + pMethodNameTable = ^TMethodNameTable; + +var + methodTable : pMethodNameTable; + i : dword; + vmt: TClass; + idx: integer; +begin + AList.Clear; + vmt := aClass; + while assigned(vmt) do + begin + methodTable := pMethodNameTable((Pointer(vmt) + vmtMethodTable)^); + if assigned(MethodTable) then + begin + for i := 0 to MethodTable^.count - 1 do + begin + idx := aList.IndexOf(MethodTable^.entries[i].name^); + if (idx <> - 1) then + //found overridden method so delete it + aList.Delete(idx); + aList.AddObject(MethodTable^.entries[i].name^, TObject(MethodTable^.entries[i].addr)); + end; + end; + vmt := pClass(pointer(vmt) + vmtParent)^; + end; +end; + +procedure FreeObjects(List: TFPList); +var + i: integer; +begin + for i:= 0 to List.Count - 1 do + TObject(List.Items[i]).Free; +end; + +end. |
