File indexing completed on 2024-05-12 04:38:44

0001 /*
0002     SPDX-FileCopyrightText: 2012 Olivier de Gaalon <olivier.jg@gmail.com>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-only
0005 */
0006 
0007 #ifndef KDEVPLATFORM_JSONTESTHELPERS_H
0008 #define KDEVPLATFORM_JSONTESTHELPERS_H
0009 
0010 #include "testsuite.h"
0011 
0012 #define VERIFY_NOT_NULL(ptr) \
0013     if (!ptr) \
0014         return JsonTestHelpers::INVALID_POINTER()
0015 
0016 #define VERIFY_TYPE(qvariantType) \
0017     if (!value.canConvert<qvariantType>()) \
0018         return JsonTestHelpers::INVALID_JSON_TYPE().arg(QStringLiteral(# qvariantType), \
0019                                                         QString::fromUtf8(QVariant::typeToName(value.type())))
0020 
0021 #define __AddTest(testName, objType) \
0022     bool testName ## Added = KDevelop::TestSuite<objType>::get().addTest(QStringLiteral(# testName), &testName)
0023 
0024 #define __DefineTest(testName, objType, objName) \
0025     QString testName(const QVariant&, objType); \
0026     __AddTest(testName, objType); \
0027     QString testName(const QVariant &value, objType objName)
0028 
0029 #define DeclarationTest(testName) __DefineTest(testName, KDevelop::Declaration*, decl)
0030 #define TypeTest(testName) __DefineTest(testName, KDevelop::AbstractType::Ptr, type)
0031 #define ContextTest(testName) __DefineTest(testName, KDevelop::DUContext*, ctxt)
0032 
0033 namespace KDevelop {
0034 namespace JsonTestHelpers {
0035 inline QString SUCCESS() { return QString(); }
0036 inline QString INVALID_JSON_TYPE()
0037 {
0038     return QStringLiteral("Incorrect JSON type provided for test. Actual: %1, Expected: %2");
0039 }
0040 inline QString INVALID_POINTER() { return QStringLiteral("Null pointer passed to test."); }
0041 
0042 template<class Type>
0043 inline QString compareValues(Type realValue, const QVariant& value, const QString& errorDesc)
0044 {
0045     VERIFY_TYPE(Type);
0046     const QString ERROR_MESSAGE = QStringLiteral("%1 (\"%2\") doesn't match test data (\"%3\").");
0047     return realValue == value.value<Type>() ?
0048            SUCCESS() : ERROR_MESSAGE.arg(errorDesc).arg(realValue).arg(value.value<Type>());
0049 }
0050 
0051 template<class Object>
0052 inline QString testObject(Object obj, const QVariant& value, const QString& errorDesc)
0053 {
0054     VERIFY_TYPE(QVariantMap);
0055     const QString ERROR_MESSAGE = QStringLiteral("%1 did not pass tests.");
0056     return KDevelop::TestSuite<Object>::get().runTests(value.toMap(), obj) ? SUCCESS() : ERROR_MESSAGE.arg(errorDesc);
0057 }
0058 
0059 inline QString rangeStr(const KDevelop::RangeInRevision& range)
0060 {
0061     return QStringLiteral("[(%1, %2), (%3, %4)]")
0062            .arg(range.start.line)
0063            .arg(range.start.column)
0064            .arg(range.end.line)
0065            .arg(range.end.column);
0066 }
0067 }
0068 }
0069 
0070 #endif //KDEVPLATFORM_JSONTESTHELPERS_H