| 254 | } |
| 255 | |
| 256 | void executeMemberAccessReplacerTest(const QString& code, const CompletionItems& expectedCompletionItems, |
| 257 | const ClangCodeCompletionContext::ContextFilters& filters = NoMacroOrBuiltin) |
| 258 | { |
| 259 | TestFile file(code, QStringLiteral("cpp")); |
| 260 | |
| 261 | auto document = ICore::self()->documentController()->openDocument(file.url().toUrl()); |
| 262 | QVERIFY(document); |
| 263 | ICore::self()->documentController()->activateDocument(document); |
| 264 | auto view = ICore::self()->documentController()->activeTextDocumentView(); |
| 265 | Q_ASSERT(view); |
| 266 | view->setCursorPosition(expectedCompletionItems.position); |
| 267 | |
| 268 | QVERIFY(file.parseAndWait(TopDUContext::AllDeclarationsContextsUsesAndAST)); |
| 269 | DUChainReadLocker lock; |
| 270 | auto top = file.topContext(); |
| 271 | QVERIFY(top); |
| 272 | const ParseSessionData::Ptr sessionData(dynamic_cast<ParseSessionData*>(top->ast().data())); |
| 273 | QVERIFY(sessionData); |
| 274 | |
| 275 | lock.unlock(); |
| 276 | |
| 277 | auto context = createContext(top, sessionData, expectedCompletionItems.position, code); |
| 278 | |
| 279 | QApplication::processEvents(); |
| 280 | |
| 281 | if (expectedCompletionItems.code) { |
| 282 | QCOMPARE(document->textDocument()->text(), *expectedCompletionItems.code); |
| 283 | } |
| 284 | |
| 285 | document->close(KDevelop::IDocument::Silent); |
| 286 | |
| 287 | // The previous ClangCodeCompletionContext call should replace member access. |
| 288 | // That triggers an update request in the duchain which we are not interested in, |
| 289 | // so let's stop that request. |
| 290 | ICore::self()->languageController()->backgroundParser()->removeDocument(file.url()); |
| 291 | |
| 292 | context = createContext(top, sessionData, expectedCompletionItems.position); |
| 293 | context->setFilters(filters); |
| 294 | lock.lock(); |
| 295 | auto tester = ClangCodeCompletionItemTester(context); |
| 296 | |
| 297 | tester.names.sort(); |
| 298 | QCOMPARE(tester.names, expectedCompletionItems.completions); |
| 299 | } |
| 300 | |
| 301 | using IncludeTester = CodeCompletionItemTester<IncludePathCompletionContext>; |
| 302 |
no test coverage detected