Check desktop call buttons, online changes, drags, and shifted radio mute control
This commit is contained in:
1 parent
cd58903101
commit
9712a0a583
2 files changed
+36
-15
No files matched your search
@@ -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<QModelIndex>(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<QModelIndex>(radios.first().first()).row(), 0);
|
||||
QCOMPARE(calls.count(), 1); QCOMPARE(qvariant_cast<QModelIndex>(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);
|
||||
|
||||
@@ -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());
|
||||
|
||||
|
||||
Reference in new issue
Block a user