aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorIvan Donchevskii <ivan.donchevskii@qt.io>2018-08-21 10:23:12 +0200
committerIvan Donchevskii <ivan.donchevskii@qt.io>2018-08-21 10:41:30 +0000
commit8c21a7a3968a7d146b81f9533093dfdb541376b1 (patch)
treed6da07d86de5edf09fd0d5556e78a32ba2ac94a6 /tests
parent8d0391a4f9b91fb15ee3d20db725c7a37c4646aa (diff)
Clang: Fix local references for operator arguments
Workaround for wrong cursor annotated by Clang. Use clang_getCursor in case of the variable used as operator argument to get the proper cursor. Task-number: QTCREATORBUG-20966 Change-Id: Idb195bffc2296f3fae27595cf9c43c9e6b2c5cd0 Reviewed-by: Marco Bubke <marco.bubke@qt.io>
Diffstat (limited to 'tests')
-rw-r--r--tests/unit/unittest/clangreferencescollector-test.cpp48
-rw-r--r--tests/unit/unittest/data/references.cpp15
2 files changed, 63 insertions, 0 deletions
diff --git a/tests/unit/unittest/clangreferencescollector-test.cpp b/tests/unit/unittest/clangreferencescollector-test.cpp
index fbc0e81bc3b..f807ade73b0 100644
--- a/tests/unit/unittest/clangreferencescollector-test.cpp
+++ b/tests/unit/unittest/clangreferencescollector-test.cpp
@@ -463,6 +463,54 @@ TEST_F(ReferencesCollector, ArgumentToFunctionLikeMacro)
ASSERT_THAT(actual, expected);
}
+TEST_F(ReferencesCollector, OverloadedBraceOperatorArgument)
+{
+ const ReferencesResult expected {
+ true,
+ {createSourceRange(171, 7, 1),
+ createSourceRange(172, 7, 1),
+ createSourceRange(172, 12, 1),
+ createSourceRange(173, 7, 1),
+ createSourceRange(173, 10, 1)},
+ };
+
+ const ReferencesResult actual = getReferences(172, 7);
+
+ ASSERT_THAT(actual, expected);
+}
+
+TEST_F(ReferencesCollector, OverloadedParenOperatorSecondArgument)
+{
+ const ReferencesResult expected {
+ true,
+ {createSourceRange(171, 7, 1),
+ createSourceRange(172, 7, 1),
+ createSourceRange(172, 12, 1),
+ createSourceRange(173, 7, 1),
+ createSourceRange(173, 10, 1)},
+ };
+
+ const ReferencesResult actual = getReferences(173, 10);
+
+ ASSERT_THAT(actual, expected);
+}
+
+TEST_F(ReferencesCollector, OverloadedOperatorsArgumentsFromOutside)
+{
+ const ReferencesResult expected {
+ true,
+ {createSourceRange(171, 7, 1),
+ createSourceRange(172, 7, 1),
+ createSourceRange(172, 12, 1),
+ createSourceRange(173, 7, 1),
+ createSourceRange(173, 10, 1)},
+ };
+
+ const ReferencesResult actual = getReferences(171, 7);
+
+ ASSERT_THAT(actual, expected);
+}
+
std::unique_ptr<const Data> ReferencesCollector::data;
void ReferencesCollector::SetUpTestCase()
diff --git a/tests/unit/unittest/data/references.cpp b/tests/unit/unittest/data/references.cpp
index d71a9e8f798..32ff1b90753 100644
--- a/tests/unit/unittest/data/references.cpp
+++ b/tests/unit/unittest/data/references.cpp
@@ -157,3 +157,18 @@ int functionLikeMacro(int foo)
{
return BAR(foo);
}
+
+template<class T>
+class Container
+{
+public:
+ T &operator[](int); T &operator()(int, int);
+};
+
+int testOperator() {
+ Container<int> vec;
+
+ int n = 10;
+ vec[n] = n * 100;
+ vec(n, n) = 100;
+}