diff options
author | Erik Verbruggen <erik.verbruggen@digia.com> | 2013-01-30 09:58:09 +0100 |
---|---|---|
committer | Erik Verbruggen <erik.verbruggen@digia.com> | 2013-01-30 10:29:12 +0100 |
commit | cede29478875e127dd6a809313abdbbb334c95a7 (patch) | |
tree | a1b2d1817790d8590551a1a1f09a758d1731ea54 | |
parent | 8f4817152c5f18c3f14f6d3bdf4b104ca259062d (diff) | |
download | qt-creator-cede29478875e127dd6a809313abdbbb334c95a7.tar.gz |
C++: add test-case for member access replacement in completion.
Change-Id: Id5fe00b94a6622178db9bd26f54d29efe88970f7
Reviewed-by: Przemyslaw Gorszkowski <pgorszkowski@gmail.com>
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@digia.com>
-rw-r--r-- | src/plugins/cpptools/cppcompletion_test.cpp | 34 | ||||
-rw-r--r-- | src/plugins/cpptools/cppcompletionassist.cpp | 24 | ||||
-rw-r--r-- | src/plugins/cpptools/cppcompletionassist.h | 23 | ||||
-rw-r--r-- | src/plugins/cpptools/cpptoolsplugin.h | 1 |
4 files changed, 55 insertions, 27 deletions
diff --git a/src/plugins/cpptools/cppcompletion_test.cpp b/src/plugins/cpptools/cppcompletion_test.cpp index 6f0caaac81..2b218d87e5 100644 --- a/src/plugins/cpptools/cppcompletion_test.cpp +++ b/src/plugins/cpptools/cppcompletion_test.cpp @@ -72,7 +72,7 @@ struct TestCase QTextDocument *doc; }; -static QStringList getCompletions(TestCase &data) +static QStringList getCompletions(TestCase &data, bool *replaceAccessOperator = 0) { QStringList completions; @@ -86,13 +86,16 @@ static QStringList getCompletions(TestCase &data) IAssistProposalModel *model = proposal->model(); if (!model) return completions; - BasicProposalItemListModel *listmodel = dynamic_cast<BasicProposalItemListModel *>(model); + CppAssistProposalModel *listmodel = dynamic_cast<CppAssistProposalModel *>(model); if (!listmodel) return completions; for (int i = 0; i < listmodel->size(); ++i) completions << listmodel->text(i); + if (replaceAccessOperator) + *replaceAccessOperator = listmodel->m_replaceDotForArrow; + return completions; } @@ -1288,3 +1291,30 @@ void CppToolsPlugin::test_completion_instantiate_nested_of_nested_class_when_enc QVERIFY(completions.contains(QLatin1String("Foo"))); QVERIFY(completions.contains(QLatin1String("foo_i"))); } + +void CppToolsPlugin::test_completion_member_access_operator_1() +{ + TestCase data; + data.srcText = "\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(); + + bool replaceAccessOperator = false; + QStringList completions = getCompletions(data, &replaceAccessOperator); + + QCOMPARE(completions.size(), 2); + QVERIFY(completions.contains(QLatin1String("S"))); + QVERIFY(completions.contains(QLatin1String("t"))); + QVERIFY(replaceAccessOperator); +} diff --git a/src/plugins/cpptools/cppcompletionassist.cpp b/src/plugins/cpptools/cppcompletionassist.cpp index 859ee4660f..9ff1562727 100644 --- a/src/plugins/cpptools/cppcompletionassist.cpp +++ b/src/plugins/cpptools/cppcompletionassist.cpp @@ -58,7 +58,6 @@ #include <coreplugin/mimedatabase.h> #include <cppeditor/cppeditorconstants.h> #include <texteditor/codeassist/basicproposalitem.h> -#include <texteditor/codeassist/basicproposalitemlistmodel.h> #include <texteditor/codeassist/genericproposal.h> #include <texteditor/codeassist/ifunctionhintproposalmodel.h> #include <texteditor/codeassist/functionhintproposal.h> @@ -91,29 +90,6 @@ struct CompleteFunctionDeclaration Function *function; }; -// ---------------------- -// CppAssistProposalModel -// ---------------------- -class CppAssistProposalModel : public TextEditor::BasicProposalItemListModel -{ -public: - CppAssistProposalModel() - : TextEditor::BasicProposalItemListModel() - , m_completionOperator(T_EOF_SYMBOL) - , m_replaceDotForArrow(false) - , m_typeOfExpression(new TypeOfExpression) - { - m_typeOfExpression->setExpandTemplates(true); - } - - virtual bool isSortable(const QString &prefix) const; - virtual IAssistProposalItem *proposalItem(int index) const; - - unsigned m_completionOperator; - bool m_replaceDotForArrow; - QSharedPointer<TypeOfExpression> m_typeOfExpression; -}; - // --------------------- // CppAssistProposalItem // --------------------- diff --git a/src/plugins/cpptools/cppcompletionassist.h b/src/plugins/cpptools/cppcompletionassist.h index f49a161128..fd11b7e444 100644 --- a/src/plugins/cpptools/cppcompletionassist.h +++ b/src/plugins/cpptools/cppcompletionassist.h @@ -41,10 +41,12 @@ # include <cplusplus/Symbol.h> #endif +#include <texteditor/codeassist/basicproposalitemlistmodel.h> #include <texteditor/codeassist/completionassistprovider.h> #include <texteditor/codeassist/iassistprocessor.h> #include <texteditor/snippets/snippetassistcollector.h> #include <texteditor/codeassist/defaultassistinterface.h> +#include <texteditor/codeassist/basicproposalitem.h> #include <QStringList> #include <QVariant> @@ -64,7 +66,26 @@ namespace CppTools { namespace Internal { class CppCompletionAssistInterface; -class CppAssistProposalModel; + +class CppAssistProposalModel : public TextEditor::BasicProposalItemListModel +{ +public: + CppAssistProposalModel() + : TextEditor::BasicProposalItemListModel() + , m_completionOperator(CPlusPlus::T_EOF_SYMBOL) + , m_replaceDotForArrow(false) + , m_typeOfExpression(new CPlusPlus::TypeOfExpression) + { + m_typeOfExpression->setExpandTemplates(true); + } + + virtual bool isSortable(const QString &prefix) const; + virtual TextEditor::IAssistProposalItem *proposalItem(int index) const; + + unsigned m_completionOperator; + bool m_replaceDotForArrow; + QSharedPointer<CPlusPlus::TypeOfExpression> m_typeOfExpression; +}; class InternalCompletionAssistProvider : public CppCompletionAssistProvider { diff --git a/src/plugins/cpptools/cpptoolsplugin.h b/src/plugins/cpptools/cpptoolsplugin.h index 41a7ac4cac..012d03112c 100644 --- a/src/plugins/cpptools/cpptoolsplugin.h +++ b/src/plugins/cpptools/cpptoolsplugin.h @@ -112,6 +112,7 @@ private slots: void test_completion_enclosing_template_class_data(); void test_completion_instantiate_nested_class_when_enclosing_is_template(); void test_completion_instantiate_nested_of_nested_class_when_enclosing_is_template(); + void test_completion_member_access_operator_1(); void test_format_pointerdeclaration_in_simpledeclarations(); void test_format_pointerdeclaration_in_simpledeclarations_data(); |