@@ -418,18 +418,13 @@ FakePropfindReply::FakePropfindReply(FileInfo &remoteRootFileInfo, QNetworkAcces
418418
419419void FakePropfindReply::respond ()
420420{
421- if (isFinished ()) {
422- return ;
423- }
424-
425421 setHeader (QNetworkRequest::ContentLengthHeader, payload.size ());
426422 setHeader (QNetworkRequest::ContentTypeHeader, QByteArrayLiteral (" application/xml; charset=utf-8" ));
427423 setAttribute (QNetworkRequest::HttpStatusCodeAttribute, 207 );
428- setFinished (true );
429424 Q_EMIT metaDataChanged ();
430425 if (bytesAvailable ())
431426 Q_EMIT readyRead ();
432- Q_EMIT finished ();
427+ checkedFinished ();
433428}
434429
435430void FakePropfindReply::respond404 ()
@@ -441,7 +436,7 @@ void FakePropfindReply::respond404()
441436 setAttribute (QNetworkRequest::HttpStatusCodeAttribute, 404 );
442437 setError (InternalServerError, QStringLiteral (" Not Found" ));
443438 Q_EMIT metaDataChanged ();
444- Q_EMIT finished ();
439+ checkedFinished ();
445440}
446441
447442qint64 FakePropfindReply::bytesAvailable () const
@@ -495,7 +490,7 @@ void FakePutReply::respond()
495490 setRawHeader (" X-OC-MTime" , " accepted" ); // Prevents Q_ASSERT(!_runningNow) since we'll call PropagateItemJob::done twice in that case.
496491 setAttribute (QNetworkRequest::HttpStatusCodeAttribute, 200 );
497492 Q_EMIT metaDataChanged ();
498- Q_EMIT finished ();
493+ checkedFinished ();
499494}
500495
501496FakeMkcolReply::FakeMkcolReply (FileInfo &remoteRootFileInfo, QNetworkAccessManager::Operation op, const QNetworkRequest &request, QObject *parent)
@@ -523,8 +518,9 @@ void FakeMkcolReply::respond()
523518 setRawHeader (" OC-FileId" , fileInfo->fileId );
524519 setAttribute (QNetworkRequest::HttpStatusCodeAttribute, 201 );
525520 Q_EMIT metaDataChanged ();
526- Q_EMIT finished ();
527521 }
522+
523+ checkedFinished ();
528524}
529525
530526FakeDeleteReply::FakeDeleteReply (FileInfo &remoteRootFileInfo, QNetworkAccessManager::Operation op, const QNetworkRequest &request, QObject *parent)
@@ -545,7 +541,8 @@ void FakeDeleteReply::respond()
545541{
546542 setAttribute (QNetworkRequest::HttpStatusCodeAttribute, 204 );
547543 Q_EMIT metaDataChanged ();
548- Q_EMIT finished ();
544+
545+ checkedFinished ();
549546}
550547
551548FakeMoveReply::FakeMoveReply (FileInfo &remoteRootFileInfo, QNetworkAccessManager::Operation op, const QNetworkRequest &request, QObject *parent)
@@ -569,8 +566,9 @@ void FakeMoveReply::respond()
569566 if (error () == QNetworkReply::NoError) {
570567 setAttribute (QNetworkRequest::HttpStatusCodeAttribute, 201 );
571568 Q_EMIT metaDataChanged ();
572- Q_EMIT finished ();
573569 }
570+
571+ checkedFinished ();
574572}
575573
576574FakeGetReply::FakeGetReply (FileInfo &remoteRootFileInfo, QNetworkAccessManager::Operation op, const QNetworkRequest &request, QObject *parent)
@@ -649,7 +647,7 @@ void FakeGetReply::respond()
649647 Q_EMIT readyRead ();
650648 }
651649 }
652- Q_EMIT finished ();
650+ checkedFinished ();
653651 }
654652}
655653
@@ -698,8 +696,7 @@ void FakePayloadReply::respond()
698696 setHeader (QNetworkRequest::ContentLengthHeader, _body.size ());
699697 Q_EMIT metaDataChanged ();
700698 Q_EMIT readyRead ();
701- setFinished (true );
702- Q_EMIT finished ();
699+ checkedFinished ();
703700 }
704701}
705702
@@ -748,8 +745,7 @@ void FakeErrorReply::respond()
748745
749746void FakeErrorReply::slotSetFinished ()
750747{
751- setFinished (true );
752- Q_EMIT finished ();
748+ checkedFinished ();
753749}
754750
755751qint64 FakeErrorReply::readData (char *buf, qint64 max)
@@ -1117,13 +1113,23 @@ FakeReply::FakeReply(QObject *parent)
11171113
11181114FakeReply::~FakeReply () { }
11191115
1116+ void FakeReply::checkedFinished ()
1117+ {
1118+ // It can happen that this job is cancelled before the full data is read, and the job is aborted. This being the test framework, processing happens
1119+ // synchronously, so between the signals above and here, the job can get aborted, which emits the finished signal. So do NOT emit it again if
1120+ // this is the case.
1121+ if (!isFinished ()) {
1122+ setFinished (true );
1123+ Q_EMIT finished ();
1124+ }
1125+ }
1126+
11201127void FakeReply::abort ()
11211128{
11221129 if (!isFinished ()) {
11231130 setError (OperationCanceledError, QStringLiteral (" Operation Canceled" ));
1124- setFinished (true );
11251131 Q_EMIT metaDataChanged ();
1126- Q_EMIT finished ();
1132+ checkedFinished ();
11271133 }
11281134}
11291135
0 commit comments