mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-11-05 01:23:24 -08:00
[Tests] Name the tab, home and settings widgets the GUI tests address (#7696)
Co-authored-by: Lukas Brübach <Bruebach.Lukas@bdosecurity.de>
This commit is contained in:
parent
d2abd645e8
commit
34201122ec
8 changed files with 102 additions and 0 deletions
4
Testing/deck_editor_open_test.xml
Normal file
4
Testing/deck_editor_open_test.xml
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
<events>
|
||||||
|
<!-- Open a new deck editor tab from the home page -->
|
||||||
|
<event widget="MainWindow/tabSupervisor/stackedWidget/TabHome/homeWidget/homeButtonsBox/homeCreateNewDeckButton" command="activate" arguments="" />
|
||||||
|
</events>
|
||||||
14
Testing/deck_editor_search_test.xml
Normal file
14
Testing/deck_editor_search_test.xml
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
<events>
|
||||||
|
<!-- Open a new visual deck editor tab from the home page -->
|
||||||
|
<event widget="MainWindow/tabSupervisor/stackedWidget/TabHome/homeWidget/homeButtonsBox/homeCreateNewDeckButton" command="activate" arguments="" />
|
||||||
|
<!-- Type "Lightning" into the search box (keycodes for L-i-g-h-t-n-i-n-g) -->
|
||||||
|
<event widget="MainWindow/tabSupervisor/stackedWidget/TabDeckEditorVisual/databaseDisplayDock/databaseDisplayDockContents/databaseDisplayWidget/searchEdit" command="key" arguments="76" />
|
||||||
|
<event widget="MainWindow/tabSupervisor/stackedWidget/TabDeckEditorVisual/databaseDisplayDock/databaseDisplayDockContents/databaseDisplayWidget/searchEdit" command="key" arguments="105" />
|
||||||
|
<event widget="MainWindow/tabSupervisor/stackedWidget/TabDeckEditorVisual/databaseDisplayDock/databaseDisplayDockContents/databaseDisplayWidget/searchEdit" command="key" arguments="103" />
|
||||||
|
<event widget="MainWindow/tabSupervisor/stackedWidget/TabDeckEditorVisual/databaseDisplayDock/databaseDisplayDockContents/databaseDisplayWidget/searchEdit" command="key" arguments="104" />
|
||||||
|
<event widget="MainWindow/tabSupervisor/stackedWidget/TabDeckEditorVisual/databaseDisplayDock/databaseDisplayDockContents/databaseDisplayWidget/searchEdit" command="key" arguments="116" />
|
||||||
|
<event widget="MainWindow/tabSupervisor/stackedWidget/TabDeckEditorVisual/databaseDisplayDock/databaseDisplayDockContents/databaseDisplayWidget/searchEdit" command="key" arguments="110" />
|
||||||
|
<event widget="MainWindow/tabSupervisor/stackedWidget/TabDeckEditorVisual/databaseDisplayDock/databaseDisplayDockContents/databaseDisplayWidget/searchEdit" command="key" arguments="105" />
|
||||||
|
<event widget="MainWindow/tabSupervisor/stackedWidget/TabDeckEditorVisual/databaseDisplayDock/databaseDisplayDockContents/databaseDisplayWidget/searchEdit" command="key" arguments="110" />
|
||||||
|
<event widget="MainWindow/tabSupervisor/stackedWidget/TabDeckEditorVisual/databaseDisplayDock/databaseDisplayDockContents/databaseDisplayWidget/searchEdit" command="key" arguments="103" />
|
||||||
|
</events>
|
||||||
45
Testing/integration_test.xml
Normal file
45
Testing/integration_test.xml
Normal file
|
|
@ -0,0 +1,45 @@
|
||||||
|
<events>
|
||||||
|
<!-- Integration test: exercises multiple tiers in sequence -->
|
||||||
|
|
||||||
|
<!-- Tier 2: Open and close all menus -->
|
||||||
|
<event widget="MainWindow/menubar" command="activate" arguments="cockatriceMenu" />
|
||||||
|
<event widget="MainWindow" command="key" arguments="16777216" />
|
||||||
|
<event widget="MainWindow/menubar" command="activate" arguments="dbMenu" />
|
||||||
|
<event widget="MainWindow" command="key" arguments="16777216" />
|
||||||
|
<event widget="MainWindow/menubar" command="activate" arguments="tabsMenu" />
|
||||||
|
<event widget="MainWindow" command="key" arguments="16777216" />
|
||||||
|
<event widget="MainWindow/menubar" command="activate" arguments="helpMenu" />
|
||||||
|
<event widget="MainWindow" command="key" arguments="16777216" />
|
||||||
|
|
||||||
|
<!-- Tier 2: Open and close About (modal) -->
|
||||||
|
<event widget="MainWindow/menubar" command="activate" arguments="helpMenu" />
|
||||||
|
<event widget="MainWindow/menubar/helpMenu" command="activate" arguments="&About Cockatrice" />
|
||||||
|
<event widget="MainWindow/aboutDialog" command="key" arguments="16777216" />
|
||||||
|
|
||||||
|
<!-- Tier 4: Open and close ViewLog (non-modal) -->
|
||||||
|
<event widget="MainWindow/menubar" command="activate" arguments="helpMenu" />
|
||||||
|
<event widget="MainWindow/menubar/helpMenu" command="activate" arguments="View &Debug Log" />
|
||||||
|
<event widget="MainWindow/viewLogDialog" command="key" arguments="16777216" />
|
||||||
|
|
||||||
|
<!-- Tier 4: Open and close Tip of the Day (non-modal) -->
|
||||||
|
<event widget="MainWindow/menubar" command="activate" arguments="helpMenu" />
|
||||||
|
<event widget="MainWindow/menubar/helpMenu" command="activate" arguments="&Tip of the Day" />
|
||||||
|
<event widget="MainWindow/tipOfTheDayDialog" command="key" arguments="16777216" />
|
||||||
|
|
||||||
|
<!-- Tier 5: Settings search (state interaction) -->
|
||||||
|
<event widget="MainWindow/menubar" command="activate" arguments="cockatriceMenu" />
|
||||||
|
<event widget="MainWindow/menubar/cockatriceMenu" command="activate" arguments="actionSettings" />
|
||||||
|
<event widget="MainWindow/settingsDialog/settingsView/settingsSearchEdit" command="key" arguments="100" />
|
||||||
|
<event widget="MainWindow/settingsDialog/settingsView/settingsSearchEdit" command="key" arguments="101" />
|
||||||
|
<event widget="MainWindow/settingsDialog/settingsView/settingsSearchEdit" command="key" arguments="98" />
|
||||||
|
<event widget="MainWindow/settingsDialog/settingsView/settingsSearchEdit" command="key" arguments="117" />
|
||||||
|
<event widget="MainWindow/settingsDialog/settingsOkButton" command="activate" arguments="" />
|
||||||
|
|
||||||
|
<!-- Tier 3: Open deck editor from home and type in search -->
|
||||||
|
<event widget="MainWindow/tabSupervisor/stackedWidget/TabHome/homeWidget/homeButtonsBox/homeCreateNewDeckButton" command="activate" arguments="" />
|
||||||
|
<event widget="MainWindow/tabSupervisor/stackedWidget/TabDeckEditorVisual/databaseDisplayDock/databaseDisplayDockContents/databaseDisplayWidget/searchEdit" command="key" arguments="76" />
|
||||||
|
<event widget="MainWindow/tabSupervisor/stackedWidget/TabDeckEditorVisual/databaseDisplayDock/databaseDisplayDockContents/databaseDisplayWidget/searchEdit" command="key" arguments="105" />
|
||||||
|
<event widget="MainWindow/tabSupervisor/stackedWidget/TabDeckEditorVisual/databaseDisplayDock/databaseDisplayDockContents/databaseDisplayWidget/searchEdit" command="key" arguments="103" />
|
||||||
|
<event widget="MainWindow/tabSupervisor/stackedWidget/TabDeckEditorVisual/databaseDisplayDock/databaseDisplayDockContents/databaseDisplayWidget/searchEdit" command="key" arguments="104" />
|
||||||
|
<event widget="MainWindow/tabSupervisor/stackedWidget/TabDeckEditorVisual/databaseDisplayDock/databaseDisplayDockContents/databaseDisplayWidget/searchEdit" command="key" arguments="116" />
|
||||||
|
</events>
|
||||||
13
Testing/settings_search_test.xml
Normal file
13
Testing/settings_search_test.xml
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
<events>
|
||||||
|
<!-- Tier 5: State verification — open Settings, search for a page, close -->
|
||||||
|
<event widget="MainWindow/menubar" command="activate" arguments="cockatriceMenu" />
|
||||||
|
<event widget="MainWindow/menubar/cockatriceMenu" command="activate" arguments="actionSettings" />
|
||||||
|
<!-- Type "sound" in the settings search to filter pages -->
|
||||||
|
<event widget="MainWindow/settingsDialog/settingsView/settingsSearchEdit" command="key" arguments="115" />
|
||||||
|
<event widget="MainWindow/settingsDialog/settingsView/settingsSearchEdit" command="key" arguments="111" />
|
||||||
|
<event widget="MainWindow/settingsDialog/settingsView/settingsSearchEdit" command="key" arguments="117" />
|
||||||
|
<event widget="MainWindow/settingsDialog/settingsView/settingsSearchEdit" command="key" arguments="110" />
|
||||||
|
<event widget="MainWindow/settingsDialog/settingsView/settingsSearchEdit" command="key" arguments="100" />
|
||||||
|
<!-- Close settings -->
|
||||||
|
<event widget="MainWindow/settingsDialog/settingsOkButton" command="activate" arguments="" />
|
||||||
|
</events>
|
||||||
|
|
@ -119,6 +119,8 @@ QWidget *fromWidgetId(WidgetId id)
|
||||||
|
|
||||||
SettingsView::SettingsView(QWidget *parent) : QWidget(parent), currentTabIndex(0), searchActive(false)
|
SettingsView::SettingsView(QWidget *parent) : QWidget(parent), currentTabIndex(0), searchActive(false)
|
||||||
{
|
{
|
||||||
|
setObjectName("settingsView");
|
||||||
|
|
||||||
setupUi();
|
setupUi();
|
||||||
|
|
||||||
connect(&SettingsCache::instance().personal(), &PersonalSettings::langChanged, this, &SettingsView::retranslateUi);
|
connect(&SettingsCache::instance().personal(), &PersonalSettings::langChanged, this, &SettingsView::retranslateUi);
|
||||||
|
|
@ -135,6 +137,7 @@ void SettingsView::setupUi()
|
||||||
searchEdit->addAction(themePixmap(QStringLiteral("icons/search")), QLineEdit::LeadingPosition);
|
searchEdit->addAction(themePixmap(QStringLiteral("icons/search")), QLineEdit::LeadingPosition);
|
||||||
searchEdit->installEventFilter(this);
|
searchEdit->installEventFilter(this);
|
||||||
connect(searchEdit, &QLineEdit::textChanged, this, &SettingsView::onSearchTextChanged);
|
connect(searchEdit, &QLineEdit::textChanged, this, &SettingsView::onSearchTextChanged);
|
||||||
|
searchEdit->setObjectName("settingsSearchEdit");
|
||||||
|
|
||||||
auto *searchLayout = new QHBoxLayout;
|
auto *searchLayout = new QHBoxLayout;
|
||||||
searchLayout->addWidget(searchEdit);
|
searchLayout->addWidget(searchEdit);
|
||||||
|
|
|
||||||
|
|
@ -68,6 +68,7 @@
|
||||||
HomeWidget::HomeWidget(QWidget *parent, TabSupervisor *_tabSupervisor)
|
HomeWidget::HomeWidget(QWidget *parent, TabSupervisor *_tabSupervisor)
|
||||||
: QWidget(parent), tabSupervisor(_tabSupervisor), background(themePixmap(QStringLiteral("backgrounds/home")))
|
: QWidget(parent), tabSupervisor(_tabSupervisor), background(themePixmap(QStringLiteral("backgrounds/home")))
|
||||||
{
|
{
|
||||||
|
setObjectName("homeWidget");
|
||||||
layout = new QGridLayout(this);
|
layout = new QGridLayout(this);
|
||||||
|
|
||||||
backgroundSourceCard = new CardInfoPictureArtCropWidget(this);
|
backgroundSourceCard = new CardInfoPictureArtCropWidget(this);
|
||||||
|
|
@ -287,6 +288,7 @@ void HomeWidget::updateButtonsToBackgroundColor()
|
||||||
QGroupBox *HomeWidget::createButtons()
|
QGroupBox *HomeWidget::createButtons()
|
||||||
{
|
{
|
||||||
QGroupBox *box = new QGroupBox(this);
|
QGroupBox *box = new QGroupBox(this);
|
||||||
|
box->setObjectName("homeButtonsBox");
|
||||||
box->setStyleSheet(R"(
|
box->setStyleSheet(R"(
|
||||||
QGroupBox {
|
QGroupBox {
|
||||||
font-size: 20px;
|
font-size: 20px;
|
||||||
|
|
@ -311,27 +313,34 @@ QGroupBox *HomeWidget::createButtons()
|
||||||
boxLayout->addSpacing(25);
|
boxLayout->addSpacing(25);
|
||||||
|
|
||||||
connectButton = new HomeStyledButton(QString(), gradientColors);
|
connectButton = new HomeStyledButton(QString(), gradientColors);
|
||||||
|
connectButton->setObjectName("homeConnectButton");
|
||||||
boxLayout->addWidget(connectButton);
|
boxLayout->addWidget(connectButton);
|
||||||
|
|
||||||
visualDeckEditorButton = new HomeStyledButton(QString(), gradientColors);
|
visualDeckEditorButton = new HomeStyledButton(QString(), gradientColors);
|
||||||
|
visualDeckEditorButton->setObjectName("homeCreateNewDeckButton");
|
||||||
connect(visualDeckEditorButton, &QPushButton::clicked, tabSupervisor,
|
connect(visualDeckEditorButton, &QPushButton::clicked, tabSupervisor,
|
||||||
[this] { tabSupervisor->openDeckInNewTab(LoadedDeck()); });
|
[this] { tabSupervisor->openDeckInNewTab(LoadedDeck()); });
|
||||||
boxLayout->addWidget(visualDeckEditorButton);
|
boxLayout->addWidget(visualDeckEditorButton);
|
||||||
visualDeckStorageButton = new HomeStyledButton(QString(), gradientColors);
|
visualDeckStorageButton = new HomeStyledButton(QString(), gradientColors);
|
||||||
|
visualDeckStorageButton->setObjectName("homeBrowseDecksButton");
|
||||||
connect(visualDeckStorageButton, &QPushButton::clicked, tabSupervisor,
|
connect(visualDeckStorageButton, &QPushButton::clicked, tabSupervisor,
|
||||||
[this] { tabSupervisor->actTabVisualDeckStorage(true); });
|
[this] { tabSupervisor->actTabVisualDeckStorage(true); });
|
||||||
boxLayout->addWidget(visualDeckStorageButton);
|
boxLayout->addWidget(visualDeckStorageButton);
|
||||||
visualDatabaseDisplayButton = new HomeStyledButton(QString(), gradientColors);
|
visualDatabaseDisplayButton = new HomeStyledButton(QString(), gradientColors);
|
||||||
|
visualDatabaseDisplayButton->setObjectName("homeBrowseCardDatabaseButton");
|
||||||
connect(visualDatabaseDisplayButton, &QPushButton::clicked, tabSupervisor,
|
connect(visualDatabaseDisplayButton, &QPushButton::clicked, tabSupervisor,
|
||||||
&TabSupervisor::addVisualDatabaseDisplayTab);
|
&TabSupervisor::addVisualDatabaseDisplayTab);
|
||||||
boxLayout->addWidget(visualDatabaseDisplayButton);
|
boxLayout->addWidget(visualDatabaseDisplayButton);
|
||||||
edhrecButton = new HomeStyledButton(QString(), gradientColors);
|
edhrecButton = new HomeStyledButton(QString(), gradientColors);
|
||||||
|
edhrecButton->setObjectName("homeBrowseEdhrecButton");
|
||||||
connect(edhrecButton, &QPushButton::clicked, tabSupervisor, &TabSupervisor::addEdhrecMainTab);
|
connect(edhrecButton, &QPushButton::clicked, tabSupervisor, &TabSupervisor::addEdhrecMainTab);
|
||||||
boxLayout->addWidget(edhrecButton);
|
boxLayout->addWidget(edhrecButton);
|
||||||
archidektButton = new HomeStyledButton(QString(), gradientColors);
|
archidektButton = new HomeStyledButton(QString(), gradientColors);
|
||||||
|
archidektButton->setObjectName("homeBrowseArchidektButton");
|
||||||
connect(archidektButton, &QPushButton::clicked, tabSupervisor, &TabSupervisor::addArchidektTab);
|
connect(archidektButton, &QPushButton::clicked, tabSupervisor, &TabSupervisor::addArchidektTab);
|
||||||
boxLayout->addWidget(archidektButton);
|
boxLayout->addWidget(archidektButton);
|
||||||
replayButton = new HomeStyledButton(QString(), gradientColors);
|
replayButton = new HomeStyledButton(QString(), gradientColors);
|
||||||
|
replayButton->setObjectName("homeViewReplaysButton");
|
||||||
connect(replayButton, &QPushButton::clicked, tabSupervisor, [this] { tabSupervisor->actTabReplays(true); });
|
connect(replayButton, &QPushButton::clicked, tabSupervisor, [this] { tabSupervisor->actTabReplays(true); });
|
||||||
boxLayout->addWidget(replayButton);
|
boxLayout->addWidget(replayButton);
|
||||||
if (qobject_cast<MainWindow *>(tabSupervisor->parentWidget())) {
|
if (qobject_cast<MainWindow *>(tabSupervisor->parentWidget())) {
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@ class TabSupervisor;
|
||||||
|
|
||||||
TabHome::TabHome(TabSupervisor *_tabSupervisor, AbstractClient *_client) : Tab(_tabSupervisor), client(_client)
|
TabHome::TabHome(TabSupervisor *_tabSupervisor, AbstractClient *_client) : Tab(_tabSupervisor), client(_client)
|
||||||
{
|
{
|
||||||
|
setObjectName("TabHome");
|
||||||
homeWidget = new HomeWidget(this, tabSupervisor);
|
homeWidget = new HomeWidget(this, tabSupervisor);
|
||||||
setCentralWidget(homeWidget);
|
setCentralWidget(homeWidget);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -54,6 +54,7 @@
|
||||||
#include <QPainter>
|
#include <QPainter>
|
||||||
#include <QRect>
|
#include <QRect>
|
||||||
#include <QSharedPointer>
|
#include <QSharedPointer>
|
||||||
|
#include <QStackedWidget>
|
||||||
#include <QStringLiteral>
|
#include <QStringLiteral>
|
||||||
#include <QStyle>
|
#include <QStyle>
|
||||||
#include <QStyleOption>
|
#include <QStyleOption>
|
||||||
|
|
@ -157,6 +158,15 @@ TabSupervisor::TabSupervisor(AbstractClient *_client, QMenu *tabsMenu, QWidget *
|
||||||
tabReplays(nullptr), tabAdmin(nullptr), tabCardArtRules(nullptr), tabLog(nullptr), tabReport(nullptr),
|
tabReplays(nullptr), tabAdmin(nullptr), tabCardArtRules(nullptr), tabLog(nullptr), tabReport(nullptr),
|
||||||
tabModeration(nullptr), tabDeveloper(nullptr), isLocalGame(false)
|
tabModeration(nullptr), tabDeveloper(nullptr), isLocalGame(false)
|
||||||
{
|
{
|
||||||
|
setObjectName("tabSupervisor");
|
||||||
|
|
||||||
|
// QTabWidget keeps tab pages in an internal stacked widget. Give it a stable
|
||||||
|
// name so the GUI tests can address the pages by a readable path
|
||||||
|
// (tabSupervisor/stackedWidget/<TabName>).
|
||||||
|
if (auto *stackedWidget = findChild<QStackedWidget *>()) {
|
||||||
|
stackedWidget->setObjectName("stackedWidget");
|
||||||
|
}
|
||||||
|
|
||||||
setElideMode(Qt::ElideRight);
|
setElideMode(Qt::ElideRight);
|
||||||
setMovable(true);
|
setMovable(true);
|
||||||
setIconSize(QSize(15, 15));
|
setIconSize(QSize(15, 15));
|
||||||
|
|
@ -462,6 +472,9 @@ void TabSupervisor::addCloseButtonToTab(Tab *tab, int tabIndex, QAction *manager
|
||||||
auto closeSide = static_cast<QTabBar::ButtonPosition>(
|
auto closeSide = static_cast<QTabBar::ButtonPosition>(
|
||||||
tabBar()->style()->styleHint(QStyle::SH_TabBar_CloseButtonPosition, nullptr, tabBar()));
|
tabBar()->style()->styleHint(QStyle::SH_TabBar_CloseButtonPosition, nullptr, tabBar()));
|
||||||
auto *closeButton = new CloseButton(tab);
|
auto *closeButton = new CloseButton(tab);
|
||||||
|
// No object name: the tab bar index shifts when tabs move or close, so an
|
||||||
|
// index-derived name would go stale (or collide). Callers find the button
|
||||||
|
// through the tab widget instead.
|
||||||
if (manager) {
|
if (manager) {
|
||||||
// If managed, all close requests should go through the menu action
|
// If managed, all close requests should go through the menu action
|
||||||
connect(closeButton, &CloseButton::clicked, this, [manager] { checkAndTrigger(manager, false); });
|
connect(closeButton, &CloseButton::clicked, this, [manager] { checkAndTrigger(manager, false); });
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue