aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/clangcodemodel/test
diff options
context:
space:
mode:
authorChristian Kandeler <[email protected]>2023-08-22 14:10:22 +0200
committerChristian Kandeler <[email protected]>2023-08-22 13:59:04 +0000
commitb33b99e2d9e4c343f7427bcf1ccdf652e7575557 (patch)
treed531bf852be09078d8bf259b68e4b3a1ad8c55f8 /src/plugins/clangcodemodel/test
parent73c5cf29c45f4d6d098b4e52043661801a2ed499 (diff)
ClangCodeModel: Take changes from header files into account immediately
... in the dependent sources. That's also how the built-in code model behaves, but clangd itself only does this when a document is saved. Change-Id: I52d6badb0b7f063e5924c05dbf83a6e9849c9f6f Reviewed-by: David Schulz <[email protected]>
Diffstat (limited to 'src/plugins/clangcodemodel/test')
-rw-r--r--src/plugins/clangcodemodel/test/clangdtests.cpp41
-rw-r--r--src/plugins/clangcodemodel/test/clangdtests.h11
-rw-r--r--src/plugins/clangcodemodel/test/data/clangtestdata.qrc5
-rw-r--r--src/plugins/clangcodemodel/test/data/indirect-changes/directheader.h1
-rw-r--r--src/plugins/clangcodemodel/test/data/indirect-changes/indirect-changes.pro4
-rw-r--r--src/plugins/clangcodemodel/test/data/indirect-changes/indirectheader.h0
-rw-r--r--src/plugins/clangcodemodel/test/data/indirect-changes/main.cpp3
-rw-r--r--src/plugins/clangcodemodel/test/data/indirect-changes/unrelatedheader.h0
8 files changed, 65 insertions, 0 deletions
diff --git a/src/plugins/clangcodemodel/test/clangdtests.cpp b/src/plugins/clangcodemodel/test/clangdtests.cpp
index 190c0b55c76..54c9bfa7c1d 100644
--- a/src/plugins/clangcodemodel/test/clangdtests.cpp
+++ b/src/plugins/clangcodemodel/test/clangdtests.cpp
@@ -2061,6 +2061,47 @@ void ClangdTestExternalChanges::test()
QVERIFY(waitForSignalOrTimeout(newClient, &ClangdClient::textMarkCreated, timeOutInMs()));
}
+ClangdTestIndirectChanges::ClangdTestIndirectChanges()
+{
+ setProjectFileName("indirect-changes.pro");
+ setSourceFileNames({"main.cpp", "directheader.h", "indirectheader.h", "unrelatedheader.h"});
+}
+
+void ClangdTestIndirectChanges::test()
+{
+ // Initially, everything is fine.
+ const TextDocument * const src = document("main.cpp");
+ QVERIFY(src);
+ QVERIFY(src->marks().isEmpty());
+
+ // Write into an indirectly included header file. Our source file should have diagnostics now.
+ const TextDocument * const indirectHeader = document("indirectheader.h");
+ QVERIFY(indirectHeader);
+ QTextCursor cursor(indirectHeader->document());
+ cursor.insertText("blubb");
+ while (src->marks().isEmpty())
+ QVERIFY(waitForSignalOrTimeout(client(), &ClangdClient::textMarkCreated, timeOutInMs()));
+
+ // Remove the inserted text again; the diagnostics should disappear.
+ cursor.document()->undo();
+ QVERIFY(cursor.document()->toPlainText().isEmpty());
+ while (!src->marks().isEmpty()) {
+ QVERIFY(waitForSignalOrTimeout(client(), &ClangdClient::highlightingResultsReady,
+ timeOutInMs()));
+ }
+
+ // Now write into a header file that is not included anywhere.
+ // We expect diagnostics only for the header itself.
+ const TextDocument * const unrelatedHeader = document("unrelatedheader.h");
+ QVERIFY(indirectHeader);
+ QTextCursor cursor2(unrelatedHeader->document());
+ cursor2.insertText("blubb");
+ while (waitForSignalOrTimeout(client(), &ClangdClient::textMarkCreated, timeOutInMs()))
+ ;
+ QVERIFY(!unrelatedHeader->marks().isEmpty());
+ QVERIFY(src->marks().isEmpty());
+}
+
} // namespace Tests
} // namespace Internal
} // namespace ClangCodeModel
diff --git a/src/plugins/clangcodemodel/test/clangdtests.h b/src/plugins/clangcodemodel/test/clangdtests.h
index 92bf4efe90c..9d6e42d3a9e 100644
--- a/src/plugins/clangcodemodel/test/clangdtests.h
+++ b/src/plugins/clangcodemodel/test/clangdtests.h
@@ -188,6 +188,17 @@ private slots:
void test();
};
+class ClangdTestIndirectChanges : public ClangdTest
+{
+ Q_OBJECT
+
+public:
+ ClangdTestIndirectChanges();
+
+private slots:
+ void test();
+};
+
} // namespace Tests
} // namespace Internal
} // namespace ClangCodeModel
diff --git a/src/plugins/clangcodemodel/test/data/clangtestdata.qrc b/src/plugins/clangcodemodel/test/data/clangtestdata.qrc
index 1ee4bdee92c..f61e3f0633b 100644
--- a/src/plugins/clangcodemodel/test/data/clangtestdata.qrc
+++ b/src/plugins/clangcodemodel/test/data/clangtestdata.qrc
@@ -60,5 +60,10 @@
<file>fixits/diagnostic_comparison_fixit.cpp</file>
<file>fixits/diagnostic_semicolon_fixit_expected.cpp</file>
<file>fixits/diagnostic_semicolon_fixit.cpp</file>
+ <file>indirect-changes/directheader.h</file>
+ <file>indirect-changes/indirect-changes.pro</file>
+ <file>indirect-changes/indirectheader.h</file>
+ <file>indirect-changes/main.cpp</file>
+ <file>indirect-changes/unrelatedheader.h</file>
</qresource>
</RCC>
diff --git a/src/plugins/clangcodemodel/test/data/indirect-changes/directheader.h b/src/plugins/clangcodemodel/test/data/indirect-changes/directheader.h
new file mode 100644
index 00000000000..9ab7726e456
--- /dev/null
+++ b/src/plugins/clangcodemodel/test/data/indirect-changes/directheader.h
@@ -0,0 +1 @@
+#include "indirectheader.h"
diff --git a/src/plugins/clangcodemodel/test/data/indirect-changes/indirect-changes.pro b/src/plugins/clangcodemodel/test/data/indirect-changes/indirect-changes.pro
new file mode 100644
index 00000000000..b1648532ca6
--- /dev/null
+++ b/src/plugins/clangcodemodel/test/data/indirect-changes/indirect-changes.pro
@@ -0,0 +1,4 @@
+CONFIG -= qt
+
+SOURCES = main.cpp
+HEADERS = directheader.h indirectheader.h unrelatedheader.h
diff --git a/src/plugins/clangcodemodel/test/data/indirect-changes/indirectheader.h b/src/plugins/clangcodemodel/test/data/indirect-changes/indirectheader.h
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/src/plugins/clangcodemodel/test/data/indirect-changes/indirectheader.h
diff --git a/src/plugins/clangcodemodel/test/data/indirect-changes/main.cpp b/src/plugins/clangcodemodel/test/data/indirect-changes/main.cpp
new file mode 100644
index 00000000000..63ae802b071
--- /dev/null
+++ b/src/plugins/clangcodemodel/test/data/indirect-changes/main.cpp
@@ -0,0 +1,3 @@
+#include "directheader.h"
+
+int main() {}
diff --git a/src/plugins/clangcodemodel/test/data/indirect-changes/unrelatedheader.h b/src/plugins/clangcodemodel/test/data/indirect-changes/unrelatedheader.h
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/src/plugins/clangcodemodel/test/data/indirect-changes/unrelatedheader.h