forked from qt-creator/qt-creator
ClangCodeModel: Add test case for documentation in cpp files
See https://github.com/llvm/llvm-project/pull/67802. Task-number: QTCREATORBUG-4557 Change-Id: I1b7135414104d67426eefded679a03fdaa306944 Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
@@ -1507,10 +1507,9 @@ void ClangdClient::Private::setHelpItemForTooltip(const MessageId &token,
|
|||||||
mark = type;
|
mark = type;
|
||||||
|
|
||||||
const HelpItem helpItem(helpIds, filePath, mark, category);
|
const HelpItem helpItem(helpIds, filePath, mark, category);
|
||||||
if (isTesting)
|
|
||||||
emit q->helpItemGathered(helpItem);
|
|
||||||
else
|
|
||||||
q->hoverHandler()->setHelpItem(token, helpItem);
|
q->hoverHandler()->setHelpItem(token, helpItem);
|
||||||
|
if (isTesting)
|
||||||
|
emit q->helpItemGathered(helpItem, q->hoverHandler()->toolTip());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Unfortunately, clangd ignores almost everything except symbols when sending
|
// Unfortunately, clangd ignores almost everything except symbols when sending
|
||||||
|
@@ -127,7 +127,7 @@ signals:
|
|||||||
void indexingFinished();
|
void indexingFinished();
|
||||||
void foundReferences(const Utils::SearchResultItems &items);
|
void foundReferences(const Utils::SearchResultItems &items);
|
||||||
void findUsagesDone();
|
void findUsagesDone();
|
||||||
void helpItemGathered(const Core::HelpItem &helpItem);
|
void helpItemGathered(const Core::HelpItem &helpItem, const QString &toolTip);
|
||||||
void highlightingResultsReady(const TextEditor::HighlightingResults &results,
|
void highlightingResultsReady(const TextEditor::HighlightingResults &results,
|
||||||
const Utils::FilePath &file);
|
const Utils::FilePath &file);
|
||||||
void proposalReady(TextEditor::IAssistProposal *proposal);
|
void proposalReady(TextEditor::IAssistProposal *proposal);
|
||||||
|
@@ -670,14 +670,55 @@ public:
|
|||||||
ClangdTestTooltips()
|
ClangdTestTooltips()
|
||||||
{
|
{
|
||||||
setProjectFileName("tooltips.pro");
|
setProjectFileName("tooltips.pro");
|
||||||
setSourceFileNames({"tooltips.cpp"});
|
setSourceFileNames({"main.cpp", "tooltips.cpp"});
|
||||||
}
|
}
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
|
void testTooltipFromIndex();
|
||||||
|
|
||||||
void test_data();
|
void test_data();
|
||||||
void test();
|
void test();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void ClangdTestTooltips::testTooltipFromIndex()
|
||||||
|
{
|
||||||
|
TextEditor::TextDocument * const doc = document("main.cpp");
|
||||||
|
QVERIFY(doc);
|
||||||
|
const auto editor = qobject_cast<BaseTextEditor *>(EditorManager::openEditor(doc->filePath()));
|
||||||
|
QVERIFY(editor);
|
||||||
|
QCOMPARE(editor->document(), doc);
|
||||||
|
QVERIFY(editor->editorWidget());
|
||||||
|
|
||||||
|
QTimer timer;
|
||||||
|
timer.setSingleShot(true);
|
||||||
|
QEventLoop loop;
|
||||||
|
QObject::connect(&timer, &QTimer::timeout, &loop, &QEventLoop::quit);
|
||||||
|
HelpItem helpItem;
|
||||||
|
QString tooltip;
|
||||||
|
const auto handler = [&helpItem, &tooltip, &loop](const HelpItem &h, const QString &t) {
|
||||||
|
helpItem = h;
|
||||||
|
tooltip = t;
|
||||||
|
loop.quit();
|
||||||
|
};
|
||||||
|
connect(client(), &ClangdClient::helpItemGathered, &loop, handler);
|
||||||
|
|
||||||
|
QTextCursor cursor(doc->document());
|
||||||
|
const int pos = Text::positionInText(doc->document(), 5, 5);
|
||||||
|
cursor.setPosition(pos);
|
||||||
|
editor->editorWidget()->processTooltipRequest(cursor);
|
||||||
|
|
||||||
|
timer.start(10000);
|
||||||
|
loop.exec();
|
||||||
|
QVERIFY(timer.isActive());
|
||||||
|
timer.stop();
|
||||||
|
|
||||||
|
QCOMPARE(int(helpItem.category()), HelpItem::Function);
|
||||||
|
QCOMPARE(helpItem.helpIds(), {"funcWithDocInside"});
|
||||||
|
if (client()->versionNumber().majorVersion() < 20)
|
||||||
|
QEXPECT_FAIL(nullptr, "Requires clangd >= 20", Continue);
|
||||||
|
QVERIFY2(tooltip.contains("Documentation in source file"), qPrintable(tooltip));
|
||||||
|
}
|
||||||
|
|
||||||
void ClangdTestTooltips::test_data()
|
void ClangdTestTooltips::test_data()
|
||||||
{
|
{
|
||||||
QTest::addColumn<int>("line");
|
QTest::addColumn<int>("line");
|
||||||
@@ -772,7 +813,7 @@ void ClangdTestTooltips::test()
|
|||||||
|
|
||||||
TextEditor::TextDocument * const doc = document("tooltips.cpp");
|
TextEditor::TextDocument * const doc = document("tooltips.cpp");
|
||||||
QVERIFY(doc);
|
QVERIFY(doc);
|
||||||
const auto editor = TextEditor::BaseTextEditor::currentTextEditor();
|
const auto editor = qobject_cast<BaseTextEditor *>(EditorManager::openEditor(doc->filePath()));
|
||||||
QVERIFY(editor);
|
QVERIFY(editor);
|
||||||
QCOMPARE(editor->document(), doc);
|
QCOMPARE(editor->document(), doc);
|
||||||
QVERIFY(editor->editorWidget());
|
QVERIFY(editor->editorWidget());
|
||||||
|
@@ -64,5 +64,8 @@
|
|||||||
<file>indirect-changes/indirectheader.h</file>
|
<file>indirect-changes/indirectheader.h</file>
|
||||||
<file>indirect-changes/main.cpp</file>
|
<file>indirect-changes/main.cpp</file>
|
||||||
<file>indirect-changes/unrelatedheader.h</file>
|
<file>indirect-changes/unrelatedheader.h</file>
|
||||||
|
<file>tooltips/main.cpp</file>
|
||||||
|
<file>tooltips/tooltipfromindex.cpp</file>
|
||||||
|
<file>tooltips/tooltipfromindex.h</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
</RCC>
|
</RCC>
|
||||||
|
6
src/plugins/clangcodemodel/test/data/tooltips/main.cpp
Normal file
6
src/plugins/clangcodemodel/test/data/tooltips/main.cpp
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
#include "tooltipfromindex.h"
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
funcWithDocInside();
|
||||||
|
}
|
@@ -0,0 +1,6 @@
|
|||||||
|
#include "tooltipfromindex.h"
|
||||||
|
|
||||||
|
// Documentation in source file
|
||||||
|
void funcWithDocInside()
|
||||||
|
{
|
||||||
|
}
|
@@ -0,0 +1,3 @@
|
|||||||
|
#pragma one
|
||||||
|
|
||||||
|
void funcWithDocInside();
|
@@ -1,4 +1,5 @@
|
|||||||
TEMPLATE = app
|
TEMPLATE = app
|
||||||
CONFIG -= qt
|
CONFIG -= qt
|
||||||
SOURCES = tooltips.cpp
|
HEADERS = tooltipfromindex.h
|
||||||
|
SOURCES = main.cpp tooltipfromindex.cpp tooltips.cpp
|
||||||
INCLUDEPATH += subdir
|
INCLUDEPATH += subdir
|
||||||
|
@@ -33,6 +33,7 @@ public:
|
|||||||
|
|
||||||
void showToolTip(TextEditorWidget *widget, const QPoint &point);
|
void showToolTip(TextEditorWidget *widget, const QPoint &point);
|
||||||
bool lastHelpItemAppliesTo(const TextEditorWidget *widget) const;
|
bool lastHelpItemAppliesTo(const TextEditorWidget *widget) const;
|
||||||
|
const QString &toolTip() const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
enum {
|
enum {
|
||||||
@@ -46,7 +47,6 @@ protected:
|
|||||||
int priority() const;
|
int priority() const;
|
||||||
|
|
||||||
void setToolTip(const QString &tooltip, Qt::TextFormat format = Qt::PlainText);
|
void setToolTip(const QString &tooltip, Qt::TextFormat format = Qt::PlainText);
|
||||||
const QString &toolTip() const;
|
|
||||||
|
|
||||||
void setLastHelpItemIdentified(const Core::HelpItem &help);
|
void setLastHelpItemIdentified(const Core::HelpItem &help);
|
||||||
const Core::HelpItem &lastHelpItemIdentified() const;
|
const Core::HelpItem &lastHelpItemIdentified() const;
|
||||||
|
Reference in New Issue
Block a user