diff options
author | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
---|---|---|
committer | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
commit | ce4a32fe52ef09d8f5ff1dd22c001110902b60a2 (patch) | |
tree | 5ac38a06f3dde268dc7927dc155896926aaf7012 /kunittest/module.h | |
download | tdelibs-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.h | 120 |
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 |