summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErik Verbruggen <erik.verbruggen@digia.com>2013-01-30 09:58:09 +0100
committerErik Verbruggen <erik.verbruggen@digia.com>2013-01-30 10:29:12 +0100
commitcede29478875e127dd6a809313abdbbb334c95a7 (patch)
treea1b2d1817790d8590551a1a1f09a758d1731ea54
parent8f4817152c5f18c3f14f6d3bdf4b104ca259062d (diff)
downloadqt-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.cpp34
-rw-r--r--src/plugins/cpptools/cppcompletionassist.cpp24
-rw-r--r--src/plugins/cpptools/cppcompletionassist.h23
-rw-r--r--src/plugins/cpptools/cpptoolsplugin.h1
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();