summaryrefslogtreecommitdiffstats
path: root/kunittest/module.h
diff options
context:
space:
mode:
authortoma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2009-11-25 17:56:58 +0000
committertoma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2009-11-25 17:56:58 +0000
commitce4a32fe52ef09d8f5ff1dd22c001110902b60a2 (patch)
tree5ac38a06f3dde268dc7927dc155896926aaf7012 /kunittest/module.h
downloadtdelibs-ce4a32fe52ef09d8f5ff1dd22c001110902b60a2.tar.gz
tdelibs-ce4a32fe52ef09d8f5ff1dd22c001110902b60a2.zip
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923 git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdelibs@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kunittest/module.h')
-rw-r--r--kunittest/module.h120
1 files changed, 120 insertions, 0 deletions
diff --git a/kunittest/module.h b/kunittest/module.h
new file mode 100644
index 000000000..e33887101
--- /dev/null
+++ b/kunittest/module.h
@@ -0,0 +1,120 @@
+/*
+ * Copyright (C) 2005 Jeroen Wijnhout <Jeroen.Wijnhout@kdemail.net>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*!
+ * @file module.h
+ * Provides macros to ease building unit tests as shared libraries
+ */
+
+#ifndef KUNITTEST_MODULE_H
+#define KUNITTEST_MODULE_H
+
+#include <qstring.h>
+
+#include <klibloader.h>
+#include <kunittest/runner.h>
+
+namespace KUnitTest
+{
+ /*! @def KUNITTEST_MODULE(library,suite)
+ * Use this macro if you are creating a KUnitTest module named library.
+ * This macro creates a module-class named a factory class. The module
+ * will appear under the name suite in the test runner.
+ * There is no need in calling the K_EXPORT_COMPONENT_FACTORY macro,
+ * this is taken care of automatically.
+ *
+ * @code KUNITTEST_MODULE(kunittest_samplemodule,"TestSuite") @endcode
+ */
+ #define KUNITTEST_MODULE(library,suite) \
+ static const QString s_kunittest_suite = QString::fromLatin1(suite); \
+ class library##Module : public QObject \
+ { \
+ public: \
+ library##Module() \
+ { \
+ KUnitTest::RegistryIteratorType it(s_registry); \
+ for( ; it.current(); ++it ) \
+ KUnitTest::Runner::registerTester(it.currentKey(), it.current()); \
+ } \
+ \
+ static KUnitTest::RegistryType s_registry; \
+ }; \
+ \
+ KUnitTest::RegistryType library##Module::s_registry; \
+ \
+ void kunittest_registerModuleTester(const char *name, KUnitTest::Tester *test) \
+ { \
+ library##Module::s_registry.insert(name, test); \
+ } \
+ \
+ class module##Factory : public KLibFactory \
+ { \
+ public: \
+ QObject *createObject (QObject *, const char *, const char *, const QStringList &) \
+ { \
+ return new library##Module(); \
+ }; \
+ }; \
+ \
+ K_EXPORT_COMPONENT_FACTORY( library, module##Factory )
+
+ /*! @def KUNITTEST_MODULE_REGISTER_TESTER(tester)
+ * Use this macro to add a tester class to your module. The name of the tester will
+ * be identical to the class name.
+ *
+ * @code KUNITTEST_MODULE_REGISTER_TESTER(SimpleSampleTester) @endcode
+ */
+ #define KUNITTEST_MODULE_REGISTER_TESTER( tester) \
+ static class tester##ModuleAutoregister \
+ { \
+ public: \
+ tester##ModuleAutoregister() \
+ { \
+ KUnitTest::Tester *test = new tester(); \
+ QString name = s_kunittest_suite + QString::fromLatin1("::") + QString::fromLocal8Bit(#tester); \
+ test->setName(name.local8Bit()); \
+ kunittest_registerModuleTester(name.local8Bit(), test ); \
+ } \
+ } tester##ModuleAutoregisterInstance;
+
+ /*! @def KUNITTEST_MODULE_REGISTER_NAMEDTESTER(name,tester)
+ * Use this macro to add a tester class, with specified name, to your module..
+ *
+ * @code KUNITTEST_MODULE_REGISTER_TESTER("SubSuite::PrettyName",SimpleSampleTester) @endcode
+ */
+ #define KUNITTEST_MODULE_REGISTER_NAMEDTESTER( name , tester) \
+ static class tester##ModuleAutoregister \
+ { \
+ public: \
+ tester##ModuleAutoregister() \
+ { \
+ QString fullName = s_kunittest_suite + QString("::") + QString::fromLocal8Bit(name); \
+ KUnitTest::Tester *test = new tester(fullName.local8Bit()); \
+ kunittest_registerModuleTester(fullName.local8Bit(), test); \
+ } \
+ } tester##ModuleAutoregisterInstance;
+}
+
+#endif