aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto
diff options
context:
space:
mode:
authorVolodymyr Zibarov <gogan419@gmail.com>2020-06-12 22:42:06 +0300
committerVolodymyr Zibarov <gogan419@gmail.com>2020-06-15 10:16:06 +0000
commit7d827416023f0da42e1b476cc4f22ccadf365991 (patch)
tree1207e5a2e3227bad71a5df0fa10df4418cec62bf /tests/auto
parentaf9665f7850bc679a9ffbf65b6f25615a6176ab4 (diff)
C++: Fix find usage to see Catch test functions bodies
Catch test functions defined with function-like macros. To speed-up semantic analysis, find usages does not expand function-like macros. Semantic fails with "expected a function declarator" on such functions and skips function body. To avoid that, we create dummy function type specifically for this case Change-Id: Ie2f2464ee57aa4dc86eed07b8b699458f95c0266 Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Diffstat (limited to 'tests/auto')
-rw-r--r--tests/auto/cplusplus/findusages/tst_findusages.cpp40
1 files changed, 40 insertions, 0 deletions
diff --git a/tests/auto/cplusplus/findusages/tst_findusages.cpp b/tests/auto/cplusplus/findusages/tst_findusages.cpp
index f85ee66e24..9af88ad39c 100644
--- a/tests/auto/cplusplus/findusages/tst_findusages.cpp
+++ b/tests/auto/cplusplus/findusages/tst_findusages.cpp
@@ -126,6 +126,8 @@ private Q_SLOTS:
void templatePartialSpecialization_2();
void template_SFINAE_1();
void variableTemplateInExpression();
+
+ void variadicMacros();
};
void tst_FindUsages::dump(const QList<Usage> &usages) const
@@ -1624,5 +1626,43 @@ int main(){
QCOMPARE(find.usages().size(), 2);
}
+void tst_FindUsages::variadicMacros()
+{
+ const QByteArray src =
+ R"(
+struct MyStruct { int value; };
+#define FOO( ... ) int foo()
+FOO(1) {
+ MyStruct s;
+ s.value;
+}
+int main(){}
+)";
+
+ Document::Ptr doc = Document::create("variadicMacros");
+ doc->setUtf8Source(src);
+ doc->parse();
+ doc->check();
+
+ QVERIFY(doc->diagnosticMessages().isEmpty());
+ QVERIFY(doc->globalSymbolCount() >= 1);
+
+ Snapshot snapshot;
+ snapshot.insert(doc);
+
+ Class *s = doc->globalSymbolAt(0)->asClass();
+ QVERIFY(s);
+ QCOMPARE(s->name()->identifier()->chars(), "MyStruct");
+ QCOMPARE(s->memberCount(), 1);
+
+ Declaration *sv = s->memberAt(0)->asDeclaration();
+ QVERIFY(sv);
+ QCOMPARE(sv->name()->identifier()->chars(), "value");
+
+ FindUsages find(src, doc, snapshot);
+ find(sv);
+ QCOMPARE(find.usages().size(), 2);
+}
+
QTEST_APPLESS_MAIN(tst_FindUsages)
#include "tst_findusages.moc"