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