forked from qt-creator/qt-creator
Clang: Avoid waiting plugin side if (re)parse fails
If a parse or reparse operation fails, the corresponding translation unit is "not intact" anymore and further job requests for that translation unit will be silently discarded without notifying the plugin. This is especially problematic when the plugin expects/waits (for) a certain message. A parse/reparse can fail due to e.g. an invalid commandline or an internal crash. In such a case, ensure to send some dummy results. Task-number: QTCREATORBUG-18864 Change-Id: Ida9b8066fd55e64027a9b0d8bd5cf365b16a7356 Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io> Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
@@ -118,6 +118,41 @@ TEST_F(JobQueue, DoNotAddDuplicateForWhichAJobIsAlreadyRunning)
|
||||
ASSERT_FALSE(added);
|
||||
}
|
||||
|
||||
TEST_F(JobQueue, DoNotAddForNotExistingDocument)
|
||||
{
|
||||
jobQueue.setCancelJobRequest([](const JobRequest &) {
|
||||
return true;
|
||||
});
|
||||
|
||||
const bool added = jobQueue.add(createJobRequest(Utf8StringLiteral("notExistingDocument.cpp"),
|
||||
JobRequest::Type::UpdateDocumentAnnotations));
|
||||
|
||||
ASSERT_FALSE(added);
|
||||
}
|
||||
|
||||
TEST_F(JobQueue, DoNotAddForNotIntactDocument)
|
||||
{
|
||||
document.setHasParseOrReparseFailed(true);
|
||||
const bool added = jobQueue.add(createJobRequest(filePath1,
|
||||
JobRequest::Type::UpdateDocumentAnnotations));
|
||||
|
||||
ASSERT_FALSE(added);
|
||||
}
|
||||
|
||||
TEST_F(JobQueue, CancelDuringAddForNotIntactDocument)
|
||||
{
|
||||
document.setHasParseOrReparseFailed(true);
|
||||
bool canceled = false;
|
||||
jobQueue.setCancelJobRequest([&canceled](const JobRequest &) {
|
||||
canceled = true;
|
||||
});
|
||||
|
||||
|
||||
jobQueue.add(createJobRequest(filePath1, JobRequest::Type::UpdateDocumentAnnotations));
|
||||
|
||||
ASSERT_TRUE(canceled);
|
||||
}
|
||||
|
||||
TEST_F(JobQueue, ProcessEmpty)
|
||||
{
|
||||
jobQueue.processQueue();
|
||||
@@ -218,6 +253,20 @@ TEST_F(JobQueue, RemoveRequestsForNotIntactDocuments)
|
||||
ASSERT_THAT(jobsToRun.size(), Eq(0));
|
||||
}
|
||||
|
||||
TEST_F(JobQueue, CancelRequestsForNotIntactDocuments)
|
||||
{
|
||||
jobQueue.add(createJobRequest(filePath1, JobRequest::Type::UpdateDocumentAnnotations));
|
||||
document.setHasParseOrReparseFailed(true);
|
||||
bool canceled = false;
|
||||
jobQueue.setCancelJobRequest([&canceled](const JobRequest &) {
|
||||
canceled = true;
|
||||
});
|
||||
|
||||
jobQueue.processQueue();
|
||||
|
||||
ASSERT_TRUE(canceled);
|
||||
}
|
||||
|
||||
TEST_F(JobQueue, PrioritizeCurrentDocumentOverNotCurrent)
|
||||
{
|
||||
resetVisibilityAndCurrentEditor();
|
||||
|
||||
Reference in New Issue
Block a user