tests: More focus tests

This commit is contained in:
Sergio Martins
2022-05-11 17:23:31 +01:00
parent 8a725298de
commit 313be585ae
9 changed files with 41 additions and 9 deletions

View File

@@ -174,6 +174,7 @@ public:
virtual void releaseKeyboard() = 0;
QScreen *screen() const;
virtual void setFocus(Qt::FocusReason) = 0;
virtual void setFocusPolicy(Qt::FocusPolicy) = 0;
virtual void setWindowOpacity(double) = 0;
virtual void setCursor(Qt::CursorShape) = 0;
virtual void setMouseTracking(bool) = 0;

View File

@@ -217,6 +217,11 @@ void ViewWrapper_qtquick::setFocus(Qt::FocusReason reason)
m_item->forceActiveFocus(reason);
}
void ViewWrapper_qtquick::setFocusPolicy(Qt::FocusPolicy)
{
qFatal("not implemented");
}
bool ViewWrapper_qtquick::hasFocus() const
{
return m_item->hasActiveFocus();

View File

@@ -52,6 +52,7 @@ public:
void grabMouse() override;
void releaseMouse() override;
void setFocus(Qt::FocusReason) override;
void setFocusPolicy(Qt::FocusPolicy) override;
QString objectName() const override;
QVariant property(const char *) const override;
bool isNull() const override;

View File

@@ -148,9 +148,7 @@ public:
void setFocus(Qt::FocusReason reason) override;
Qt::FocusPolicy focusPolicy() const override;
bool hasFocus() const override;
/// TODOv2: Make these 2 virtual ?
void setFocusPolicy(Qt::FocusPolicy policy);
void setFocusPolicy(Qt::FocusPolicy) override;
QString objectName() const override;
void setMinimumSize(QSize sz) override;
void render(QPainter *) override;

View File

@@ -25,6 +25,7 @@ using namespace KDDockWidgets;
namespace KDDockWidgets {
class TestView_qtwidgets : public Views::View_qtwidgets<QWidget>
{
Q_OBJECT
public:
explicit TestView_qtwidgets(Platform::CreateViewOptions opts, QWidget *parent)
: Views::View_qtwidgets<QWidget>(nullptr, Type::None, parent)
@@ -80,4 +81,6 @@ View *Platform_qtwidgets::tests_createView(CreateViewOptions opts, View *parent)
return newWidget;
}
#endif
#endif
#include "TestHelpers_qtwidgets.moc"

View File

@@ -358,6 +358,11 @@ Qt::FocusPolicy ViewWrapper_qtwidgets::focusPolicy() const
return m_widget->focusPolicy();
}
void ViewWrapper_qtwidgets::setFocusPolicy(Qt::FocusPolicy policy)
{
m_widget->setFocusPolicy(policy);
}
bool ViewWrapper_qtwidgets::hasFocus() const
{
return m_widget->hasFocus();

View File

@@ -63,6 +63,7 @@ public:
void setCursor(Qt::CursorShape) override;
QSize minSize() const override;
Qt::FocusPolicy focusPolicy() const override;
void setFocusPolicy(Qt::FocusPolicy) override;
bool hasFocus() const override;
QWidget *widget() const;

View File

@@ -418,7 +418,12 @@ public:
void setFocus(Qt::FocusReason reason) override
{
return QWidget::setFocus(reason);
QWidget::setFocus(reason);
}
void setFocusPolicy(Qt::FocusPolicy policy) override
{
QWidget::setFocusPolicy(policy);
}
QString objectName() const override

View File

@@ -185,7 +185,7 @@ TEST_CASE("View::closeRequested")
CHECK(signalArrived);
}
TEST_CASE("View::focusPolicy")
TEST_CASE("View::focusPolicy, Platform::focusedView")
{
auto rootView = Platform::instance()->tests_createView({});
CHECK_EQ(rootView->focusPolicy(), Qt::NoFocus);
@@ -195,10 +195,23 @@ TEST_CASE("View::hasFocus")
{
auto rootView = Platform::instance()->tests_createView({});
rootView->show();
rootView->activateWindow();
CHECK(rootView->isVisible());
Platform::instance()->tests_wait(0);
CHECK(!rootView->hasFocus());
// TODOv2: Uncomment once setFocusPolicy is implemented and implement in ViewWrapper too
// rootView->setFocus(Qt::MouseFocusReason);
// CHECK(rootView->hasFocus());
rootView->setFocus(Qt::MouseFocusReason);
Platform::instance()->tests_wait(200); // QWidget::setFocus() requires 1 event loop iteration
CHECK(rootView->hasFocus());
CHECK(rootView->equals(Platform::instance()->focusedView()));
auto child1 = Platform::instance()->tests_createView({}, rootView);
CHECK(rootView->hasFocus());
CHECK(rootView->equals(Platform::instance()->focusedView()));
child1->setVisible(true);
child1->setFocus(Qt::MouseFocusReason);
Platform::instance()->tests_wait(200); // QWidget::setFocus() requires 1 event loop iteration
CHECK(child1->hasFocus());
CHECK(child1->equals(Platform::instance()->focusedView()));
}