Cover single portal assignment and optional hotkey locking

This commit is contained in:
evgeny committed 2026-10-31 17:19:56 +01:00
1 parent d1a62c51ef
commit 83f16d8dcd
2 files changed
+28 -14

No files matched your search

@@ -70,6 +70,14 @@ int main() {
ptt.observe(false, 1250, 400);
ptt.observe(true, 1600, 400);
CHECK(ptt.talking && !ptt.latched); // ровно interval — два одиночных нажатия
ptt = {};
ptt.observe(true, 0, 0);
CHECK(ptt.talking && !ptt.latched);
ptt.observe(false, 50, 0);
ptt.observe(true, 100, 0);
CHECK(ptt.talking && !ptt.latched); // отключённая галочка: двойное нажатие не фиксирует
ptt.observe(false, 150, 0);
CHECK(!ptt.talking);
std::printf("PTT key chords and activation: %s\n", failures ? "FAILED" : "PASSED");
return failures ? 1 : 0;
}
+20 -14
View File
@@ -95,23 +95,27 @@ private slots:
QCOMPARE(fake.bindCount, 0); // при первом запуске не открываем системный диалог
portal.configure("x11:123");
QTRY_COMPARE(fake.bindCount, 1);
QTRY_COMPARE(portal.descriptions().value(0), QString("F8"));
QTRY_COMPARE(portal.description(), QString("F8"));
QCOMPARE(fake.shortcuts.size(), 1);
QCOMPARE(fake.shortcuts[0].id, QString("ptt"));
QTRY_VERIFY(!portal.busy());
QDBusObjectPath session(fake.session);
emit fake.Activated(QDBusObjectPath("/unrelated"), "ptt1", 0, {});
emit fake.Activated(QDBusObjectPath("/unrelated"), "ptt", 0, {});
emit fake.Activated(session, "other_action", 0, {});
emit fake.Activated(session, "ptt1", 1, {});
emit fake.Activated(session, "ptt", 1, {});
QTRY_COMPARE(talking.size(), 1);
QCOMPARE(talking.last()[0].toBool(), true);
emit fake.Activated(session, "ptt1", 2, {}); // повторное событие не создаёт второй start
emit fake.Activated(session, "ptt", 2, {}); // повторное событие не создаёт второй start
emit fake.Activated(session, "ptt2", 3, {});
emit fake.Deactivated(session, "ptt1", 4, {});
emit fake.Deactivated(session, "ptt", 4, {});
emit fake.Deactivated(session, "ptt2", 5, {});
QTRY_COMPARE(talking.size(), 2);
QCOMPARE(talking.last()[0].toBool(), false); // отпускание одного из двух хоткеев не останавливает второй
QCOMPARE(talking.last()[0].toBool(), false); // старые/чужие ID не активируют передачу
QSignalSpy resets(&portal, &PttPortal::resetRequested);
portal.setInhibited(true);
emit fake.Activated(session, "ptt1", 6, {});
emit fake.Deactivated(session, "ptt1", 7, {});
QCOMPARE(resets.size(), 1); // сброс нужен также при фиксации после отпускания клавиши
emit fake.Activated(session, "ptt", 6, {});
emit fake.Deactivated(session, "ptt", 7, {});
QTest::qWait(20);
QCOMPARE(talking.size(), 2);
portal.setInhibited(false);
@@ -119,24 +123,26 @@ private slots:
QTRY_COMPARE(fake.configureCount, 1); // изменение через Configure, без повторного Bind
fake.shortcuts[0].properties["trigger_description"] = "Ctrl+F8";
emit fake.ShortcutsChanged(session, fake.shortcuts);
QTRY_COMPARE(portal.descriptions().value(0), QString("Ctrl+F8"));
emit fake.Activated(session, "ptt1", 8, {});
QTRY_COMPARE(portal.description(), QString("Ctrl+F8"));
QTRY_COMPARE(resets.size(), 2);
emit fake.Activated(session, "ptt", 8, {});
QTRY_COMPARE(talking.size(), 3);
emit fake.sessionObject->Closed({});
QTRY_COMPARE(talking.size(), 4);
QCOMPARE(talking.last()[0].toBool(), false);
QVERIFY(portal.descriptions()[0].isEmpty());
QTRY_COMPARE(resets.size(), 3);
QVERIFY(portal.description().isEmpty());
fake.bindResponse = 1;
portal.configure("");
QTRY_COMPARE(fake.bindCount, 2);
QTRY_VERIFY(!portal.busy());
QVERIFY(portal.descriptions()[0].isEmpty()); // отмена не оставляет активную сессию
QVERIFY(portal.description().isEmpty()); // отмена не оставляет активную сессию
fake.bindResponse = 0;
portal.configure("");
QTRY_COMPARE(fake.bindCount, 3);
QTRY_COMPARE(fake.configureCount, 2); // сохранённые сочетания восстанавливаются, затем открывается настройка
QTRY_COMPARE(portal.descriptions().value(0), QString("F8"));
emit fake.Activated(QDBusObjectPath(fake.session), "ptt3", 9, {});
QTRY_COMPARE(portal.description(), QString("F8"));
emit fake.Activated(QDBusObjectPath(fake.session), "ptt", 9, {});
QTRY_COMPARE(talking.size(), 5);
QVERIFY(bus.unregisterService(service));
QTRY_COMPARE(talking.size(), 6);