Browse Source

Adapt browser regressions to asynchronous batch completion

master
evgeny 3 days ago
parent
commit
400b9fa93c
  1. 26
      tools/chatgui/tests/test_member_files_browser.cpp

26
tools/chatgui/tests/test_member_files_browser.cpp

@ -37,6 +37,7 @@ static QList<mf_transfer_request> transfers;
static QList<quint64> cancelled;
static bool ready = true;
static std::function<void(mf_transfer_request)> transferStarted;
static std::function<void(mf_gui_request)> requestStarted;
extern "C" int gui_bridge_is_uasync_ready(void) { return ready; }
extern "C" UTUN_INSTANCE* gui_bridge_get_inst(void) { return nullptr; }
extern "C" void gui_bridge_post_uasync_fn(void (*function)(void*), void* arg) {
@ -44,6 +45,7 @@ extern "C" void gui_bridge_post_uasync_fn(void (*function)(void*), void* arg) {
auto* request = (mf_gui_request*)arg;
if (request->message.command == MF_QUOTA) quotaCaptured = *request;
else captured = *request;
if (requestStarted) requestStarted(*request);
}
if (function == member_files_gui_transfer) {
auto request = *(mf_transfer_request*)arg; transfers.append(request);
@ -100,7 +102,7 @@ private slots:
debug_set_category_level(DEBUG_CATEGORY_DEBUG, DEBUG_LEVEL_DEBUG);
debug_set_category_level(DEBUG_CATEGORY_MEDIA, DEBUG_LEVEL_INFO);
}
void init() { transfers.clear(); cancelled.clear(); ready = true; transferStarted = {}; }
void init() { transfers.clear(); cancelled.clear(); ready = true; transferStarted = {}; requestStarted = {}; }
void deleteAndParentShortcuts() {
sqlite3* sql = nullptr; QCOMPARE(sqlite3_open(":memory:", &sql), SQLITE_OK);
@ -124,9 +126,11 @@ private slots:
// Offscreen не восстанавливает активное окно после закрытия модального диалога.
browser.activateWindow(); QTRY_VERIFY(browser.isActiveWindow()); QTRY_VERIFY(tree->hasFocus());
answerDialog(QMessageBox::Yes); QTest::keyClick(tree, Qt::Key_Delete);
QCOMPARE(captured.message.command, uint8_t(MF_STAT)); respond(browser, captured, MF_OK);
QCOMPARE(captured.message.command, uint8_t(MF_REMOVE_PATH)); QCOMPARE(captured.message.owner, 22ULL);
QCOMPARE(QString::fromUtf8(captured.message.path), QString("documents/nested/remote.txt"));
QCOMPARE(QByteArray((const char*)captured.message.version, 16), QByteArray(16, '\7'));
respond(browser, captured, MF_OK); QTRY_VERIFY(!cancelButton(browser)->isEnabled());
browser.activateWindow(); QTRY_VERIFY(browser.isActiveWindow());
location->setFocus(); location->setText("abc"); location->setCursorPosition(1);
previous = captured.message.request_id;
@ -196,16 +200,17 @@ private slots:
exported = QString::fromUtf8(request.local);
{ QFile file(exported); QVERIFY(file.open(QIODevice::WriteOnly)); QCOMPARE(file.write("downloaded bytes"), 16LL); }
complete(browser, request);
QTRY_VERIFY(copy->isEnabled());
const auto* mime = QApplication::clipboard()->mimeData(); QVERIFY(mime->hasUrls());
QCOMPARE(mime->urls(), QList<QUrl>{QUrl::fromLocalFile(exported)});
QVERIFY(mime->data("x-special/gnome-copied-files").startsWith("copy\n"));
copy->trigger(); QCOMPARE(transfers.size(), 1); // Готовая версия не скачивается повторно.
item->setData(0, Qt::UserRole + 2, QByteArray(16, '\10'));
QApplication::clipboard()->setText("keep on error"); copy->trigger(); QTRY_COMPARE(transfers.size(), 2);
complete(browser, transfers.last(), MF_IO_ERROR); QCOMPARE(QApplication::clipboard()->text(), QString("keep on error"));
complete(browser, transfers.last(), MF_IO_ERROR); QTRY_VERIFY(copy->isEnabled());
QCOMPARE(QApplication::clipboard()->text(), QString("keep on error"));
copy->trigger(); QTRY_COMPARE(transfers.size(), 3); auto cancelledRequest = transfers.last();
cancelButton(browser)->click(); complete(browser, cancelledRequest, MF_CANCELLED);
cancelButton(browser)->click(); complete(browser, cancelledRequest, MF_CANCELLED); QTRY_VERIFY(copy->isEnabled());
QCOMPARE(QApplication::clipboard()->text(), QString("keep on error"));
bool committed = false, received = false;
@ -278,7 +283,7 @@ private slots:
QCOMPARE(QString::fromUtf8(captured.message.path), QString("documents/dropped.txt"));
int count = transfers.size(); respond(browser, captured, MF_NOT_FOUND); QCOMPARE(transfers.size(), count + 1);
QCOMPARE(QString::fromUtf8(transfers.last().remote), QString("documents/dropped.txt"));
complete(browser, transfers.last());
complete(browser, transfers.last()); QTRY_VERIFY(!cancel->isEnabled());
}
browser.setChannel("42", 11);
QDragEnterEvent other(QPoint(3, 3), Qt::CopyAction, &mime, Qt::LeftButton, Qt::NoModifier);
@ -358,12 +363,12 @@ private slots:
QCOMPARE(QString::fromUtf8(transfers[0].remote), QString("a.txt")); QCOMPARE(transfers[0].owner, 22ULL);
QCOMPARE(QString::fromUtf8(transfers[0].local), paths[0]); QCOMPARE(transfers[0].group, 42ULL);
QCOMPARE(QByteArray((const char*)transfers[0].version, 16), QByteArray(16, '\0'));
complete(browser, transfers[0]); QCOMPARE(QString::fromUtf8(captured.message.path), QString("b.txt"));
complete(browser, transfers[0]); QTRY_COMPARE(QString::fromUtf8(captured.message.path), QString("b.txt"));
answerDialog(QMessageBox::No); respond(browser, captured, MF_OK);
QCOMPARE(transfers.size(), 1); QCOMPARE(QString::fromUtf8(captured.message.path), QString("c.txt"));
QCOMPARE(transfers.size(), 1); QTRY_COMPARE(QString::fromUtf8(captured.message.path), QString("c.txt"));
answerDialog(QMessageBox::Yes); respond(browser, captured, MF_OK); QCOMPARE(transfers.size(), 2);
QCOMPARE(QByteArray((const char*)transfers[1].version, 16), QByteArray(16, '\7'));
complete(browser, transfers[1]); QVERIFY(status->text().contains("2 uploaded, 1 skipped")); QVERIFY(!cancel->isEnabled());
complete(browser, transfers[1]); QTRY_VERIFY(!cancel->isEnabled()); QVERIFY(status->text().contains("Completed: 2, skipped: 1"));
for (const auto& path : paths) QVERIFY(QFile::exists(path));
answerDialog(QDialog::Accepted); browser.uploadOwnFiles("42", paths);
@ -380,10 +385,11 @@ private slots:
answerDialog(QDialog::Accepted); browser.uploadOwnFiles("42", paths);
QTRY_COMPARE(captured.message.command, uint8_t(MF_STAT)); respond(browser, captured, MF_NOT_FOUND);
QCOMPARE(transfers.size(), 4); complete(browser, transfers.last(), MF_NO_SPACE);
QVERIFY(status->text().contains("Upload stopped: a.txt")); QVERIFY(!cancel->isEnabled()); QCOMPARE(transfers.size(), 4);
QVERIFY(status->text().contains("a.txt")); QVERIFY(!cancel->isEnabled()); QCOMPARE(transfers.size(), 4);
QString invalid = dir.filePath(".unsupported"); { QFile file(invalid); QVERIFY(file.open(QIODevice::WriteOnly)); }
answerDialog(QDialog::Accepted); browser.uploadOwnFiles("42", {dir.path()});
QTRY_VERIFY(status->text().contains("not folders or links")); QVERIFY(!cancel->isEnabled()); QCOMPARE(transfers.size(), 4);
QTRY_VERIFY(status->text().contains("Cannot copy this path")); QVERIFY(!cancel->isEnabled()); QCOMPARE(transfers.size(), 4);
QCOMPARE(sqlite3_exec(sql, "DELETE FROM peers_42 WHERE node_id=33", nullptr, nullptr, nullptr), SQLITE_OK);
answerDialog(QMessageBox::Ok); browser.uploadOwnFiles("42", paths); QVERIFY(!cancel->isEnabled()); QCOMPARE(transfers.size(), 4);

Loading…
Cancel
Save