diff options
author | Oswald Buddenhagen <oswald.buddenhagen@digia.com> | 2013-08-21 14:39:18 +0200 |
---|---|---|
committer | Oswald Buddenhagen <oswald.buddenhagen@digia.com> | 2013-08-21 14:39:18 +0200 |
commit | c2e90c360baaa5b8ea31d4466cadfab2bda3aabe (patch) | |
tree | 33ff2ee485894273b947b0c89a47dac75c8db3b1 /src/plugins/cpptools/cppcompletion_test.cpp | |
parent | bf69b4c4446fbcc5feb94edcc89ff87078b2afcf (diff) | |
parent | 01b3e1fa547d8def812d64941968fb5e13516383 (diff) | |
download | qt-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.cpp | 1198 |
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()"))); +} |