MCPcopy Create free account
hub / github.com/KDE/kdevelop / testActiveDocumentHasASTAttached

Method testActiveDocumentHasASTAttached

plugins/clang/tests/test_duchain.cpp:958–1025  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

956}
957
958void TestDUChain::testActiveDocumentHasASTAttached()
959{
960 const TopDUContext::Features features = TopDUContext::AllDeclarationsContextsAndUses;
961
962 IndexedTopDUContext indexed;
963 ClangParsingEnvironment lastEnv;
964 {
965 TestFile file(QStringLiteral("int main() {}\n"), QStringLiteral("cpp"));
966 const auto astFeatures = features | TopDUContext::AST;
967 file.parse(astFeatures);
968 file.setKeepDUChainData(true);
969 QVERIFY(file.waitForParsed());
970
971 DUChainWriteLocker lock;
972 auto top = file.topContext();
973 QVERIFY(top);
974 auto sessionData = ParseSessionData::Ptr(dynamic_cast<ParseSessionData*>(top->ast().data()));
975 lock.unlock();
976 ParseSession session(sessionData);
977 lock.lock();
978 QVERIFY(session.data());
979 QVERIFY(top);
980 QVERIFY(top->ast());
981
982 indexed = top->indexed();
983 }
984
985 DUChain::self()->storeToDisk();
986
987 {
988 DUChainWriteLocker lock;
989 QVERIFY(!DUChain::self()->isInMemory(indexed.index()));
990 QVERIFY(indexed.data());
991 }
992
993 QUrl url;
994 {
995 DUChainReadLocker lock;
996 auto ctx = indexed.data();
997 QVERIFY(ctx);
998 QVERIFY(!ctx->ast());
999 url = ctx->url().toUrl();
1000 }
1001
1002 QVERIFY(!QFileInfo::exists(url.toLocalFile()));
1003 QFile file(url.toLocalFile());
1004 file.open(QIODevice::WriteOnly);
1005 Q_ASSERT(file.isOpen());
1006
1007 auto document = ICore::self()->documentController()->openDocument(url);
1008 QVERIFY(document);
1009 ICore::self()->documentController()->activateDocument(document);
1010
1011 QApplication::processEvents();
1012 ICore::self()->languageController()->backgroundParser()->parseDocuments();
1013 QThread::sleep(1);
1014
1015 document->close(KDevelop::IDocument::Discard);

Callers

nothing calls this directly

Calls 15

setKeepDUChainDataMethod · 0.80
waitForParsedMethod · 0.80
storeToDiskMethod · 0.80
isInMemoryMethod · 0.80
toLocalFileMethod · 0.80
documentControllerMethod · 0.80
activateDocumentMethod · 0.80
parseDocumentsMethod · 0.80
backgroundParserMethod · 0.80
languageControllerMethod · 0.80
removeDocumentChainMethod · 0.80
parseMethod · 0.45

Tested by

no test coverage detected