summaryrefslogtreecommitdiff
path: root/packages/fcl-fpcunit
diff options
context:
space:
mode:
authorpeter <peter@3ad0048d-3df7-0310-abae-a5850022a9f2>2007-02-25 22:19:19 +0000
committerpeter <peter@3ad0048d-3df7-0310-abae-a5850022a9f2>2007-02-25 22:19:19 +0000
commit64a44e93576039e4059a3cdd23a047bbb369644b (patch)
tree50d7ce3ab38d1933534d03c81b98649e2c8652db /packages/fcl-fpcunit
parent0e00ae40b17c7b8cda0df9ebb776e8dda2dbdff7 (diff)
downloadfpc-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.inc137
-rw-r--r--packages/fcl-fpcunit/src/fpcunit.pp1280
-rw-r--r--packages/fcl-fpcunit/src/testutils.pp113
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.