diff --git a/tools/chatgui/tests/test_invite_links.cpp b/tools/chatgui/tests/test_invite_links.cpp index 2c5181bf..a3a6c197 100644 --- a/tools/chatgui/tests/test_invite_links.cpp +++ b/tools/chatgui/tests/test_invite_links.cpp @@ -1,4 +1,4 @@ -/* Проверка реальных координат перенесённых ссылок и кнопки приглашения в строке участника. */ +/* Проверка реальных координат ссылок и трёх кнопок действий в строке участника. */ #include "../src/messagedelegate.h" #include "../src/chatview.h" #include "../src/accountdelegate.h" @@ -422,21 +422,41 @@ private slots: QVERIFY(selection.endChar - selection.startChar < 20); } - void memberPlusTargetsOtherMembersOnly() { + void memberCallButtonsTargetOnlinePeersOnly() { QStandardItemModel model; auto* other = new QStandardItem("other"); other->setData(false, Qt::UserRole + 2); model.appendRow(other); auto* self = new QStandardItem("self"); self->setData(true, Qt::UserRole + 2); model.appendRow(self); QListView view; AccountDelegate delegate; view.setModel(&model); view.setItemDelegate(&delegate); view.resize(240, 140); view.show(); QTest::qWait(30); - QSignalSpy invites(&delegate, &AccountDelegate::inviteRequested); + QSignalSpy radios(&delegate, &AccountDelegate::radioCallRequested); + QSignalSpy calls(&delegate, &AccountDelegate::callRequested); const QRect row = view.visualRect(model.index(0, 0)); - QTest::mouseClick(view.viewport(), Qt::LeftButton, Qt::NoModifier, QPoint(row.right() - 17, row.center().y())); - QCOMPARE(invites.count(), 1); QCOMPARE(qvariant_cast(invites.first().first()).row(), 0); + const QPoint radio(row.right() - 50, row.center().y()), phone(row.right() - 17, row.center().y()); + QTest::mouseClick(view.viewport(), Qt::LeftButton, Qt::NoModifier, radio); + QTest::mouseClick(view.viewport(), Qt::LeftButton, Qt::NoModifier, phone); + QCOMPARE(radios.count(), 0); QCOMPARE(calls.count(), 0); + other->setData(true, MemberListModel::OnlineRole); + QTest::mouseClick(view.viewport(), Qt::LeftButton, Qt::NoModifier, radio); + QTest::mouseClick(view.viewport(), Qt::LeftButton, Qt::NoModifier, phone); + QCOMPARE(radios.count(), 1); QCOMPARE(qvariant_cast(radios.first().first()).row(), 0); + QCOMPARE(calls.count(), 1); QCOMPARE(qvariant_cast(calls.first().first()).row(), 0); const QRect own = view.visualRect(model.index(1, 0)); QTest::mouseClick(view.viewport(), Qt::LeftButton, Qt::NoModifier, QPoint(own.right() - 17, own.center().y())); + QTest::mouseClick(view.viewport(), Qt::LeftButton, Qt::NoModifier, QPoint(own.right() - 50, own.center().y())); QTest::mouseClick(view.viewport(), Qt::LeftButton, Qt::NoModifier, QPoint(60, row.center().y())); - QCOMPARE(invites.count(), 1); + QCOMPARE(radios.count(), 1); QCOMPARE(calls.count(), 1); + QTest::mousePress(view.viewport(), Qt::LeftButton, Qt::NoModifier, radio); + QTest::mouseRelease(view.viewport(), Qt::LeftButton, Qt::NoModifier, phone); + QTest::mousePress(view.viewport(), Qt::LeftButton, Qt::NoModifier, radio); + QTest::mouseRelease(view.viewport(), Qt::LeftButton, Qt::NoModifier, radio + QPoint(6, 0)); + QTest::mousePress(view.viewport(), Qt::LeftButton, Qt::NoModifier, phone); + other->setData(false, MemberListModel::OnlineRole); + QTest::mouseRelease(view.viewport(), Qt::LeftButton, Qt::NoModifier, phone); + QCOMPARE(radios.count(), 1); QCOMPARE(calls.count(), 1); + other->setData(true, MemberListModel::OnlineRole); + const QString preview = qEnvironmentVariable("UTUN_MEMBER_ACTION_PREVIEW"); + if (!preview.isEmpty()) QVERIFY(view.grab().save(preview)); } void radioMuteButtonTargetsMemberAndChangesColor() { @@ -446,20 +466,21 @@ private slots: QListView view; AccountDelegate delegate; view.setModel(&model); view.setItemDelegate(&delegate); view.resize(280, 140); view.show(); QTest::qWait(30); QSignalSpy toggles(&delegate, &AccountDelegate::radioMuteRequested); - QSignalSpy invites(&delegate, &AccountDelegate::inviteRequested); + QSignalSpy radios(&delegate, &AccountDelegate::radioCallRequested); + QSignalSpy calls(&delegate, &AccountDelegate::callRequested); connect(&delegate, &AccountDelegate::radioMuteRequested, &model, [&](const QModelIndex& index) { model.setData(index, index.data(Qt::UserRole + 3).toInt() ^ CHAT_MEMBER_FLAG_RADIO_MUTED, Qt::UserRole + 3); }); const QModelIndex index = model.index(0, 0); const QRect row = view.visualRect(index); - const QPoint button(row.right() - 50, row.center().y()); + const QPoint button(row.right() - 82, row.center().y()); auto colorCount = [&](QRgb color) { QImage image(view.viewport()->size(), QImage::Format_RGB32); image.fill(Qt::white); QStyleOptionViewItem option; option.initFrom(&view); option.rect = row; QPainter painter(&image); delegate.paint(&painter, option, index); painter.end(); int count = 0; for (int y = row.top(); y <= row.bottom(); ++y) - for (int x = row.right() - 63; x < row.right() - 35; ++x) count += image.pixel(x, y) == color; + for (int x = row.right() - 95; x < row.right() - 67; ++x) count += image.pixel(x, y) == color; return count; }; QVERIFY(colorCount(QColor("#9E9E9E").rgb()) > 0); // Молчащий участник серый; зелёный означает передачу. @@ -471,9 +492,9 @@ private slots: QTest::mouseClick(view.viewport(), Qt::LeftButton, Qt::NoModifier, button); QCOMPARE(toggles.count(), 2); QVERIFY(colorCount(QColor("#4CAF50").rgb()) > 0); const QRect own = view.visualRect(model.index(1, 0)); - QTest::mouseClick(view.viewport(), Qt::LeftButton, Qt::NoModifier, QPoint(own.right() - 50, own.center().y())); + QTest::mouseClick(view.viewport(), Qt::LeftButton, Qt::NoModifier, QPoint(own.right() - 17, own.center().y())); QTest::mouseClick(view.viewport(), Qt::LeftButton, Qt::NoModifier, QPoint(65, row.center().y())); - QCOMPARE(toggles.count(), 2); QCOMPARE(invites.count(), 0); + QCOMPARE(toggles.count(), 2); QCOMPARE(radios.count(), 0); QCOMPARE(calls.count(), 0); QTest::mousePress(view.viewport(), Qt::LeftButton, Qt::NoModifier, button); QTest::mouseRelease(view.viewport(), Qt::LeftButton, Qt::NoModifier, QPoint(65, row.center().y())); QCOMPARE(toggles.count(), 2); diff --git a/tools/chatgui/tests/test_radio_mute_bridge.cpp b/tools/chatgui/tests/test_radio_mute_bridge.cpp index 5f2abbe6..15e6a281 100644 --- a/tools/chatgui/tests/test_radio_mute_bridge.cpp +++ b/tools/chatgui/tests/test_radio_mute_bridge.cpp @@ -128,14 +128,14 @@ private slots: connect(&delegate, &AccountDelegate::radioMuteRequested, &view, [&](const QModelIndex&) { accepted = gui_bridge_toggle_member_radio_mute(probe.channel.toUtf8().constData(), 42); }); - const QRect row = view.visualRect(source); const QPoint button(row.right() - 50, row.center().y()); + const QRect row = view.visualRect(source); const QPoint button(row.right() - 82, row.center().y()); auto iconImage = [&] { - return view.viewport()->grab().toImage().copy(QRect(row.right() - 63, row.center().y() - 14, 28, 28)); + return view.viewport()->grab().toImage().copy(QRect(row.right() - 95, row.center().y() - 14, 28, 28)); }; auto iconHasColor = [&](const QColor& color) { const QImage image = view.viewport()->grab().toImage(); for (int y = row.top(); y <= row.bottom(); ++y) - for (int x = row.right() - 63; x < row.right() - 35; ++x) if (image.pixelColor(x, y) == color) return true; + for (int x = row.right() - 95; x < row.right() - 67; ++x) if (image.pixelColor(x, y) == color) return true; return false; }; QVERIFY(iconHasColor(QColor("#9E9E9E"))); QVERIFY(!iconHasColor(QColor("#4CAF50"))); @@ -186,7 +186,7 @@ private slots: QVERIFY(self.isValid()); model.setRadioState(group, true, true); QVERIFY(self.data(MemberListModel::RadioSpeakingRole).toBool()); const QRect selfRow = view.visualRect(self); - QTest::mouseClick(view.viewport(), Qt::LeftButton, Qt::NoModifier, QPoint(selfRow.right() - 50, selfRow.center().y())); + QTest::mouseClick(view.viewport(), Qt::LeftButton, Qt::NoModifier, QPoint(selfRow.right() - 17, selfRow.center().y())); QCOMPARE(probe.results.size(), 2); // Собственный динамик не переключает mute. model.setRadioState(group, true, false); QVERIFY(!self.data(MemberListModel::RadioSpeakingRole).toBool());