44 lines
2.3 KiB
Python
44 lines
2.3 KiB
Python
from pathlib import Path
|
|
import json
|
|
import sys
|
|
from unittest import mock
|
|
from PySide6.QtCore import Qt, QRect
|
|
from PySide6.QtTest import QTest
|
|
from PySide6.QtWidgets import QApplication
|
|
import wechat_gui_qt as qt
|
|
from test_review_assistant_picker_layout import ACCOUNT, NAMED, ANONYMOUS, DIRECTORY
|
|
|
|
app = QApplication.instance() or QApplication([])
|
|
qt._register_bundled_fonts()
|
|
app.setStyle('Fusion')
|
|
app.setStyleSheet(qt.APP_QSS)
|
|
app.setFont(qt._ui_font(9))
|
|
with mock.patch.object(qt.QTimer, 'singleShot'), mock.patch.object(qt.ReviewAssistantPicker, '_available_geometry', lambda _self: (QRect(0, 0, 640, 360) if len(sys.argv) > 3 else QRect(0, 0, 1280, 720))):
|
|
dialog = qt.ReviewAssistantPicker(ACCOUNT, current_recipient_id=NAMED['id'])
|
|
dialog._filter = 'all'
|
|
for key, button in dialog.filter_buttons.items():
|
|
button.setChecked(key == 'all')
|
|
dialog._serial = 1
|
|
long_directory = {**DIRECTORY, 'name': '李助理(夜班值守与客户回访专用私人微信)'}
|
|
dialog._loaded({'ready': True, 'account_id': ACCOUNT, '_serial': 1,
|
|
'items': [NAMED, ANONYMOUS, long_directory], 'total': 3,
|
|
'all_total': 3, 'all_selectable_total': 2, 'all_contact_total': 1})
|
|
dialog.show(); app.processEvents()
|
|
root = Path(sys.argv[1]); suffix = sys.argv[2]
|
|
result = {'scale': suffix, 'dpr': dialog.devicePixelRatioF(), 'screens': {}}
|
|
for index, scenario in ((0, 'named'), (1, 'anonymous'), (2, 'directory')):
|
|
item = dialog.contacts.item(index)
|
|
QTest.mouseClick(dialog.contacts.viewport(), Qt.MouseButton.LeftButton,
|
|
pos=dialog.contacts.visualItemRect(item).center())
|
|
dialog.query.setFocus(); app.processEvents()
|
|
assert item.isSelected() and not item.icon().isNull()
|
|
assert dialog.choose.isEnabled() == (scenario != 'directory')
|
|
assert dialog.contacts.horizontalScrollBar().maximum() == 0
|
|
assert dialog.grab().save(str(root / f'picker-{scenario}-{suffix}.png'))
|
|
result['screens'][scenario] = {'logical_size': [dialog.width(), dialog.height()],
|
|
'horizontal_scroll_max': dialog.contacts.horizontalScrollBar().maximum(),
|
|
'details_height': dialog.details_reason.height(), 'confirm_enabled': dialog.choose.isEnabled()}
|
|
(root / f'picker-layout-{suffix}.json').write_text(json.dumps(result, ensure_ascii=False, indent=2), encoding='utf-8')
|
|
print(json.dumps(result, ensure_ascii=False))
|
|
dialog.reject()
|