Test compressed recording rejection and ordered MainWindow shutdown
This commit is contained in:
1 parent
fee528194b
commit
65f39b6bae
1 file changed
+33
@@ -2,6 +2,7 @@
|
||||
* Native trampoline исполняется без подмены; пустой каталог CHAT даёт штатный FINISHED/UNAVAILABLE для START. */
|
||||
#include "../src/mainwindow.h"
|
||||
#include "../transport/gui_bridge.h"
|
||||
#include "../transport/utun_node.h"
|
||||
#include "../db/db_manager.h"
|
||||
#include "../src/inputbar.h"
|
||||
#include "../src/messagedelegate.h"
|
||||
@@ -27,6 +28,7 @@ extern "C" {
|
||||
#include "radio/radio_call.h"
|
||||
#include "dm/dm_core.h"
|
||||
#include "media_async/attachment_send.h"
|
||||
#include "audio_compressor.h"
|
||||
#include "mem.h"
|
||||
#include "debug_config.h"
|
||||
}
|
||||
@@ -263,6 +265,37 @@ private slots:
|
||||
}
|
||||
QCOMPARE(releases.load(), 1); QCOMPARE(QFile::exists(QString::fromUtf8(source)), !temporary);
|
||||
}
|
||||
void discardUnsubmittedCompressor() {
|
||||
const auto baseline = u_get_allocated_count();
|
||||
auto* request = static_cast<attachment_send_req*>(u_calloc(1, sizeof(attachment_send_req))); QVERIFY(request);
|
||||
request->compressor = audio_compressor_create(); QVERIFY(request->compressor);
|
||||
const std::vector<int16_t> samples(24000, 0);
|
||||
QCOMPARE(audio_compressor_push(request->compressor, samples.data(), samples.size()), 0);
|
||||
attachment_send_discard(request); QCOMPARE(u_get_allocated_count(), baseline);
|
||||
}
|
||||
void orderedWindowShutdownPersistsGeometry() {
|
||||
QTemporaryDir directory; QVERIFY(directory.isValid());
|
||||
const QString path = directory.filePath("shutdown.cfg"), log = directory.filePath("shutdown.log");
|
||||
QFile config(path); QVERIFY(config.open(QIODevice::WriteOnly));
|
||||
const QByteArray text = "[global]\nauto_sockets=no\n[chatserver]\ngroup_autoconnect=0\nstorage_autoload=0\n"
|
||||
"member_files_enabled=0\nlocal_invites_enabled=0\nlocal_broadcasts_enabled=0\n[ntp]\nenabled=no\n";
|
||||
QCOMPARE(config.write(text), text.size()); config.close();
|
||||
auto logger = qScopeGuard([] { debug_disable_file_output(); });
|
||||
DbManager db; MainWindow window(nullptr, &db, path, directory.path(), log);
|
||||
auto* node = window.utunNode(); QVERIFY(node && node->isRunning()); QTRY_VERIFY(db.isOpen());
|
||||
window.resize(1017, 713); const QRect geometry = window.normalGeometry(); QVERIFY(!geometry.isEmpty());
|
||||
const QString expected = QStringLiteral("%1,%2,%3,%4").arg(geometry.width()).arg(geometry.height()).arg(geometry.x()).arg(geometry.y());
|
||||
QSignalSpy stopping(node, &UtunNode::stopping), stopped(node, &UtunNode::stopped);
|
||||
window.requestShutdown(); QTRY_COMPARE_WITH_TIMEOUT(stopped.size(), 1, 5000);
|
||||
QCOMPARE(stopping.size(), 1); QVERIFY(!db.isOpen());
|
||||
sqlite3* saved = nullptr;
|
||||
QCOMPARE(sqlite3_open_v2(qPrintable(directory.filePath("chats.db")), &saved, SQLITE_OPEN_READONLY, nullptr), SQLITE_OK);
|
||||
auto close = qScopeGuard([&] { sqlite3_close(saved); });
|
||||
DbManager snapshot; snapshot.setDb(saved);
|
||||
QCOMPARE(snapshot.getUiState("window_geometry"), expected);
|
||||
QCOMPARE(snapshot.getUiState("window_maximized"), QString("0"));
|
||||
QVERIFY(!snapshot.getUiState("window_splitter").isEmpty()); snapshot.setDb(nullptr);
|
||||
}
|
||||
void dmAcknowledgment_data() {
|
||||
QTest::addColumn<QString>("scenario");
|
||||
for (const auto& name : {"executed", "stale-generation", "cancelled", "unavailable"})
|
||||
|
||||
Reference in new issue
Block a user