diff --git a/tools/chatgui/tests/test_ptt_key_chord.cpp b/tools/chatgui/tests/test_ptt_key_chord.cpp index 18f7fc65e..422c8a5e1 100644 --- a/tools/chatgui/tests/test_ptt_key_chord.cpp +++ b/tools/chatgui/tests/test_ptt_key_chord.cpp @@ -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; } diff --git a/tools/chatgui/tests/test_ptt_portal.cpp b/tools/chatgui/tests/test_ptt_portal.cpp index 12cae5d7b..ab4e9e4cc 100644 --- a/tools/chatgui/tests/test_ptt_portal.cpp +++ b/tools/chatgui/tests/test_ptt_portal.cpp @@ -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);