summaryrefslogtreecommitdiff
path: root/src/plugins/cpptools/cppcompletion_test.cpp
diff options
context:
space:
mode:
authorOswald Buddenhagen <oswald.buddenhagen@digia.com>2013-08-21 14:39:18 +0200
committerOswald Buddenhagen <oswald.buddenhagen@digia.com>2013-08-21 14:39:18 +0200
commitc2e90c360baaa5b8ea31d4466cadfab2bda3aabe (patch)
tree33ff2ee485894273b947b0c89a47dac75c8db3b1 /src/plugins/cpptools/cppcompletion_test.cpp
parentbf69b4c4446fbcc5feb94edcc89ff87078b2afcf (diff)
parent01b3e1fa547d8def812d64941968fb5e13516383 (diff)
downloadqt-creator-c2e90c360baaa5b8ea31d4466cadfab2bda3aabe.tar.gz
Merge remote-tracking branch 'origin/2.8'
Conflicts: src/plugins/cpptools/cppcompletion_test.cpp src/plugins/cpptools/cpptoolsplugin.h src/plugins/projectexplorer/customtoolchain.cpp src/plugins/vcsbase/command.cpp Change-Id: Ie7b3c9e136c0748b41320227c757471259339b48
Diffstat (limited to 'src/plugins/cpptools/cppcompletion_test.cpp')
-rw-r--r--src/plugins/cpptools/cppcompletion_test.cpp1198
1 files changed, 339 insertions, 859 deletions
diff --git a/src/plugins/cpptools/cppcompletion_test.cpp b/src/plugins/cpptools/cppcompletion_test.cpp
index 1249fe3eff..9948577029 100644
--- a/src/plugins/cpptools/cppcompletion_test.cpp
+++ b/src/plugins/cpptools/cppcompletion_test.cpp
@@ -29,6 +29,7 @@
#include "cpptoolsplugin.h"
#include "cppcompletionassist.h"
+#include "cppmodelmanager.h"
#include <texteditor/plaintexteditor.h>
#include <texteditor/codeassist/iassistproposal.h>
@@ -51,107 +52,134 @@ using namespace CppTools::Internal;
using namespace TextEditor;
using namespace Core;
-struct TestData
-{
- QByteArray srcText;
- int pos;
- Snapshot snapshot;
- BaseTextEditorWidget *editor;
- QTextDocument *doc;
-};
-
-static QStringList getCompletions(TestData &data, bool *replaceAccessOperator = 0)
-{
- QStringList completions;
-
- CppCompletionAssistInterface *ai = new CppCompletionAssistInterface(data.editor->document(), data.pos,
- data.editor->editorDocument()->filePath(), ExplicitlyInvoked,
- data.snapshot, QStringList(), QStringList());
- CppCompletionAssistProcessor processor;
- IAssistProposal *proposal = processor.perform(ai);
- if (!proposal)
- return completions;
- IAssistProposalModel *model = proposal->model();
- if (!model)
- return completions;
- CppAssistProposalModel *listmodel = dynamic_cast<CppAssistProposalModel *>(model);
- if (!listmodel)
- return completions;
- const int pos = proposal->basePosition();
- const int length = data.pos - pos;
- const QString prefix = Convenience::textAt(QTextCursor(data.editor->document()), pos, length);
- if (!prefix.isEmpty())
- listmodel->filter(prefix);
-
- for (int i = 0; i < listmodel->size(); ++i)
- completions << listmodel->text(i);
+class CompletionTestCase
+{
+public:
+ CompletionTestCase(const QByteArray &sourceText, const QByteArray &textToInsert = QByteArray())
+ : position(-1), editorWidget(0), textDocument(0), editor(0),
+ cmm(CppModelManager::instance())
+ {
+ source = sourceText;
+ position = source.indexOf('@');
+ QVERIFY(position != -1);
+ source[position] = ' ';
+
+ // Write source to file
+ const QString fileName = QDir::tempPath() + QLatin1String("/file.h");
+ Utils::FileSaver srcSaver(fileName);
+ srcSaver.write(source);
+ srcSaver.finalize();
+
+ // Open in editor
+ editor = EditorManager::openEditor(fileName);
+ QVERIFY(editor);
+ editorWidget = qobject_cast<TextEditor::BaseTextEditorWidget *>(editor->widget());
+ QVERIFY(editorWidget);
+
+ textDocument = editorWidget->document();
+
+ // Get Document
+ while (!cmm->snapshot().contains(fileName))
+ QCoreApplication::processEvents();
+ Document::Ptr document = cmm->snapshot().document(fileName);
+
+ snapshot.insert(document);
+
+ if (!textToInsert.isEmpty())
+ insertText(textToInsert);
+ }
- if (replaceAccessOperator)
- *replaceAccessOperator = listmodel->m_replaceDotForArrow;
+ ~CompletionTestCase()
+ {
+ EditorManager::instance()->closeEditors(QList<IEditor*>() << editor,
+ /*askAboutModifiedEditors=*/ false);
+ cmm->GC();
+ QVERIFY(cmm->snapshot().isEmpty());
+ }
- return completions;
-}
+ QStringList getCompletions(bool *replaceAccessOperator = 0) const
+ {
+ QStringList completions;
+ CppCompletionAssistInterface *ai
+ = new CppCompletionAssistInterface(editorWidget->document(), position,
+ editorWidget->editorDocument()->filePath(),
+ ExplicitlyInvoked, snapshot,
+ QStringList(), QStringList());
+ CppCompletionAssistProcessor processor;
+ IAssistProposal *proposal = processor.perform(ai);
+ if (!proposal)
+ return completions;
+ IAssistProposalModel *model = proposal->model();
+ if (!model)
+ return completions;
+ CppAssistProposalModel *listmodel = dynamic_cast<CppAssistProposalModel *>(model);
+ if (!listmodel)
+ return completions;
+
+ const int pos = proposal->basePosition();
+ const int length = position - pos;
+ const QString prefix = Convenience::textAt(QTextCursor(editorWidget->document()), pos, length);
+ if (!prefix.isEmpty())
+ listmodel->filter(prefix);
+
+ for (int i = 0; i < listmodel->size(); ++i)
+ completions << listmodel->text(i);
+
+ if (replaceAccessOperator)
+ *replaceAccessOperator = listmodel->m_replaceDotForArrow;
-static void setup(TestData *data)
-{
- data->pos = data->srcText.indexOf('@');
- QVERIFY(data->pos != -1);
- data->srcText[data->pos] = ' ';
- Document::Ptr src = Document::create(QDir::tempPath() + QLatin1String("/file.h"));
- Utils::FileSaver srcSaver(src->fileName());
- srcSaver.write(data->srcText);
- srcSaver.finalize();
- src->setUtf8Source(data->srcText);
- src->parse();
- src->check();
+ return completions;
+ }
- data->snapshot.insert(src);
+ void insertText(const QByteArray &text)
+ {
+ Utils::ChangeSet change;
+ change.insert(position, QLatin1String(text));
+ QTextCursor cursor(textDocument);
+ change.apply(&cursor);
+ position += text.length();
+ }
- data->editor = new PlainTextEditorWidget(0);
- QString error;
- data->editor->open(&error, src->fileName(), src->fileName());
+private:
+ QByteArray source;
+ int position;
+ Snapshot snapshot;
+ BaseTextEditorWidget *editorWidget;
+ QTextDocument *textDocument;
+ IEditor *editor;
- data->doc = data->editor->document();
-}
+ CppModelManager *cmm;
+};
void CppToolsPlugin::test_completion_forward_declarations_present()
{
- TestData data;
- data.srcText = "\n"
- "class Foo\n"
- "{\n"
- " struct Bar;\n"
- " int i;\n"
- "};\n"
- "\n"
- "struct Foo::Bar \n"
- "{\n"
- " Bar() {}\n"
- "};\n"
- "\n"
- "@\n"
- "// padding so we get the scope right\n";
-
- setup(&data);
-
- Utils::ChangeSet change;
- change.insert(data.pos, QLatin1String("Foo::Bar::"));
- QTextCursor cursor(data.doc);
- change.apply(&cursor);
- data.pos += 10;
+ const QByteArray source =
+ "\n"
+ "class Foo\n"
+ "{\n"
+ " struct Bar;\n"
+ " int i;\n"
+ "};\n"
+ "\n"
+ "struct Foo::Bar \n"
+ "{\n"
+ " Bar() {}\n"
+ "};\n"
+ "\n"
+ "@\n"
+ "// padding so we get the scope right\n";
+ CompletionTestCase test(source, "Foo::Bar::");
QStringList expected;
expected.append(QLatin1String("Bar"));
- QStringList completions = getCompletions(data);
-
+ const QStringList completions = test.getCompletions();
QCOMPARE(completions, expected);
}
void CppToolsPlugin::test_completion_inside_parentheses_c_style_conversion()
{
- TestData data;
- data.srcText = "\n"
+ const QByteArray source = "\n"
"class Base\n"
"{\n"
" int i_base;\n"
@@ -169,30 +197,19 @@ void CppToolsPlugin::test_completion_inside_parentheses_c_style_conversion()
" @\n"
"}\n"
;
+ CompletionTestCase test(source, "((Derived *)b)->");
- setup(&data);
-
- Utils::ChangeSet change;
- QString txt = QLatin1String("((Derived *)b)->");
- change.insert(data.pos, txt);
- QTextCursor cursor(data.doc);
- change.apply(&cursor);
- data.pos += txt.length();
-
- QStringList completions = getCompletions(data);
-
+ const QStringList completions = test.getCompletions();
QCOMPARE(completions.size(), 4);
QVERIFY(completions.contains(QLatin1String("Derived")));
QVERIFY(completions.contains(QLatin1String("Base")));
QVERIFY(completions.contains(QLatin1String("i_derived")));
QVERIFY(completions.contains(QLatin1String("i_base")));
-
}
void CppToolsPlugin::test_completion_inside_parentheses_cast_operator_conversion()
{
- TestData data;
- data.srcText = "\n"
+ const QByteArray source = "\n"
"class Base\n"
"{\n"
" int i_base;\n"
@@ -210,18 +227,9 @@ void CppToolsPlugin::test_completion_inside_parentheses_cast_operator_conversion
" @\n"
"}\n"
;
+ CompletionTestCase test(source, "(static_cast<Derived *>(b))->");
- setup(&data);
-
- Utils::ChangeSet change;
- QString txt = QLatin1String("(static_cast<Derived *>(b))->");
- change.insert(data.pos, txt);
- QTextCursor cursor(data.doc);
- change.apply(&cursor);
- data.pos += txt.length();
-
- QStringList completions = getCompletions(data);
-
+ const QStringList completions = test.getCompletions();
QCOMPARE(completions.size(), 4);
QVERIFY(completions.contains(QLatin1String("Derived")));
QVERIFY(completions.contains(QLatin1String("Base")));
@@ -231,8 +239,7 @@ void CppToolsPlugin::test_completion_inside_parentheses_cast_operator_conversion
void CppToolsPlugin::test_completion_basic_1()
{
- TestData data;
- data.srcText = "\n"
+ const QByteArray source = "\n"
"class Foo\n"
"{\n"
" void foo();\n"
@@ -244,25 +251,18 @@ void CppToolsPlugin::test_completion_basic_1()
" @\n"
" // padding so we get the scope right\n"
"}";
+ CompletionTestCase test(source);
- setup(&data);
-
- QStringList basicCompletions = getCompletions(data);
-
+ QStringList basicCompletions = test.getCompletions();
QVERIFY(!basicCompletions.contains(QLatin1String("foo")));
QVERIFY(!basicCompletions.contains(QLatin1String("m")));
QVERIFY(basicCompletions.contains(QLatin1String("Foo")));
QVERIFY(basicCompletions.contains(QLatin1String("func")));
QVERIFY(basicCompletions.contains(QLatin1String("f")));
- Utils::ChangeSet change;
- change.insert(data.pos, QLatin1String("f."));
- QTextCursor cursor(data.doc);
- change.apply(&cursor);
- data.pos += 2;
-
- QStringList memberCompletions = getCompletions(data);
+ test.insertText("f.");
+ QStringList memberCompletions = test.getCompletions();
QVERIFY(memberCompletions.contains(QLatin1String("foo")));
QVERIFY(memberCompletions.contains(QLatin1String("m")));
QVERIFY(!memberCompletions.contains(QLatin1String("func")));
@@ -271,8 +271,7 @@ void CppToolsPlugin::test_completion_basic_1()
void CppToolsPlugin::test_completion_template_1()
{
- TestData data;
- data.srcText = "\n"
+ const QByteArray source = "\n"
"template <class T>\n"
"class Foo\n"
"{\n"
@@ -286,17 +285,9 @@ void CppToolsPlugin::test_completion_template_1()
" @\n"
" // padding so we get the scope right\n"
"}";
+ CompletionTestCase test(source, "Foo::");
- setup(&data);
-
- Utils::ChangeSet change;
- change.insert(data.pos, QLatin1String("Foo::"));
- QTextCursor cursor(data.doc);
- change.apply(&cursor);
- data.pos += 5;
-
- QStringList completions = getCompletions(data);
-
+ const QStringList completions = test.getCompletions();
QVERIFY(completions.contains(QLatin1String("Type")));
QVERIFY(completions.contains(QLatin1String("foo")));
QVERIFY(completions.contains(QLatin1String("m")));
@@ -307,8 +298,7 @@ void CppToolsPlugin::test_completion_template_1()
void CppToolsPlugin::test_completion_template_2()
{
- TestData data;
- data.srcText = "\n"
+ const QByteArray source = "\n"
"template <class T>\n"
"struct List\n"
"{\n"
@@ -322,18 +312,9 @@ void CppToolsPlugin::test_completion_template_2()
" @\n"
" // padding so we get the scope right\n"
"}";
+ CompletionTestCase test(source, "l.at(0).");
- setup(&data);
-
- Utils::ChangeSet change;
- QString txt = QLatin1String("l.at(0).");
- change.insert(data.pos, txt);
- QTextCursor cursor(data.doc);
- change.apply(&cursor);
- data.pos += txt.length();
-
- QStringList completions = getCompletions(data);
-
+ const QStringList completions = test.getCompletions();
QCOMPARE(completions.size(), 3);
QVERIFY(completions.contains(QLatin1String("Tupple")));
QVERIFY(completions.contains(QLatin1String("a")));
@@ -342,8 +323,7 @@ void CppToolsPlugin::test_completion_template_2()
void CppToolsPlugin::test_completion_template_3()
{
- TestData data;
- data.srcText = "\n"
+ const QByteArray source = "\n"
"template <class T>\n"
"struct List\n"
"{\n"
@@ -357,18 +337,9 @@ void CppToolsPlugin::test_completion_template_3()
" @\n"
" // padding so we get the scope right\n"
"}";
+ CompletionTestCase test(source, "l.t.");
- setup(&data);
-
- Utils::ChangeSet change;
- QString txt = QLatin1String("l.t.");
- change.insert(data.pos, txt);
- QTextCursor cursor(data.doc);
- change.apply(&cursor);
- data.pos += txt.length();
-
- QStringList completions = getCompletions(data);
-
+ const QStringList completions = test.getCompletions();
QCOMPARE(completions.size(), 3);
QVERIFY(completions.contains(QLatin1String("Tupple")));
QVERIFY(completions.contains(QLatin1String("a")));
@@ -377,8 +348,7 @@ void CppToolsPlugin::test_completion_template_3()
void CppToolsPlugin::test_completion_template_4()
{
- TestData data;
- data.srcText = "\n"
+ const QByteArray source = "\n"
"template <class T>\n"
"struct List\n"
"{\n"
@@ -393,18 +363,9 @@ void CppToolsPlugin::test_completion_template_4()
" @\n"
" // padding so we get the scope right\n"
"}";
+ CompletionTestCase test(source, "l.u.");
- setup(&data);
-
- Utils::ChangeSet change;
- QString txt = QLatin1String("l.u.");
- change.insert(data.pos, txt);
- QTextCursor cursor(data.doc);
- change.apply(&cursor);
- data.pos += txt.length();
-
- QStringList completions = getCompletions(data);
-
+ const QStringList completions = test.getCompletions();
QCOMPARE(completions.size(), 3);
QVERIFY(completions.contains(QLatin1String("Tupple")));
QVERIFY(completions.contains(QLatin1String("a")));
@@ -413,8 +374,7 @@ void CppToolsPlugin::test_completion_template_4()
void CppToolsPlugin::test_completion_template_5()
{
- TestData data;
- data.srcText = "\n"
+ const QByteArray source = "\n"
"template <class T>\n"
"struct List\n"
"{\n"
@@ -429,18 +389,9 @@ void CppToolsPlugin::test_completion_template_5()
" @\n"
" // padding so we get the scope right\n"
"}";
+ CompletionTestCase test(source, "l.u.");
- setup(&data);
-
- Utils::ChangeSet change;
- QString txt = QLatin1String("l.u.");
- change.insert(data.pos, txt);
- QTextCursor cursor(data.doc);
- change.apply(&cursor);
- data.pos += txt.length();
-
- QStringList completions = getCompletions(data);
-
+ const QStringList completions = test.getCompletions();
QCOMPARE(completions.size(), 3);
QVERIFY(completions.contains(QLatin1String("Tupple")));
QVERIFY(completions.contains(QLatin1String("a")));
@@ -449,8 +400,7 @@ void CppToolsPlugin::test_completion_template_5()
void CppToolsPlugin::test_completion_template_6()
{
- TestData data;
- data.srcText = "\n"
+ const QByteArray source = "\n"
"class Item\n"
"{\n"
" int i;\n"
@@ -469,28 +419,17 @@ void CppToolsPlugin::test_completion_template_6()
"ItemContainer container;\n"
"@\n"
;
+ CompletionTestCase test(source, "container.get().");
- setup(&data);
-
- Utils::ChangeSet change;
- QString txt = QLatin1String("container.get().");
- change.insert(data.pos, txt);
- QTextCursor cursor(data.doc);
- change.apply(&cursor);
- data.pos += txt.length();
-
- QStringList completions = getCompletions(data);
-
+ const QStringList completions = test.getCompletions();
QCOMPARE(completions.size(), 2);
QVERIFY(completions.contains(QLatin1String("Item")));
QVERIFY(completions.contains(QLatin1String("i")));
}
-
void CppToolsPlugin::test_completion_template_7()
{
- TestData data;
- data.srcText = "\n"
+ const QByteArray source = "\n"
"struct Test\n"
"{\n"
" int i;\n"
@@ -512,18 +451,9 @@ void CppToolsPlugin::test_completion_template_7()
"TemplateClass<Test> p(new Test);\n"
"@\n"
;
+ CompletionTestCase test(source, "p->");
- setup(&data);
-
- Utils::ChangeSet change;
- QString txt = QLatin1String("p->");
- change.insert(data.pos, txt);
- QTextCursor cursor(data.doc);
- change.apply(&cursor);
- data.pos += txt.length();
-
- QStringList completions = getCompletions(data);
-
+ const QStringList completions = test.getCompletions();
QCOMPARE(completions.size(), 2);
QVERIFY(completions.contains(QLatin1String("Test")));
QVERIFY(completions.contains(QLatin1String("i")));
@@ -531,8 +461,7 @@ void CppToolsPlugin::test_completion_template_7()
void CppToolsPlugin::test_completion_type_of_pointer_is_typedef()
{
- TestData data;
- data.srcText = "\n"
+ const QByteArray source = "\n"
"typedef struct Foo\n"
"{\n"
" int foo;\n"
@@ -540,18 +469,9 @@ void CppToolsPlugin::test_completion_type_of_pointer_is_typedef()
"Foo *bar;\n"
"@\n"
;
+ CompletionTestCase test(source, "bar->");
- setup(&data);
-
- Utils::ChangeSet change;
- QString txt = QLatin1String("bar->");
- change.insert(data.pos, txt);
- QTextCursor cursor(data.doc);
- change.apply(&cursor);
- data.pos += txt.length();
-
- QStringList completions = getCompletions(data);
-
+ const QStringList completions = test.getCompletions();
QCOMPARE(completions.size(), 2);
QVERIFY(completions.contains(QLatin1String("Foo")));
QVERIFY(completions.contains(QLatin1String("foo")));
@@ -559,8 +479,7 @@ void CppToolsPlugin::test_completion_type_of_pointer_is_typedef()
void CppToolsPlugin::test_completion_instantiate_full_specialization()
{
- TestData data;
- data.srcText = "\n"
+ const QByteArray source = "\n"
"template<typename T>\n"
"struct Template\n"
"{\n"
@@ -576,18 +495,9 @@ void CppToolsPlugin::test_completion_instantiate_full_specialization()
"Template<char> templateChar;\n"
"@\n"
;
+ CompletionTestCase test(source, "templateChar.");
- setup(&data);
-
- Utils::ChangeSet change;
- QString txt = QLatin1String("templateChar.");
- change.insert(data.pos, txt);
- QTextCursor cursor(data.doc);
- change.apply(&cursor);
- data.pos += txt.length();
-
- QStringList completions = getCompletions(data);
-
+ const QStringList completions = test.getCompletions();
QCOMPARE(completions.size(), 2);
QVERIFY(completions.contains(QLatin1String("Template")));
QVERIFY(completions.contains(QLatin1String("templateChar_i")));
@@ -598,17 +508,9 @@ void CppToolsPlugin::test_completion()
QFETCH(QByteArray, code);
QFETCH(QStringList, expectedCompletions);
- TestData data;
- data.srcText = code;
- setup(&data);
-
- Utils::ChangeSet change;
- change.insert(data.pos, QLatin1String("c."));
- QTextCursor cursor(data.doc);
- change.apply(&cursor);
- data.pos += 2;
+ CompletionTestCase test(code, "c.");
- QStringList actualCompletions = getCompletions(data);
+ QStringList actualCompletions = test.getCompletions();
actualCompletions.sort();
expectedCompletions.sort();
@@ -643,7 +545,6 @@ void CppToolsPlugin::test_completion_template_as_base_data()
completions.append(QLatin1String("otherMember"));
QTest::newRow("case: base as template directly") << code << completions;
-
completions.clear();
code = "\n"
"class Data { int dataMember; };\n"
@@ -663,7 +564,6 @@ void CppToolsPlugin::test_completion_template_as_base_data()
completions.append(QLatin1String("moreMember"));
QTest::newRow("case: base as class template") << code << completions;
-
completions.clear();
code = "\n"
"class Data { int dataMember; };\n"
@@ -683,7 +583,6 @@ void CppToolsPlugin::test_completion_template_as_base_data()
completions.append(QLatin1String("moreMember"));
QTest::newRow("case: base as globally qualified class template") << code << completions;
-
completions.clear();
code = "\n"
"class Data { int dataMember; };\n"
@@ -705,7 +604,6 @@ void CppToolsPlugin::test_completion_template_as_base_data()
completions.append(QLatin1String("moreMember"));
QTest::newRow("case: base as namespace qualified class template") << code << completions;
-
completions.clear();
code = "\n"
"class Data { int dataMember; };\n"
@@ -725,7 +623,6 @@ void CppToolsPlugin::test_completion_template_as_base_data()
completions.append(QLatin1String("finalMember"));
QTest::newRow("case: base as nested template name") << code << completions;
-
completions.clear();
code = "\n"
"class Data { int dataMember; };\n"
@@ -830,9 +727,7 @@ void CppToolsPlugin::test_completion_use_global_identifier_as_base_class_data()
completions.clear();
- //this test does not work due to the bug QTCREATORBUG-7912
-
-
+ // This test does not work due to the bug QTCREATORBUG-7912
// code = "\n"
// "struct Global\n"
// "{\n"
@@ -1032,7 +927,6 @@ void CppToolsPlugin::test_completion_base_class_has_name_the_same_as_derived_dat
<< code << completions;
completions.clear();
-
}
void CppToolsPlugin::test_completion_cyclic_inheritance()
@@ -1196,11 +1090,9 @@ void CppToolsPlugin::test_completion_template_function()
QFETCH(QByteArray, code);
QFETCH(QStringList, expectedCompletions);
- TestData data;
- data.srcText = code;
- setup(&data);
+ CompletionTestCase test(code);
- QStringList actualCompletions = getCompletions(data);
+ QStringList actualCompletions = test.getCompletions();
actualCompletions.sort();
expectedCompletions.sort();
@@ -1297,8 +1189,7 @@ void CppToolsPlugin::test_completion_enclosing_template_class_data()
void CppToolsPlugin::test_completion_instantiate_nested_class_when_enclosing_is_template()
{
- TestData data;
- data.srcText = "\n"
+ const QByteArray source = "\n"
"struct Foo \n"
"{\n"
" int foo_i;\n"
@@ -1318,18 +1209,9 @@ void CppToolsPlugin::test_completion_instantiate_nested_class_when_enclosing_is_
"Enclosing<Foo> enclosing;\n"
"@\n"
;
+ CompletionTestCase test(source, "enclosing.nested.nested_t.");
- setup(&data);
-
- Utils::ChangeSet change;
- QString txt = QLatin1String("enclosing.nested.nested_t.");
- change.insert(data.pos, txt);
- QTextCursor cursor(data.doc);
- change.apply(&cursor);
- data.pos += txt.length();
-
- QStringList completions = getCompletions(data);
-
+ const QStringList completions = test.getCompletions();
QCOMPARE(completions.size(), 2);
QVERIFY(completions.contains(QLatin1String("Foo")));
QVERIFY(completions.contains(QLatin1String("foo_i")));
@@ -1337,8 +1219,7 @@ void CppToolsPlugin::test_completion_instantiate_nested_class_when_enclosing_is_
void CppToolsPlugin::test_completion_instantiate_nested_of_nested_class_when_enclosing_is_template()
{
- TestData data;
- data.srcText = "\n"
+ const QByteArray source = "\n"
"struct Foo \n"
"{\n"
" int foo_i;\n"
@@ -1362,18 +1243,9 @@ void CppToolsPlugin::test_completion_instantiate_nested_of_nested_class_when_enc
"Enclosing<Foo> enclosing;\n"
"@\n"
;
+ CompletionTestCase test(source, "enclosing.nested.nestedNested.nestedNested_t.");
- setup(&data);
-
- Utils::ChangeSet change;
- QString txt = QLatin1String("enclosing.nested.nestedNested.nestedNested_t.");
- change.insert(data.pos, txt);
- QTextCursor cursor(data.doc);
- change.apply(&cursor);
- data.pos += txt.length();
-
- QStringList completions = getCompletions(data);
-
+ const QStringList completions = test.getCompletions();
QCOMPARE(completions.size(), 2);
QVERIFY(completions.contains(QLatin1String("Foo")));
QVERIFY(completions.contains(QLatin1String("foo_i")));
@@ -1381,8 +1253,7 @@ void CppToolsPlugin::test_completion_instantiate_nested_of_nested_class_when_enc
void CppToolsPlugin::test_completion_instantiate_template_with_default_argument_type()
{
- TestData data;
- data.srcText = "\n"
+ const QByteArray source = "\n"
"struct Foo\n"
"{\n"
" int bar;\n"
@@ -1397,17 +1268,9 @@ void CppToolsPlugin::test_completion_instantiate_template_with_default_argument_
"Template<> templateWithDefaultTypeOfArgument;\n"
"@\n"
;
- setup(&data);
-
- Utils::ChangeSet change;
- QString txt = QLatin1String("templateWithDefaultTypeOfArgument.t.");
- change.insert(data.pos, txt);
- QTextCursor cursor(data.doc);
- change.apply(&cursor);
- data.pos += txt.length();
-
- QStringList completions = getCompletions(data);
+ CompletionTestCase test(source, "templateWithDefaultTypeOfArgument.t.");
+ const QStringList completions = test.getCompletions();
QCOMPARE(completions.size(), 2);
QVERIFY(completions.contains(QLatin1String("Foo")));
QVERIFY(completions.contains(QLatin1String("bar")));
@@ -1415,8 +1278,7 @@ void CppToolsPlugin::test_completion_instantiate_template_with_default_argument_
void CppToolsPlugin::test_completion_instantiate_template_with_default_argument_type_as_template()
{
- TestData data;
- data.srcText = "\n"
+ const QByteArray source = "\n"
"struct Foo\n"
"{\n"
" int bar;\n"
@@ -1436,17 +1298,9 @@ void CppToolsPlugin::test_completion_instantiate_template_with_default_argument_
"Template<Foo> templateWithDefaultTypeOfArgument;\n"
"@\n"
;
- setup(&data);
-
- Utils::ChangeSet change;
- QString txt = QLatin1String("templateWithDefaultTypeOfArgument.s.t.");
- change.insert(data.pos, txt);
- QTextCursor cursor(data.doc);
- change.apply(&cursor);
- data.pos += txt.length();
-
- QStringList completions = getCompletions(data);
+ CompletionTestCase test(source, "templateWithDefaultTypeOfArgument.s.t.");
+ const QStringList completions = test.getCompletions();
QCOMPARE(completions.size(), 2);
QVERIFY(completions.contains(QLatin1String("Foo")));
QVERIFY(completions.contains(QLatin1String("bar")));
@@ -1454,25 +1308,16 @@ void CppToolsPlugin::test_completion_instantiate_template_with_default_argument_
void CppToolsPlugin::test_completion_member_access_operator_1()
{
- TestData data;
- data.srcText = "\n"
+ const QByteArray source = "\n"
"struct S { void t(); };\n"
"void f() { S *s;\n"
"@\n"
"}\n"
;
- setup(&data);
-
- Utils::ChangeSet change;
- QString txt = QLatin1String("s.");
- change.insert(data.pos, txt);
- QTextCursor cursor(data.doc);
- change.apply(&cursor);
- data.pos += txt.length();
+ CompletionTestCase test(source, "s.");
bool replaceAccessOperator = false;
- QStringList completions = getCompletions(data, &replaceAccessOperator);
-
+ const QStringList completions = test.getCompletions(&replaceAccessOperator);
QCOMPARE(completions.size(), 2);
QVERIFY(completions.contains(QLatin1String("S")));
QVERIFY(completions.contains(QLatin1String("t")));
@@ -1481,26 +1326,17 @@ void CppToolsPlugin::test_completion_member_access_operator_1()
void CppToolsPlugin::test_completion_typedef_of_type_and_decl_of_type_no_replace_access_operator()
{
- TestData data;
- data.srcText = "\n"
+ const QByteArray source = "\n"
"struct S { int m; };\n"
"typedef S SType;\n"
"SType p;\n"
"@\n"
"}\n"
;
- setup(&data);
-
- Utils::ChangeSet change;
- QString txt = QLatin1String("p.");
- change.insert(data.pos, txt);
- QTextCursor cursor(data.doc);
- change.apply(&cursor);
- data.pos += txt.length();
+ CompletionTestCase test(source, "p.");
bool replaceAccessOperator = false;
- QStringList completions = getCompletions(data, &replaceAccessOperator);
-
+ const QStringList completions = test.getCompletions(&replaceAccessOperator);
QCOMPARE(completions.size(), 2);
QVERIFY(completions.contains(QLatin1String("S")));
QVERIFY(completions.contains(QLatin1String("m")));
@@ -1509,52 +1345,34 @@ void CppToolsPlugin::test_completion_typedef_of_type_and_decl_of_type_no_replace
void CppToolsPlugin::test_completion_typedef_of_pointer_and_decl_of_pointer_no_replace_access_operator()
{
- TestData data;
- data.srcText = "\n"
+ const QByteArray source = "\n"
"struct S { int m; };\n"
"typedef S *SType;\n"
"SType *p;\n"
"@\n"
"}\n"
;
- setup(&data);
-
- Utils::ChangeSet change;
- QString txt = QLatin1String("p.");
- change.insert(data.pos, txt);
- QTextCursor cursor(data.doc);
- change.apply(&cursor);
- data.pos += txt.length();
+ CompletionTestCase test(source, "p.");
bool replaceAccessOperator = false;
- QStringList completions = getCompletions(data, &replaceAccessOperator);
-
+ const QStringList completions = test.getCompletions(&replaceAccessOperator);
QCOMPARE(completions.size(), 0);
QVERIFY(!replaceAccessOperator);
}
void CppToolsPlugin::test_completion_typedef_of_type_and_decl_of_pointer_replace_access_operator()
{
- TestData data;
- data.srcText = "\n"
+ const QByteArray source = "\n"
"struct S { int m; };\n"
"typedef S SType;\n"
"SType *p;\n"
"@\n"
"}\n"
;
- setup(&data);
-
- Utils::ChangeSet change;
- QString txt = QLatin1String("p.");
- change.insert(data.pos, txt);
- QTextCursor cursor(data.doc);
- change.apply(&cursor);
- data.pos += txt.length();
+ CompletionTestCase test(source, "p.");
bool replaceAccessOperator = false;
- QStringList completions = getCompletions(data, &replaceAccessOperator);
-
+ const QStringList completions = test.getCompletions(&replaceAccessOperator);
QCOMPARE(completions.size(), 2);
QVERIFY(completions.contains(QLatin1String("S")));
QVERIFY(completions.contains(QLatin1String("m")));
@@ -1563,26 +1381,17 @@ void CppToolsPlugin::test_completion_typedef_of_type_and_decl_of_pointer_replace
void CppToolsPlugin::test_completion_typedef_of_pointer_and_decl_of_type_replace_access_operator()
{
- TestData data;
- data.srcText = "\n"
+ const QByteArray source = "\n"
"struct S { int m; };\n"
"typedef S* SPtr;\n"
"SPtr p;\n"
"@\n"
"}\n"
;
- setup(&data);
-
- Utils::ChangeSet change;
- QString txt = QLatin1String("p.");
- change.insert(data.pos, txt);
- QTextCursor cursor(data.doc);
- change.apply(&cursor);
- data.pos += txt.length();
+ CompletionTestCase test(source, "p.");
bool replaceAccessOperator = false;
- QStringList completions = getCompletions(data, &replaceAccessOperator);
-
+ const QStringList completions = test.getCompletions(&replaceAccessOperator);
QCOMPARE(completions.size(), 2);
QVERIFY(completions.contains(QLatin1String("S")));
QVERIFY(completions.contains(QLatin1String("m")));
@@ -1591,26 +1400,17 @@ void CppToolsPlugin::test_completion_typedef_of_pointer_and_decl_of_type_replace
void CppToolsPlugin::test_completion_predecl_typedef_of_type_and_decl_of_pointer_replace_access_operator()
{
- TestData data;
- data.srcText = "\n"
+ const QByteArray source = "\n"
"typedef struct S SType;\n"
"struct S { int m; };\n"
"SType *p;\n"
"@\n"
"}\n"
;
- setup(&data);
-
- Utils::ChangeSet change;
- QString txt = QLatin1String("p.");
- change.insert(data.pos, txt);
- QTextCursor cursor(data.doc);
- change.apply(&cursor);
- data.pos += txt.length();
+ CompletionTestCase test(source, "p.");
bool replaceAccessOperator = false;
- QStringList completions = getCompletions(data, &replaceAccessOperator);
-
+ const QStringList completions = test.getCompletions(&replaceAccessOperator);
QCOMPARE(completions.size(), 2);
QVERIFY(completions.contains(QLatin1String("S")));
QVERIFY(completions.contains(QLatin1String("m")));
@@ -1619,26 +1419,17 @@ void CppToolsPlugin::test_completion_predecl_typedef_of_type_and_decl_of_pointer
void CppToolsPlugin::test_completion_predecl_typedef_of_type_and_decl_type_no_replace_access_operator()
{
- TestData data;
- data.srcText = "\n"
+ const QByteArray source = "\n"
"typedef struct S SType;\n"
"struct S { int m; };\n"
"SType p;\n"
"@\n"
"}\n"
;
- setup(&data);
-
- Utils::ChangeSet change;
- QString txt = QLatin1String("p.");
- change.insert(data.pos, txt);
- QTextCursor cursor(data.doc);
- change.apply(&cursor);
- data.pos += txt.length();
+ CompletionTestCase test(source, "p.");
bool replaceAccessOperator = false;
- QStringList completions = getCompletions(data, &replaceAccessOperator);
-
+ const QStringList completions = test.getCompletions(&replaceAccessOperator);
QCOMPARE(completions.size(), 2);
QVERIFY(completions.contains(QLatin1String("S")));
QVERIFY(completions.contains(QLatin1String("m")));
@@ -1647,52 +1438,34 @@ void CppToolsPlugin::test_completion_predecl_typedef_of_type_and_decl_type_no_re
void CppToolsPlugin::test_completion_predecl_typedef_of_pointer_and_decl_of_pointer_no_replace_access_operator()
{
- TestData data;
- data.srcText = "\n"
+ const QByteArray source = "\n"
"typedef struct S *SType;\n"
"struct S { int m; };\n"
"SType *p;\n"
"@\n"
"}\n"
;
- setup(&data);
-
- Utils::ChangeSet change;
- QString txt = QLatin1String("p.");
- change.insert(data.pos, txt);
- QTextCursor cursor(data.doc);
- change.apply(&cursor);
- data.pos += txt.length();
+ CompletionTestCase test(source, "p.");
bool replaceAccessOperator = false;
- QStringList completions = getCompletions(data, &replaceAccessOperator);
-
+ const QStringList completions = test.getCompletions(&replaceAccessOperator);
QCOMPARE(completions.size(), 0);
QVERIFY(!replaceAccessOperator);
}
void CppToolsPlugin::test_completion_predecl_typedef_of_pointer_and_decl_of_type_replace_access_operator()
{
- TestData data;
- data.srcText = "\n"
+ const QByteArray source = "\n"
"typedef struct S *SType;\n"
"struct S { int m; };\n"
"SType p;\n"
"@\n"
"}\n"
;
- setup(&data);
-
- Utils::ChangeSet change;
- QString txt = QLatin1String("p.");
- change.insert(data.pos, txt);
- QTextCursor cursor(data.doc);
- change.apply(&cursor);
- data.pos += txt.length();
+ CompletionTestCase test(source, "p.");
bool replaceAccessOperator = false;
- QStringList completions = getCompletions(data, &replaceAccessOperator);
-
+ const QStringList completions = test.getCompletions(&replaceAccessOperator);
QCOMPARE(completions.size(), 2);
QVERIFY(completions.contains(QLatin1String("S")));
QVERIFY(completions.contains(QLatin1String("m")));
@@ -1701,8 +1474,7 @@ void CppToolsPlugin::test_completion_predecl_typedef_of_pointer_and_decl_of_type
void CppToolsPlugin::test_completion_typedef_of_pointer()
{
- TestData data;
- data.srcText = "\n"
+ const QByteArray source = "\n"
"struct Foo { int bar; };\n"
"typedef Foo *FooPtr;\n"
"void main()\n"
@@ -1711,17 +1483,9 @@ void CppToolsPlugin::test_completion_typedef_of_pointer()
" @\n"
" // padding so we get the scope right\n"
"}";
- setup(&data);
-
- Utils::ChangeSet change;
- QString txt = QLatin1String("ptr->");
- change.insert(data.pos, txt);
- QTextCursor cursor(data.doc);
- change.apply(&cursor);
- data.pos += txt.length();
-
- QStringList completions = getCompletions(data);
+ CompletionTestCase test(source, "ptr->");
+ const QStringList completions = test.getCompletions();
QCOMPARE(completions.size(), 2);
QVERIFY(completions.contains(QLatin1String("Foo")));
QVERIFY(completions.contains(QLatin1String("bar")));
@@ -1729,8 +1493,7 @@ void CppToolsPlugin::test_completion_typedef_of_pointer()
void CppToolsPlugin::test_completion_typedef_of_pointer_inside_function()
{
- TestData data;
- data.srcText = "\n"
+ const QByteArray source = "\n"
"struct Foo { int bar; };\n"
"void f()\n"
"{\n"
@@ -1739,17 +1502,9 @@ void CppToolsPlugin::test_completion_typedef_of_pointer_inside_function()
" @\n"
" // padding so we get the scope right\n"
"}";
- setup(&data);
-
- Utils::ChangeSet change;
- QString txt = QLatin1String("ptr->");
- change.insert(data.pos, txt);
- QTextCursor cursor(data.doc);
- change.apply(&cursor);
- data.pos += txt.length();
-
- QStringList completions = getCompletions(data);
+ CompletionTestCase test(source, "ptr->");
+ const QStringList completions = test.getCompletions();
QCOMPARE(completions.size(), 2);
QVERIFY(completions.contains(QLatin1String("Foo")));
QVERIFY(completions.contains(QLatin1String("bar")));
@@ -1757,8 +1512,7 @@ void CppToolsPlugin::test_completion_typedef_of_pointer_inside_function()
void CppToolsPlugin::test_completion_typedef_is_inside_function_before_declaration_block()
{
- TestData data;
- data.srcText = "\n"
+ const QByteArray source = "\n"
"struct Foo { int bar; };\n"
"void f()\n"
"{\n"
@@ -1770,17 +1524,9 @@ void CppToolsPlugin::test_completion_typedef_is_inside_function_before_declarati
" }"
"}"
;
- setup(&data);
-
- Utils::ChangeSet change;
- QString txt = QLatin1String("ptr->");
- change.insert(data.pos, txt);
- QTextCursor cursor(data.doc);
- change.apply(&cursor);
- data.pos += txt.length();
-
- QStringList completions = getCompletions(data);
+ CompletionTestCase test(source, "ptr->");
+ const QStringList completions = test.getCompletions();
QCOMPARE(completions.size(), 2);
QVERIFY(completions.contains(QLatin1String("Foo")));
QVERIFY(completions.contains(QLatin1String("bar")));
@@ -1788,8 +1534,7 @@ void CppToolsPlugin::test_completion_typedef_is_inside_function_before_declarati
void CppToolsPlugin::test_completion_resolve_complex_typedef_with_template()
{
- TestData data;
- data.srcText = "\n"
+ const QByteArray source = "\n"
"template <typename T>\n"
"struct Template2\n"
"{\n"
@@ -1812,17 +1557,9 @@ void CppToolsPlugin::test_completion_resolve_complex_typedef_with_template()
" // padding so we get the scope right\n"
"}\n"
;
- setup(&data);
-
- Utils::ChangeSet change;
- QString txt = QLatin1String("template2.templateTypedef.");
- change.insert(data.pos, txt);
- QTextCursor cursor(data.doc);
- change.apply(&cursor);
- data.pos += txt.length();
-
- QStringList completions = getCompletions(data);
+ CompletionTestCase test(source, "template2.templateTypedef.");
+ const QStringList completions = test.getCompletions();
QCOMPARE(completions.size(), 3);
QVERIFY(completions.contains(QLatin1String("Foo")));
QVERIFY(completions.contains(QLatin1String("bar")));
@@ -1831,8 +1568,7 @@ void CppToolsPlugin::test_completion_resolve_complex_typedef_with_template()
void CppToolsPlugin::test_completion_template_specialization_with_pointer()
{
- TestData data;
- data.srcText = "\n"
+ const QByteArray source = "\n"
"template <typename T>\n"
"struct Template\n"
"{\n"
@@ -1846,17 +1582,9 @@ void CppToolsPlugin::test_completion_template_specialization_with_pointer()
"Template<int*> templ;\n"
"@\n"
;
- setup(&data);
-
- Utils::ChangeSet change;
- QString txt = QLatin1String("templ.");
- change.insert(data.pos, txt);
- QTextCursor cursor(data.doc);
- change.apply(&cursor);
- data.pos += txt.length();
-
- QStringList completions = getCompletions(data);
+ CompletionTestCase test(source, "templ.");
+ const QStringList completions = test.getCompletions();
QCOMPARE(completions.size(), 2);
QVERIFY(completions.contains(QLatin1String("Template")));
QVERIFY(completions.contains(QLatin1String("pointer")));
@@ -1864,8 +1592,7 @@ void CppToolsPlugin::test_completion_template_specialization_with_pointer()
void CppToolsPlugin::test_completion_typedef_using_templates1()
{
- TestData data;
- data.srcText = "\n"
+ const QByteArray source = "\n"
"namespace NS1\n"
"{\n"
"template<typename T>\n"
@@ -1898,17 +1625,9 @@ void CppToolsPlugin::test_completion_typedef_using_templates1()
" // padding so we get the scope right\n"
"}\n"
;
- setup(&data);
-
- Utils::ChangeSet change;
- QString txt = QLatin1String("s.p->");
- change.insert(data.pos, txt);
- QTextCursor cursor(data.doc);
- change.apply(&cursor);
- data.pos += txt.length();
-
- QStringList completions = getCompletions(data);
+ CompletionTestCase test(source, "s.p->");
+ const QStringList completions = test.getCompletions();
QCOMPARE(completions.size(), 2);
QVERIFY(completions.contains(QLatin1String("Foo")));
QVERIFY(completions.contains(QLatin1String("bar")));
@@ -1916,8 +1635,7 @@ void CppToolsPlugin::test_completion_typedef_using_templates1()
void CppToolsPlugin::test_completion_typedef_using_templates2()
{
- TestData data;
- data.srcText = "\n"
+ const QByteArray source = "\n"
"namespace NS1\n"
"{\n"
"template<typename T>\n"
@@ -1950,17 +1668,9 @@ void CppToolsPlugin::test_completion_typedef_using_templates2()
" // padding so we get the scope right\n"
"}\n"
;
- setup(&data);
-
- Utils::ChangeSet change;
- QString txt = QLatin1String("p->");
- change.insert(data.pos, txt);
- QTextCursor cursor(data.doc);
- change.apply(&cursor);
- data.pos += txt.length();
-
- QStringList completions = getCompletions(data);
+ CompletionTestCase test(source, "p->");
+ const QStringList completions = test.getCompletions();
QCOMPARE(completions.size(), 2);
QVERIFY(completions.contains(QLatin1String("Foo")));
QVERIFY(completions.contains(QLatin1String("bar")));
@@ -1968,8 +1678,7 @@ void CppToolsPlugin::test_completion_typedef_using_templates2()
void CppToolsPlugin::test_completion_namespace_alias_with_many_namespace_declarations()
{
- TestData data;
- data.srcText =
+ const QByteArray source =
"namespace NS1\n"
"{\n"
"namespace NS2\n"
@@ -1997,17 +1706,9 @@ void CppToolsPlugin::test_completion_namespace_alias_with_many_namespace_declara
" // padding so we get the scope right\n"
"}\n"
;
- setup(&data);
-
- Utils::ChangeSet change;
- QString txt = QLatin1String("NS::");
- change.insert(data.pos, txt);
- QTextCursor cursor(data.doc);
- change.apply(&cursor);
- data.pos += txt.length();
-
- QStringList completions = getCompletions(data);
+ CompletionTestCase test(source, "NS::");
+ const QStringList completions = test.getCompletions();
QCOMPARE(completions.size(), 2);
QVERIFY(completions.contains(QLatin1String("Foo1")));
QVERIFY(completions.contains(QLatin1String("Foo2")));
@@ -2015,8 +1716,7 @@ void CppToolsPlugin::test_completion_namespace_alias_with_many_namespace_declara
void CppToolsPlugin::test_completion_QTCREATORBUG9098()
{
- TestData data;
- data.srcText =
+ const QByteArray source =
"template <typename T>\n"
"class B\n"
"{\n"
@@ -2034,19 +1734,10 @@ void CppToolsPlugin::test_completion_QTCREATORBUG9098()
" // padding so we get the scope right\n"
" }\n"
"};\n"
-
;
- setup(&data);
-
- Utils::ChangeSet change;
- QString txt = QLatin1String("b.");
- change.insert(data.pos, txt);
- QTextCursor cursor(data.doc);
- change.apply(&cursor);
- data.pos += txt.length();
-
- QStringList completions = getCompletions(data);
+ CompletionTestCase test(source, "b.");
+ const QStringList completions = test.getCompletions();
QCOMPARE(completions.size(), 2);
QVERIFY(completions.contains(QLatin1String("c")));
QVERIFY(completions.contains(QLatin1String("B")));
@@ -2182,13 +1873,11 @@ void CppToolsPlugin::test_completion_type_and_using_declaration_data()
completions.append(QLatin1String("m"));
QTest::newRow("case: type inside namespace NS1 and using declaration inside NS2 namespace")
<< code << completions;
-
}
void CppToolsPlugin::test_completion_instantiate_template_with_anonymous_class()
{
- TestData data;
- data.srcText =
+ const QByteArray source =
"template <typename T>\n"
"struct S\n"
"{\n"
@@ -2200,27 +1889,17 @@ void CppToolsPlugin::test_completion_instantiate_template_with_anonymous_class()
" @\n"
" // padding so we get the scope right\n"
"}\n"
-
;
- setup(&data);
-
- Utils::ChangeSet change;
- QString txt = QLatin1String("s.");
- change.insert(data.pos, txt);
- QTextCursor cursor(data.doc);
- change.apply(&cursor);
- data.pos += txt.length();
-
- QStringList completions = getCompletions(data);
+ CompletionTestCase test(source, "s.");
+ const QStringList completions = test.getCompletions();
QCOMPARE(completions.size(), 1);
QVERIFY(completions.contains(QLatin1String("S")));
}
void CppToolsPlugin::test_completion_instantiate_template_function()
{
- TestData data;
- data.srcText =
+ const QByteArray source =
"template <typename T>\n"
"T* templateFunction() { return 0; }\n"
"struct A { int a; };\n"
@@ -2230,17 +1909,9 @@ void CppToolsPlugin::test_completion_instantiate_template_function()
" // padding so we get the scope right\n"
"}\n"
;
- setup(&data);
-
- Utils::ChangeSet change;
- QString txt = QLatin1String("templateFunction<A>()->");
- change.insert(data.pos, txt);
- QTextCursor cursor(data.doc);
- change.apply(&cursor);
- data.pos += txt.length();
-
- QStringList completions = getCompletions(data);
+ CompletionTestCase test(source, "templateFunction<A>()->");
+ const QStringList completions = test.getCompletions();
QCOMPARE(completions.size(), 2);
QVERIFY(completions.contains(QLatin1String("A")));
QVERIFY(completions.contains(QLatin1String("a")));
@@ -2248,8 +1919,7 @@ void CppToolsPlugin::test_completion_instantiate_template_function()
void CppToolsPlugin::test_completion_crash_cloning_template_class_QTCREATORBUG9329()
{
- TestData data;
- data.srcText =
+ const QByteArray source =
"struct A {};\n"
"template <typename T>\n"
"struct Templ {};\n"
@@ -2262,17 +1932,9 @@ void CppToolsPlugin::test_completion_crash_cloning_template_class_QTCREATORBUG93
" }\n"
"};\n"
;
- setup(&data);
-
- Utils::ChangeSet change;
- QString txt = QLatin1String("this->");
- change.insert(data.pos, txt);
- QTextCursor cursor(data.doc);
- change.apply(&cursor);
- data.pos += txt.length();
-
- QStringList completions = getCompletions(data);
+ CompletionTestCase test(source, "this->");
+ const QStringList completions = test.getCompletions();
QCOMPARE(completions.size(), 4);
QVERIFY(completions.contains(QLatin1String("A")));
QVERIFY(completions.contains(QLatin1String("B")));
@@ -2282,8 +1944,7 @@ void CppToolsPlugin::test_completion_crash_cloning_template_class_QTCREATORBUG93
void CppToolsPlugin::test_completion_recursive_auto_declarations1_QTCREATORBUG9503()
{
- TestData data;
- data.srcText =
+ const QByteArray source =
"void f()\n"
"{\n"
" auto object2 = object1;\n"
@@ -2292,24 +1953,15 @@ void CppToolsPlugin::test_completion_recursive_auto_declarations1_QTCREATORBUG95
" // padding so we get the scope right\n"
"}\n"
;
- setup(&data);
-
- Utils::ChangeSet change;
- QString txt = QLatin1String("object1.");
- change.insert(data.pos, txt);
- QTextCursor cursor(data.doc);
- change.apply(&cursor);
- data.pos += txt.length();
-
- QStringList completions = getCompletions(data);
+ CompletionTestCase test(source, "object1.");
+ const QStringList completions = test.getCompletions();
QCOMPARE(completions.size(), 0);
}
void CppToolsPlugin::test_completion_recursive_auto_declarations2_QTCREATORBUG9503()
{
- TestData data;
- data.srcText =
+ const QByteArray source =
"void f()\n"
"{\n"
" auto object3 = object1;\n"
@@ -2319,24 +1971,15 @@ void CppToolsPlugin::test_completion_recursive_auto_declarations2_QTCREATORBUG95
" // padding so we get the scope right\n"
"}\n"
;
- setup(&data);
-
- Utils::ChangeSet change;
- QString txt = QLatin1String("object1.");
- change.insert(data.pos, txt);
- QTextCursor cursor(data.doc);
- change.apply(&cursor);
- data.pos += txt.length();
-
- QStringList completions = getCompletions(data);
+ CompletionTestCase test(source, "object1.");
+ const QStringList completions = test.getCompletions();
QCOMPARE(completions.size(), 0);
}
void CppToolsPlugin::test_completion_recursive_typedefs_declarations1()
{
- TestData data;
- data.srcText =
+ const QByteArray source =
"void f()\n"
"{\n"
" typedef A B;\n"
@@ -2346,24 +1989,15 @@ void CppToolsPlugin::test_completion_recursive_typedefs_declarations1()
" // padding so we get the scope right\n"
"}\n"
;
- setup(&data);
-
- Utils::ChangeSet change;
- QString txt = QLatin1String("a.");
- change.insert(data.pos, txt);
- QTextCursor cursor(data.doc);
- change.apply(&cursor);
- data.pos += txt.length();
-
- QStringList completions = getCompletions(data);
+ CompletionTestCase test(source, "a.");
+ const QStringList completions = test.getCompletions();
QCOMPARE(completions.size(), 0);
}
void CppToolsPlugin::test_completion_recursive_typedefs_declarations2()
{
- TestData data;
- data.srcText =
+ const QByteArray source =
"void f()\n"
"{\n"
" typedef A C;\n"
@@ -2374,24 +2008,15 @@ void CppToolsPlugin::test_completion_recursive_typedefs_declarations2()
" // padding so we get the scope right\n"
"}\n"
;
- setup(&data);
-
- Utils::ChangeSet change;
- QString txt = QLatin1String("a.");
- change.insert(data.pos, txt);
- QTextCursor cursor(data.doc);
- change.apply(&cursor);
- data.pos += txt.length();
-
- QStringList completions = getCompletions(data);
+ CompletionTestCase test(source, "a.");
+ const QStringList completions = test.getCompletions();
QCOMPARE(completions.size(), 0);
}
void CppToolsPlugin::test_completion_recursive_using_declarations1()
{
- TestData data;
- data.srcText =
+ const QByteArray source =
"void f()\n"
"{\n"
" using B = A;\n"
@@ -2401,24 +2026,15 @@ void CppToolsPlugin::test_completion_recursive_using_declarations1()
" // padding so we get the scope right\n"
"}\n"
;
- setup(&data);
-
- Utils::ChangeSet change;
- QString txt = QLatin1String("a.");
- change.insert(data.pos, txt);
- QTextCursor cursor(data.doc);
- change.apply(&cursor);
- data.pos += txt.length();
-
- QStringList completions = getCompletions(data);
+ CompletionTestCase test(source, "a.");
+ const QStringList completions = test.getCompletions();
QCOMPARE(completions.size(), 0);
}
void CppToolsPlugin::test_completion_recursive_using_declarations2()
{
- TestData data;
- data.srcText =
+ const QByteArray source =
"void f()\n"
"{\n"
" using C = A;\n"
@@ -2429,24 +2045,15 @@ void CppToolsPlugin::test_completion_recursive_using_declarations2()
" // padding so we get the scope right\n"
"}\n"
;
- setup(&data);
-
- Utils::ChangeSet change;
- QString txt = QLatin1String("a.");
- change.insert(data.pos, txt);
- QTextCursor cursor(data.doc);
- change.apply(&cursor);
- data.pos += txt.length();
-
- QStringList completions = getCompletions(data);
+ CompletionTestCase test(source, "a.");
+ const QStringList completions = test.getCompletions();
QCOMPARE(completions.size(), 0);
}
void CppToolsPlugin::test_completion_recursive_using_typedef_declarations()
{
- TestData data;
- data.srcText =
+ const QByteArray source =
"void f()\n"
"{\n"
" using B = A;\n"
@@ -2456,17 +2063,9 @@ void CppToolsPlugin::test_completion_recursive_using_typedef_declarations()
" // padding so we get the scope right\n"
"}\n"
;
- setup(&data);
-
- Utils::ChangeSet change;
- QString txt = QLatin1String("a.");
- change.insert(data.pos, txt);
- QTextCursor cursor(data.doc);
- change.apply(&cursor);
- data.pos += txt.length();
-
- QStringList completions = getCompletions(data);
+ CompletionTestCase test(source, "a.");
+ const QStringList completions = test.getCompletions();
QCOMPARE(completions.size(), 0);
}
@@ -2606,8 +2205,7 @@ void CppToolsPlugin::test_completion_namespace_alias_inside_function_or_block_QT
void CppToolsPlugin::test_completion_class_declaration_inside_function_or_block_QTCREATORBUG3620_static_member()
{
- TestData data;
- data.srcText =
+ const QByteArray source =
"void foo()\n"
"{\n"
" {\n"
@@ -2620,16 +2218,9 @@ void CppToolsPlugin::test_completion_class_declaration_inside_function_or_block_
" }\n"
"}\n"
;
- setup(&data);
-
- Utils::ChangeSet change;
- QString txt = QLatin1String("C::");
- change.insert(data.pos, txt);
- QTextCursor cursor(data.doc);
- change.apply(&cursor);
- data.pos += txt.length();
+ CompletionTestCase test(source, "C::");
- QStringList completions = getCompletions(data);
+ const QStringList completions = test.getCompletions();
QCOMPARE(completions.size(), 3);
QVERIFY(completions.contains(QLatin1String("C")));
@@ -2639,8 +2230,7 @@ void CppToolsPlugin::test_completion_class_declaration_inside_function_or_block_
void CppToolsPlugin::test_completion_enum_inside_block_inside_function_QTCREATORBUG5456()
{
- TestData data;
- data.srcText =
+ const QByteArray source =
"void foo()\n"
"{\n"
" {\n"
@@ -2650,16 +2240,9 @@ void CppToolsPlugin::test_completion_enum_inside_block_inside_function_QTCREATOR
" }\n"
"}\n"
;
- setup(&data);
+ CompletionTestCase test(source, "E::");
- Utils::ChangeSet change;
- QString txt = QLatin1String("E::");
- change.insert(data.pos, txt);
- QTextCursor cursor(data.doc);
- change.apply(&cursor);
- data.pos += txt.length();
-
- QStringList completions = getCompletions(data);
+ const QStringList completions = test.getCompletions();
QCOMPARE(completions.size(), 4);
QVERIFY(completions.contains(QLatin1String("E")));
@@ -2670,8 +2253,7 @@ void CppToolsPlugin::test_completion_enum_inside_block_inside_function_QTCREATOR
void CppToolsPlugin::test_completion_enum_inside_function_QTCREATORBUG5456()
{
- TestData data;
- data.srcText =
+ const QByteArray source =
"void foo()\n"
"{\n"
" enum E { e1, e2, e3 };\n"
@@ -2679,16 +2261,9 @@ void CppToolsPlugin::test_completion_enum_inside_function_QTCREATORBUG5456()
" // padding so we get the scope right\n"
"}\n"
;
- setup(&data);
-
- Utils::ChangeSet change;
- QString txt = QLatin1String("E::");
- change.insert(data.pos, txt);
- QTextCursor cursor(data.doc);
- change.apply(&cursor);
- data.pos += txt.length();
+ CompletionTestCase test(source, "E::");
- QStringList completions = getCompletions(data);
+ const QStringList completions = test.getCompletions();
QCOMPARE(completions.size(), 4);
QVERIFY(completions.contains(QLatin1String("E")));
@@ -2699,8 +2274,7 @@ void CppToolsPlugin::test_completion_enum_inside_function_QTCREATORBUG5456()
void CppToolsPlugin::test_completion_lambdaCalls_1()
{
- TestData data;
- data.srcText =
+ const QByteArray source =
"struct S { int bar; };\n"
"void foo()\n"
"{\n"
@@ -2708,16 +2282,9 @@ void CppToolsPlugin::test_completion_lambdaCalls_1()
" // padding so we get the scope right\n"
"}\n"
;
- setup(&data);
-
- Utils::ChangeSet change;
- QString txt = QLatin1String("[](){ return new S; } ()->");
- change.insert(data.pos, txt);
- QTextCursor cursor(data.doc);
- change.apply(&cursor);
- data.pos += txt.length();
+ CompletionTestCase test(source, "[](){ return new S; } ()->");
- QStringList completions = getCompletions(data);
+ const QStringList completions = test.getCompletions();
QCOMPARE(completions.size(), 2);
QVERIFY(completions.contains(QLatin1String("S")));
@@ -2726,8 +2293,7 @@ void CppToolsPlugin::test_completion_lambdaCalls_1()
void CppToolsPlugin::test_completion_lambdaCalls_2()
{
- TestData data;
- data.srcText =
+ const QByteArray source =
"struct S { int bar; };\n"
"void foo()\n"
"{\n"
@@ -2735,16 +2301,9 @@ void CppToolsPlugin::test_completion_lambdaCalls_2()
" // padding so we get the scope right\n"
"}\n"
;
- setup(&data);
+ CompletionTestCase test(source, "[] { return new S; } ()->");
- Utils::ChangeSet change;
- QString txt = QLatin1String("[] { return new S; } ()->");
- change.insert(data.pos, txt);
- QTextCursor cursor(data.doc);
- change.apply(&cursor);
- data.pos += txt.length();
-
- QStringList completions = getCompletions(data);
+ const QStringList completions = test.getCompletions();
QCOMPARE(completions.size(), 2);
QVERIFY(completions.contains(QLatin1String("S")));
@@ -2753,8 +2312,7 @@ void CppToolsPlugin::test_completion_lambdaCalls_2()
void CppToolsPlugin::test_completion_lambdaCalls_3()
{
- TestData data;
- data.srcText =
+ const QByteArray source =
"struct S { int bar; };\n"
"void foo()\n"
"{\n"
@@ -2762,16 +2320,9 @@ void CppToolsPlugin::test_completion_lambdaCalls_3()
" // padding so we get the scope right\n"
"}\n"
;
- setup(&data);
-
- Utils::ChangeSet change;
- QString txt = QLatin1String("[]() ->S* { return new S; } ()->");
- change.insert(data.pos, txt);
- QTextCursor cursor(data.doc);
- change.apply(&cursor);
- data.pos += txt.length();
+ CompletionTestCase test(source, "[]() ->S* { return new S; } ()->");
- QStringList completions = getCompletions(data);
+ const QStringList completions = test.getCompletions();
QCOMPARE(completions.size(), 2);
QVERIFY(completions.contains(QLatin1String("S")));
@@ -2780,8 +2331,7 @@ void CppToolsPlugin::test_completion_lambdaCalls_3()
void CppToolsPlugin::test_completion_lambdaCalls_4()
{
- TestData data;
- data.srcText =
+ const QByteArray source =
"struct S { int bar; };\n"
"void foo()\n"
"{\n"
@@ -2789,16 +2339,9 @@ void CppToolsPlugin::test_completion_lambdaCalls_4()
" // padding so we get the scope right\n"
"}\n"
;
- setup(&data);
-
- Utils::ChangeSet change;
- QString txt = QLatin1String("[]() throw() { return new S; } ()->");
- change.insert(data.pos, txt);
- QTextCursor cursor(data.doc);
- change.apply(&cursor);
- data.pos += txt.length();
+ CompletionTestCase test(source, "[]() throw() { return new S; } ()->");
- QStringList completions = getCompletions(data);
+ const QStringList completions = test.getCompletions();
QCOMPARE(completions.size(), 2);
QVERIFY(completions.contains(QLatin1String("S")));
@@ -2807,8 +2350,7 @@ void CppToolsPlugin::test_completion_lambdaCalls_4()
void CppToolsPlugin::test_completion_lambdaCalls_5()
{
- TestData data;
- data.srcText =
+ const QByteArray source =
"struct S { int bar; };\n"
"void foo()\n"
"{\n"
@@ -2816,16 +2358,9 @@ void CppToolsPlugin::test_completion_lambdaCalls_5()
" // padding so we get the scope right\n"
"}\n"
;
- setup(&data);
+ CompletionTestCase test(source, "[]() throw()->S* { return new S; } ()->");
- Utils::ChangeSet change;
- QString txt = QLatin1String("[]() throw()->S* { return new S; } ()->");
- change.insert(data.pos, txt);
- QTextCursor cursor(data.doc);
- change.apply(&cursor);
- data.pos += txt.length();
-
- QStringList completions = getCompletions(data);
+ const QStringList completions = test.getCompletions();
QCOMPARE(completions.size(), 2);
QVERIFY(completions.contains(QLatin1String("S")));
@@ -2834,8 +2369,7 @@ void CppToolsPlugin::test_completion_lambdaCalls_5()
void CppToolsPlugin::test_completion_local_type_and_member_1()
{
- TestData data;
- data.srcText =
+ const QByteArray source =
"struct OtherType { int otherTypeMember; };\n"
"void foo()\n"
"{\n"
@@ -2849,16 +2383,9 @@ void CppToolsPlugin::test_completion_local_type_and_member_1()
" // padding so we get the scope right\n"
"}\n"
;
- setup(&data);
-
- Utils::ChangeSet change;
- QString txt = QLatin1String("lt.ot.");
- change.insert(data.pos, txt);
- QTextCursor cursor(data.doc);
- change.apply(&cursor);
- data.pos += txt.length();
+ CompletionTestCase test(source, "lt.ot.");
- QStringList completions = getCompletions(data);
+ const QStringList completions = test.getCompletions();
QCOMPARE(completions.size(), 2);
QVERIFY(completions.contains(QLatin1String("OtherType")));
@@ -2867,8 +2394,7 @@ void CppToolsPlugin::test_completion_local_type_and_member_1()
void CppToolsPlugin::test_completion_local_type_and_member_2()
{
- TestData data;
- data.srcText =
+ const QByteArray source =
"void foo()\n"
"{\n"
" struct OtherType { int otherTypeMember; };\n"
@@ -2882,16 +2408,9 @@ void CppToolsPlugin::test_completion_local_type_and_member_2()
" // padding so we get the scope right\n"
"}\n"
;
- setup(&data);
-
- Utils::ChangeSet change;
- QString txt = QLatin1String("lt.ot.");
- change.insert(data.pos, txt);
- QTextCursor cursor(data.doc);
- change.apply(&cursor);
- data.pos += txt.length();
+ CompletionTestCase test(source, "lt.ot.");
- QStringList completions = getCompletions(data);
+ const QStringList completions = test.getCompletions();
QCOMPARE(completions.size(), 2);
QVERIFY(completions.contains(QLatin1String("OtherType")));
@@ -2900,8 +2419,7 @@ void CppToolsPlugin::test_completion_local_type_and_member_2()
void CppToolsPlugin::test_completion_local_type_and_member_3()
{
- TestData data;
- data.srcText =
+ const QByteArray source =
"void foo()\n"
"{\n"
" struct OtherType { int otherTypeMember; };\n"
@@ -2917,16 +2435,9 @@ void CppToolsPlugin::test_completion_local_type_and_member_3()
" }\n"
"}\n"
;
- setup(&data);
+ CompletionTestCase test(source, "lt.ot.");
- Utils::ChangeSet change;
- QString txt = QLatin1String("lt.ot.");
- change.insert(data.pos, txt);
- QTextCursor cursor(data.doc);
- change.apply(&cursor);
- data.pos += txt.length();
-
- QStringList completions = getCompletions(data);
+ const QStringList completions = test.getCompletions();
QCOMPARE(completions.size(), 2);
QVERIFY(completions.contains(QLatin1String("OtherType")));
@@ -2935,8 +2446,7 @@ void CppToolsPlugin::test_completion_local_type_and_member_3()
void CppToolsPlugin::test_completion_local_type_and_member_4()
{
- TestData data;
- data.srcText =
+ const QByteArray source =
"namespace NS {struct OtherType { int otherTypeMember; };}\n"
"void foo()\n"
"{\n"
@@ -2950,16 +2460,9 @@ void CppToolsPlugin::test_completion_local_type_and_member_4()
" // padding so we get the scope right\n"
"}\n"
;
- setup(&data);
-
- Utils::ChangeSet change;
- QString txt = QLatin1String("lt.ot.");
- change.insert(data.pos, txt);
- QTextCursor cursor(data.doc);
- change.apply(&cursor);
- data.pos += txt.length();
+ CompletionTestCase test(source, "lt.ot.");
- QStringList completions = getCompletions(data);
+ const QStringList completions = test.getCompletions();
QCOMPARE(completions.size(), 2);
QVERIFY(completions.contains(QLatin1String("OtherType")));
@@ -2968,8 +2471,7 @@ void CppToolsPlugin::test_completion_local_type_and_member_4()
void CppToolsPlugin::test_completion_local_type_and_member_5()
{
- TestData data;
- data.srcText =
+ const QByteArray source =
"namespace NS {struct OtherType { int otherTypeMember; };}\n"
"void foo()\n"
"{\n"
@@ -2984,16 +2486,9 @@ void CppToolsPlugin::test_completion_local_type_and_member_5()
" // padding so we get the scope right\n"
"}\n"
;
- setup(&data);
+ CompletionTestCase test(source, "lt.ot.");
- Utils::ChangeSet change;
- QString txt = QLatin1String("lt.ot.");
- change.insert(data.pos, txt);
- QTextCursor cursor(data.doc);
- change.apply(&cursor);
- data.pos += txt.length();
-
- QStringList completions = getCompletions(data);
+ const QStringList completions = test.getCompletions();
QCOMPARE(completions.size(), 2);
QVERIFY(completions.contains(QLatin1String("OtherType")));
@@ -3002,8 +2497,7 @@ void CppToolsPlugin::test_completion_local_type_and_member_5()
void CppToolsPlugin::test_completion_local_type_and_member_6()
{
- TestData data;
- data.srcText =
+ const QByteArray source =
"namespace NS {struct OtherType { int otherTypeMember; };}\n"
"void foo()\n"
"{\n"
@@ -3018,16 +2512,9 @@ void CppToolsPlugin::test_completion_local_type_and_member_6()
" // padding so we get the scope right\n"
"}\n"
;
- setup(&data);
-
- Utils::ChangeSet change;
- QString txt = QLatin1String("lt.ot.");
- change.insert(data.pos, txt);
- QTextCursor cursor(data.doc);
- change.apply(&cursor);
- data.pos += txt.length();
+ CompletionTestCase test(source, "lt.ot.");
- QStringList completions = getCompletions(data);
+ const QStringList completions = test.getCompletions();
QCOMPARE(completions.size(), 2);
QVERIFY(completions.contains(QLatin1String("OtherType")));
@@ -3036,8 +2523,7 @@ void CppToolsPlugin::test_completion_local_type_and_member_6()
void CppToolsPlugin::test_completion_template_parameter_defined_inside_scope_of_declaration_QTCREATORBUG9169_1()
{
- TestData data;
- data.srcText =
+ const QByteArray source =
"struct A\n"
"{\n"
" void foo();\n"
@@ -3066,16 +2552,9 @@ void CppToolsPlugin::test_completion_template_parameter_defined_inside_scope_of_
" // padding so we get the scope right\n"
"}\n"
;
- setup(&data);
-
- Utils::ChangeSet change;
- QString txt = QLatin1String("templ.get()->");
- change.insert(data.pos, txt);
- QTextCursor cursor(data.doc);
- change.apply(&cursor);
- data.pos += txt.length();
+ CompletionTestCase test(source, "templ.get()->");
- QStringList completions = getCompletions(data);
+ const QStringList completions = test.getCompletions();
QCOMPARE(completions.size(), 2);
QVERIFY(completions.contains(QLatin1String("B")));
@@ -3084,8 +2563,7 @@ void CppToolsPlugin::test_completion_template_parameter_defined_inside_scope_of_
void CppToolsPlugin::test_completion_template_parameter_defined_inside_scope_of_declaration_QTCREATORBUG9169_2()
{
- TestData data;
- data.srcText =
+ const QByteArray source =
"struct A\n"
"{\n"
" void foo();\n"
@@ -3114,16 +2592,9 @@ void CppToolsPlugin::test_completion_template_parameter_defined_inside_scope_of_
" // padding so we get the scope right\n"
"}\n"
;
- setup(&data);
+ CompletionTestCase test(source, "templ.t.");
- Utils::ChangeSet change;
- QString txt = QLatin1String("templ.t.");
- change.insert(data.pos, txt);
- QTextCursor cursor(data.doc);
- change.apply(&cursor);
- data.pos += txt.length();
-
- QStringList completions = getCompletions(data);
+ const QStringList completions = test.getCompletions();
QCOMPARE(completions.size(), 2);
QVERIFY(completions.contains(QLatin1String("B")));
@@ -3132,8 +2603,7 @@ void CppToolsPlugin::test_completion_template_parameter_defined_inside_scope_of_
void CppToolsPlugin::test_completion_template_parameter_defined_inside_scope_of_declaration_QTCREATORBUG8852_1()
{
- TestData data;
- data.srcText =
+ const QByteArray source =
"template <typename T>\n"
"struct QList\n"
"{\n"
@@ -3150,16 +2620,9 @@ void CppToolsPlugin::test_completion_template_parameter_defined_inside_scope_of_
" }\n"
"}\n"
;
- setup(&data);
-
- Utils::ChangeSet change;
- QString txt = QLatin1String("list.at(0).");
- change.insert(data.pos, txt);
- QTextCursor cursor(data.doc);
- change.apply(&cursor);
- data.pos += txt.length();
+ CompletionTestCase test(source, "list.at(0).");
- QStringList completions = getCompletions(data);
+ const QStringList completions = test.getCompletions();
QCOMPARE(completions.size(), 2);
QVERIFY(completions.contains(QLatin1String("Foo")));
@@ -3168,8 +2631,7 @@ void CppToolsPlugin::test_completion_template_parameter_defined_inside_scope_of_
void CppToolsPlugin::test_completion_template_parameter_defined_inside_scope_of_declaration_QTCREATORBUG8852_2()
{
- TestData data;
- data.srcText =
+ const QByteArray source =
"template <typename T>\n"
"struct QList\n"
"{\n"
@@ -3189,16 +2651,9 @@ void CppToolsPlugin::test_completion_template_parameter_defined_inside_scope_of_
" }\n"
"}\n"
;
- setup(&data);
+ CompletionTestCase test(source, "list.at(0).");
- Utils::ChangeSet change;
- QString txt = QLatin1String("list.at(0).");
- change.insert(data.pos, txt);
- QTextCursor cursor(data.doc);
- change.apply(&cursor);
- data.pos += txt.length();
-
- QStringList completions = getCompletions(data);
+ const QStringList completions = test.getCompletions();
QCOMPARE(completions.size(), 2);
QVERIFY(completions.contains(QLatin1String("Foo")));
@@ -3207,8 +2662,7 @@ void CppToolsPlugin::test_completion_template_parameter_defined_inside_scope_of_
void CppToolsPlugin::test_completion_template_parameter_defined_inside_scope_of_declaration_QTCREATORBUG8852_3()
{
- TestData data;
- data.srcText =
+ const QByteArray source =
"template <typename T>\n"
"struct QList\n"
"{\n"
@@ -3226,18 +2680,44 @@ void CppToolsPlugin::test_completion_template_parameter_defined_inside_scope_of_
" // padding so we get the scope right\n"
"}\n"
;
- setup(&data);
-
- Utils::ChangeSet change;
- QString txt = QLatin1String("list.at(0).");
- change.insert(data.pos, txt);
- QTextCursor cursor(data.doc);
- change.apply(&cursor);
- data.pos += txt.length();
+ CompletionTestCase test(source, "list.at(0).");
- QStringList completions = getCompletions(data);
+ const QStringList completions = test.getCompletions();
QCOMPARE(completions.size(), 2);
QVERIFY(completions.contains(QLatin1String("Foo")));
QVERIFY(completions.contains(QLatin1String("bar")));
}
+
+void CppToolsPlugin::test_completion_signals_hide_QPrivateSignal()
+{
+ const QByteArray source =
+ "#define SIGNAL(a) #a\n"
+ "#define SLOT(a) #a\n"
+ "#define signals public\n"
+ "#define Q_OBJECT struct QPrivateSignal {};\n"
+ "\n"
+ "class QObject\n"
+ "{\n"
+ "public:\n"
+ " void connect(QObject *, char *, QObject *, char *);\n"
+ "};\n"
+ "\n"
+ "class Timer : public QObject\n"
+ "{\n"
+ " Q_OBJECT\n"
+ "signals:\n"
+ " void timeout(QPrivateSignal);\n"
+ "};\n"
+ "\n"
+ "void client()\n"
+ "{\n"
+ " Timer *timer = new Timer;\n"
+ " connect(timer, SIGNAL(@\n"
+ "}\n";
+ CompletionTestCase test(source);
+
+ const QStringList completions = test.getCompletions();
+ QCOMPARE(completions.size(), 1);
+ QVERIFY(completions.contains(QLatin1String("timeout()")));
+}