qtestcase.h
上传用户:detong
上传日期:2022-06-22
资源大小:20675k
文件大小:12k
源码类别:

系统编程

开发平台:

Unix_Linux

  1. /****************************************************************************
  2. **
  3. ** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies).
  4. ** Contact: Qt Software Information (qt-info@nokia.com)
  5. **
  6. ** This file is part of the QtTest module of the Qt Toolkit.
  7. **
  8. ** Commercial Usage
  9. ** Licensees holding valid Qt Commercial licenses may use this file in
  10. ** accordance with the Qt Commercial License Agreement provided with the
  11. ** Software or, alternatively, in accordance with the terms contained in
  12. ** a written agreement between you and Nokia.
  13. **
  14. **
  15. ** GNU General Public License Usage
  16. ** Alternatively, this file may be used under the terms of the GNU
  17. ** General Public License versions 2.0 or 3.0 as published by the Free
  18. ** Software Foundation and appearing in the file LICENSE.GPL included in
  19. ** the packaging of this file.  Please review the following information
  20. ** to ensure GNU General Public Licensing requirements will be met:
  21. ** http://www.fsf.org/licensing/licenses/info/GPLv2.html and
  22. ** http://www.gnu.org/copyleft/gpl.html.  In addition, as a special
  23. ** exception, Nokia gives you certain additional rights. These rights
  24. ** are described in the Nokia Qt GPL Exception version 1.3, included in
  25. ** the file GPL_EXCEPTION.txt in this package.
  26. **
  27. ** Qt for Windows(R) Licensees
  28. ** As a special exception, Nokia, as the sole copyright holder for Qt
  29. ** Designer, grants users of the Qt/Eclipse Integration plug-in the
  30. ** right for the Qt/Eclipse Integration to link to functionality
  31. ** provided by Qt Designer and its related libraries.
  32. **
  33. ** If you are unsure which license is appropriate for your use, please
  34. ** contact the sales department at qt-sales@nokia.com.
  35. **
  36. ****************************************************************************/
  37. #ifndef QTESTCASE_H
  38. #define QTESTCASE_H
  39. #include <QtTest/qtest_global.h>
  40. #include <QtCore/qnamespace.h>
  41. #include <QtCore/qmetatype.h>
  42. QT_BEGIN_HEADER
  43. QT_BEGIN_NAMESPACE
  44. QT_MODULE(Test)
  45. #define QVERIFY(statement) 
  46. do {
  47.     if (!QTest::qVerify((statement), #statement, "", __FILE__, __LINE__))
  48.         return;
  49. } while (0)
  50. #define QFAIL(message) 
  51. do {
  52.     QTest::qFail(message, __FILE__, __LINE__);
  53.     return;
  54. } while (0)
  55. #define QVERIFY2(statement, description) 
  56. do {
  57.     if (statement) {
  58.         if (!QTest::qVerify(true, #statement, (description), __FILE__, __LINE__))
  59.             return;
  60.     } else {
  61.         if (!QTest::qVerify(false, #statement, (description), __FILE__, __LINE__))
  62.             return;
  63.     }
  64. } while (0)
  65. #define QCOMPARE(actual, expected) 
  66. do {
  67.     if (!QTest::qCompare(actual, expected, #actual, #expected, __FILE__, __LINE__))
  68.         return;
  69. } while (0)
  70. #define QSKIP(statement, mode) 
  71. do {
  72.     QTest::qSkip(statement, QTest::mode, __FILE__, __LINE__);
  73.     return;
  74. } while (0)
  75. #define QEXPECT_FAIL(dataIndex, comment, mode)
  76. do {
  77.     if (!QTest::qExpectFail(dataIndex, comment, QTest::mode, __FILE__, __LINE__))
  78.         return;
  79. } while (0)
  80. #define QFETCH(type, name)
  81.     type name = *static_cast<type *>(QTest::qData(#name, ::qMetaTypeId<type >()))
  82. #define QFETCH_GLOBAL(type, name)
  83.     type name = *static_cast<type *>(QTest::qGlobalData(#name, ::qMetaTypeId<type >()))
  84. #define DEPENDS_ON(funcName)
  85. #define QTEST(actual, testElement)
  86. do {
  87.     if (!QTest::qTest(actual, testElement, #actual, #testElement, __FILE__, __LINE__))
  88.         return;
  89. } while (0)
  90. #define QWARN(msg)
  91.     QTest::qWarn(msg)
  92. class QObject;
  93. class QTestData;
  94. #define QTEST_COMPARE_DECL(KLASS)
  95.     template<> Q_TESTLIB_EXPORT char *toString<KLASS >(const KLASS &);
  96. namespace QTest
  97. {
  98.     template <typename T>
  99.     inline char *toString(const T &)
  100.     {
  101.         return 0;
  102.     }
  103.     Q_TESTLIB_EXPORT char *toHexRepresentation(const char *ba, int length);
  104.     Q_TESTLIB_EXPORT char *toString(const char *);
  105.     Q_TESTLIB_EXPORT char *toString(const void *);
  106.     Q_TESTLIB_EXPORT int qExec(QObject *testObject, int argc = 0, char **argv = 0);
  107.     Q_TESTLIB_EXPORT int qExec(QObject *testObject, const QStringList &arguments);
  108.     Q_TESTLIB_EXPORT bool qVerify(bool statement, const char *statementStr, const char *description,
  109.                                  const char *file, int line);
  110.     Q_TESTLIB_EXPORT void qFail(const char *statementStr, const char *file, int line);
  111.     Q_TESTLIB_EXPORT void qSkip(const char *message, SkipMode mode, const char *file, int line);
  112.     Q_TESTLIB_EXPORT bool qExpectFail(const char *dataIndex, const char *comment, TestFailMode mode,
  113.                            const char *file, int line);
  114.     Q_TESTLIB_EXPORT void qWarn(const char *message);
  115.     Q_TESTLIB_EXPORT void ignoreMessage(QtMsgType type, const char *message);
  116.     Q_TESTLIB_EXPORT void *qData(const char *tagName, int typeId);
  117.     Q_TESTLIB_EXPORT void *qGlobalData(const char *tagName, int typeId);
  118.     Q_TESTLIB_EXPORT void *qElementData(const char *elementName, int metaTypeId);
  119.     Q_TESTLIB_EXPORT QObject *testObject();
  120.     Q_TESTLIB_EXPORT const char *currentTestFunction();
  121.     Q_TESTLIB_EXPORT const char *currentDataTag();
  122.     Q_TESTLIB_EXPORT bool currentTestFailed();
  123.     Q_TESTLIB_EXPORT Qt::Key asciiToKey(char ascii);
  124.     Q_TESTLIB_EXPORT char keyToAscii(Qt::Key key);
  125.     Q_TESTLIB_EXPORT bool compare_helper(bool success, const char *msg, const char *file,
  126.                                           int line);
  127.     Q_TESTLIB_EXPORT bool compare_helper(bool success, const char *msg, char *val1, char *val2,
  128.                                          const char *expected, const char *actual,
  129.                                          const char *file, int line);
  130.     Q_TESTLIB_EXPORT void qSleep(int ms);
  131.     Q_TESTLIB_EXPORT void addColumnInternal(int id, const char *name);
  132.     template <typename T>
  133.     inline void addColumn(const char *name, T * = 0)
  134.     {
  135.         addColumnInternal(qMetaTypeId<T>(), name);
  136.     }
  137.     Q_TESTLIB_EXPORT QTestData &newRow(const char *dataTag);
  138.     template <typename T>
  139.     inline bool qCompare(T const &t1, T const &t2, const char *actual, const char *expected,
  140.                         const char *file, int line)
  141.     {
  142.         return (t1 == t2)
  143.             ? compare_helper(true, "COMPARE()", file, line)
  144.             : compare_helper(false, "Compared values are not the same",
  145.                              toString<T>(t1), toString<T>(t2), actual, expected, file, line);
  146.     }
  147.     template <>
  148.     Q_TESTLIB_EXPORT bool qCompare<float>(float const &t1, float const &t2,
  149.                     const char *actual, const char *expected, const char *file, int line);
  150.     template <>
  151.     Q_TESTLIB_EXPORT bool qCompare<double>(double const &t1, double const &t2,
  152.                     const char *actual, const char *expected, const char *file, int line);
  153.     inline bool compare_ptr_helper(const void *t1, const void *t2, const char *actual,
  154.                                    const char *expected, const char *file, int line)
  155.     {
  156.         return (t1 == t2)
  157.             ? compare_helper(true, "COMPARE()", file, line)
  158.             : compare_helper(false, "Compared pointers are not the same",
  159.                              toString(t1), toString(t2), actual, expected, file, line);
  160.     }
  161.     Q_TESTLIB_EXPORT bool compare_string_helper(const char *t1, const char *t2, const char *actual,
  162.                                       const char *expected, const char *file, int line);
  163. #ifndef qdoc
  164.     QTEST_COMPARE_DECL(short)
  165.     QTEST_COMPARE_DECL(ushort)
  166.     QTEST_COMPARE_DECL(int)
  167.     QTEST_COMPARE_DECL(uint)
  168.     QTEST_COMPARE_DECL(long)
  169.     QTEST_COMPARE_DECL(ulong)
  170.     QTEST_COMPARE_DECL(qint64)
  171.     QTEST_COMPARE_DECL(quint64)
  172.     QTEST_COMPARE_DECL(float)
  173.     QTEST_COMPARE_DECL(double)
  174.     QTEST_COMPARE_DECL(char)
  175.     QTEST_COMPARE_DECL(bool)
  176. #endif
  177. #ifndef QTEST_NO_SPECIALIZATIONS
  178.     template <typename T1, typename T2>
  179.     bool qCompare(T1 const &, T2 const &, const char *, const char *, const char *, int);
  180. #if defined(QT_COORD_TYPE) || defined(QT_ARCH_ARM) || defined(QT_ARCH_WINDOWSCE) || defined(QT_NO_FPU)
  181.     template <>
  182.     inline bool qCompare<qreal, double>(qreal const &t1, double const &t2, const char *actual,
  183.                                  const char *expected, const char *file, int line)
  184.     {
  185.         return qCompare<float>(float(t1), float(t2), actual, expected, file, line);
  186.     }
  187.     template <>
  188.     inline bool qCompare<double, qreal>(double const &t1, qreal const &t2, const char *actual,
  189.                                  const char *expected, const char *file, int line)
  190.     {
  191.         return qCompare<float>(float(t1), float(t2), actual, expected, file, line);
  192.     }
  193. #endif
  194.     template <typename T>
  195.     inline bool qCompare(const T *t1, const T *t2, const char *actual, const char *expected,
  196.                         const char *file, int line)
  197.     {
  198.         return compare_ptr_helper(t1, t2, actual, expected, file, line);
  199.     }
  200.     template <typename T>
  201.     inline bool qCompare(T *t1, T *t2, const char *actual, const char *expected,
  202.                         const char *file, int line)
  203.     {
  204.         return compare_ptr_helper(t1, t2, actual, expected, file, line);
  205.     }
  206.     template <typename T1, typename T2>
  207.     inline bool qCompare(const T1 *t1, const T2 *t2, const char *actual, const char *expected,
  208.                         const char *file, int line)
  209.     {
  210.         return compare_ptr_helper(t1, static_cast<const T1 *>(t2), actual, expected, file, line);
  211.     }
  212.     template <typename T1, typename T2>
  213.     inline bool qCompare(T1 *t1, T2 *t2, const char *actual, const char *expected,
  214.                         const char *file, int line)
  215.     {
  216.         return compare_ptr_helper(const_cast<const T1 *>(t1),
  217.                 static_cast<const T1 *>(const_cast<const T2 *>(t2)), actual, expected, file, line);
  218.     }
  219.     template<>
  220.     inline bool qCompare<char>(const char *t1, const char *t2, const char *actual,
  221.                                        const char *expected, const char *file, int line)
  222.     {
  223.         return compare_string_helper(t1, t2, actual, expected, file, line);
  224.     }
  225.     template<>
  226.     inline bool qCompare<char>(char *t1, char *t2, const char *actual, const char *expected,
  227.                         const char *file, int line)
  228.     {
  229.         return compare_string_helper(t1, t2, actual, expected, file, line);
  230.     }
  231. #else  /* QTEST_NO_SPECIALIZATIONS */
  232.     inline bool qCompare(const char *t1, const char *t2, const char *actual,
  233.                          const char *expected, const char *file, int line)
  234.     {
  235.         return compare_string_helper(t1, t2, actual, expected, file, line);
  236.     }
  237.     inline bool qCompare(char *t1, char *t2, const char *actual, const char *expected,
  238.                          const char *file, int line)
  239.     {
  240.         return compare_string_helper(t1, t2, actual, expected, file, line);
  241.     }
  242. #endif
  243.     /* The next two specializations are for MSVC that shows problems with implicit
  244.        conversions
  245.      */
  246. #ifndef QTEST_NO_SPECIALIZATIONS
  247.     template<>
  248. #endif
  249.     inline bool qCompare(char *t1, const char *t2, const char *actual,
  250.                          const char *expected, const char *file, int line)
  251.     {
  252.         return compare_string_helper(t1, t2, actual, expected, file, line);
  253.     }
  254. #ifndef QTEST_NO_SPECIALIZATIONS
  255.     template<>
  256. #endif
  257.     inline bool qCompare(const char *t1, char *t2, const char *actual,
  258.                          const char *expected, const char *file, int line)
  259.     {
  260.         return compare_string_helper(t1, t2, actual, expected, file, line);
  261.     }
  262.     template <class T>
  263.     inline bool qTest(const T& actual, const char *elementName, const char *actualStr,
  264.                      const char *expected, const char *file, int line)
  265.     {
  266.         return qCompare(actual, *static_cast<const T *>(QTest::qElementData(elementName,
  267.                        qMetaTypeId<T>())), actualStr, expected, file, line);
  268.     }
  269. }
  270. #undef QTEST_COMPARE_DECL
  271. QT_END_NAMESPACE
  272. QT_END_HEADER
  273. #endif