diff --git a/src/plugins/cpptools/cppcompletion_test.cpp b/src/plugins/cpptools/cppcompletion_test.cpp index 679e141b75e..5acb27f0467 100644 --- a/src/plugins/cpptools/cppcompletion_test.cpp +++ b/src/plugins/cpptools/cppcompletion_test.cpp @@ -107,17 +107,18 @@ public: ExplicitlyInvoked, m_snapshot, ProjectPart::HeaderPaths()); CppCompletionAssistProcessor processor; - IAssistProposal *proposal = processor.perform(ai); - if (!proposal) + + const Tests::IAssistProposalScopedPointer proposal(processor.perform(ai)); + if (!proposal.d) return completions; - IAssistProposalModel *model = proposal->model(); + IAssistProposalModel *model = proposal.d->model(); if (!model) return completions; CppAssistProposalModel *listmodel = dynamic_cast(model); if (!listmodel) return completions; - const int pos = proposal->basePosition(); + const int pos = proposal.d->basePosition(); const int length = m_position - pos; const QString prefix = Convenience::textAt(QTextCursor(m_editorWidget->document()), pos, length); diff --git a/src/plugins/cpptools/cpptoolstestcase.cpp b/src/plugins/cpptools/cpptoolstestcase.cpp index d76ee4818e8..e88e1b4697c 100644 --- a/src/plugins/cpptools/cpptoolstestcase.cpp +++ b/src/plugins/cpptools/cpptoolstestcase.cpp @@ -31,6 +31,8 @@ #include #include +#include +#include #include #include @@ -212,5 +214,15 @@ FileWriterAndRemover::~FileWriterAndRemover() } } +IAssistProposalScopedPointer::IAssistProposalScopedPointer(TextEditor::IAssistProposal *proposal) + : d(proposal) +{} + +IAssistProposalScopedPointer::~IAssistProposalScopedPointer() +{ + if (d && d->model()) + delete d->model(); +} + } // namespace Tests } // namespace CppTools diff --git a/src/plugins/cpptools/cpptoolstestcase.h b/src/plugins/cpptools/cpptoolstestcase.h index 321e957bc4b..fd45f8a32e7 100644 --- a/src/plugins/cpptools/cpptoolstestcase.h +++ b/src/plugins/cpptools/cpptoolstestcase.h @@ -41,8 +41,13 @@ namespace CPlusPlus { class Document; class Snapshot; } + namespace Core { class IEditor; } -namespace TextEditor { class BaseTextEditor; } + +namespace TextEditor { +class BaseTextEditor; +class IAssistProposal; +} namespace CppTools { namespace Tests { @@ -108,6 +113,17 @@ private: bool m_writtenSuccessfully; }; +// Normally the proposal is deleted by the ProcessorRunner or the +// GenericProposalWidget, but in tests we usually don't make use of them. +class CPPTOOLS_EXPORT IAssistProposalScopedPointer +{ +public: + IAssistProposalScopedPointer(TextEditor::IAssistProposal *proposal); + ~IAssistProposalScopedPointer(); + + QScopedPointer d; +}; + } // namespace Tests } // namespace CppTools diff --git a/src/plugins/cpptools/symbolsearcher_test.cpp b/src/plugins/cpptools/symbolsearcher_test.cpp index 9c128b26300..c72f6fef9e5 100644 --- a/src/plugins/cpptools/symbolsearcher_test.cpp +++ b/src/plugins/cpptools/symbolsearcher_test.cpp @@ -106,10 +106,10 @@ public: m_modelManager->setIndexingSupport(m_indexingSupportToUse); CppIndexingSupport *indexingSupport = m_modelManager->indexingSupport(); - SymbolSearcher *symbolSearcher = indexingSupport->createSymbolSearcher(searchParameters, - QSet() << testFile); + const QScopedPointer symbolSearcher( + indexingSupport->createSymbolSearcher(searchParameters, QSet() << testFile)); QFuture search - = QtConcurrent::run(&SymbolSearcher::runSearch, symbolSearcher); + = QtConcurrent::run(&SymbolSearcher::runSearch, symbolSearcher.data()); search.waitForFinished(); ResultDataList results = ResultData::fromSearchResultList(search.results()); QCOMPARE(results, expectedResults);