summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAhmed ElShreif <aelshreif7@gmail.com>2020-07-18 17:56:27 +0200
committerAhmed ElShreif <aelshreif7@gmail.com>2020-08-06 03:06:19 +0200
commit8517c19410dde16b951d66a13d0ffa385f877d7a (patch)
tree981f76256e3209922268a826668a2cdefa3e4f03
parentf615a3366e502884a15bbbf07c2fb1e70eb9dbfa (diff)
uitest : Add support for Menu Button objects
This will help us test MenuButton like "gear button menu in Tools->Customize" You can test this type of button by excuting this actions: >>var_name.executeAction("OPENLIST", mkPropertyValues({})) >>var_name.executeAction("CLOSELIST", mkPropertyValues({})) >>var_name.executeAction("OPENFROMLIST", mkPropertyValues({"POS": "0" })) Then you can check on it using this lines: >>get_state_as_dict(var_name)["Label"] Change-Id: I189759d9c32237a9a34ee82cfde9611eedff4f3f Reviewed-on: https://gerrit.libreoffice.org/c/core/+/98996 Tested-by: Jenkins Reviewed-by: Markus Mohrhard <markus.mohrhard@googlemail.com>
-rw-r--r--include/vcl/menubtn.hxx5
-rw-r--r--include/vcl/uitest/uiobject.hxx23
-rw-r--r--vcl/source/control/menubtn.cxx12
-rw-r--r--vcl/source/uitest/uiobject.cxx60
4 files changed, 100 insertions, 0 deletions
diff --git a/include/vcl/menubtn.hxx b/include/vcl/menubtn.hxx
index 609d3d031aab..ea6916a48629 100644
--- a/include/vcl/menubtn.hxx
+++ b/include/vcl/menubtn.hxx
@@ -84,6 +84,11 @@ public:
void SetActivateHdl( const Link<MenuButton *, void>& rLink ) { maActivateHdl = rLink; }
void SetSelectHdl( const Link<MenuButton *, void>& rLink ) { maSelectHdl = rLink; }
+
+ virtual FactoryFunction GetUITestFactory() const override;
+
+ void SetCurItemId();
+
};
diff --git a/include/vcl/uitest/uiobject.hxx b/include/vcl/uitest/uiobject.hxx
index 1797c9156aba..c5b3f07dbe75 100644
--- a/include/vcl/uitest/uiobject.hxx
+++ b/include/vcl/uitest/uiobject.hxx
@@ -35,6 +35,7 @@ class SpinButton;
class SpinField;
class VerticalTabControl;
class VclMultiLineEdit;
+class MenuButton;
class ToolBox;
typedef std::map<const OUString, OUString> StringMap;
@@ -504,6 +505,28 @@ private:
virtual OUString get_name() const override;
};
+class MenuButtonUIObject final : public WindowUIObject
+{
+ VclPtr<MenuButton> mxMenuButton;
+
+public:
+
+ MenuButtonUIObject(const VclPtr<MenuButton>& xMenuButton);
+ virtual ~MenuButtonUIObject() override;
+
+ virtual StringMap get_state() override;
+
+ virtual void execute(const OUString& rAction,
+ const StringMap& rParameters) override;
+
+ static std::unique_ptr<UIObject> create(vcl::Window* pWindow);
+
+private:
+
+ virtual OUString get_name() const override;
+};
+
+
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/source/control/menubtn.cxx b/vcl/source/control/menubtn.cxx
index 7402d361f4b8..4acf4ffddc82 100644
--- a/vcl/source/control/menubtn.cxx
+++ b/vcl/source/control/menubtn.cxx
@@ -24,6 +24,7 @@
#include <vcl/timer.hxx>
#include <vcl/menubtn.hxx>
#include <vcl/settings.hxx>
+#include <vcl/uitest/uiobject.hxx>
void MenuButton::ImplInit( vcl::Window* pParent, WinBits nStyle )
{
@@ -229,6 +230,17 @@ void MenuButton::SetPopover(Window* pWindow)
mpFloatingWindow = pWindow;
}
+
+FactoryFunction MenuButton::GetUITestFactory() const
+{
+ return MenuButtonUIObject::create;
+}
+
+void MenuButton::SetCurItemId(){
+ mnCurItemId = mpMenu->GetCurItemId();
+ msCurItemIdent = mpMenu->GetCurItemIdent();
+}
+
//class MenuToggleButton ----------------------------------------------------
MenuToggleButton::MenuToggleButton( vcl::Window* pParent, WinBits nWinBits )
diff --git a/vcl/source/uitest/uiobject.cxx b/vcl/source/uitest/uiobject.cxx
index 806f6ab23e70..1b501e2676e5 100644
--- a/vcl/source/uitest/uiobject.cxx
+++ b/vcl/source/uitest/uiobject.cxx
@@ -26,6 +26,7 @@
#include <vcl/toolkit/dialog.hxx>
#include <vcl/toolkit/field.hxx>
#include <vcl/edit.hxx>
+#include <vcl/menubtn.hxx>
#include <vcl/vclmedit.hxx>
#include <vcl/uitest/logger.hxx>
#include <uiobject-internal.hxx>
@@ -1612,4 +1613,63 @@ std::unique_ptr<UIObject> ToolBoxUIObject::create(vcl::Window* pWindow)
return std::unique_ptr<UIObject>(new ToolBoxUIObject(pToolBox));
}
+MenuButtonUIObject::MenuButtonUIObject(const VclPtr<MenuButton>& xMenuButton):
+ WindowUIObject(xMenuButton),
+ mxMenuButton(xMenuButton)
+{
+}
+
+MenuButtonUIObject::~MenuButtonUIObject()
+{
+}
+
+StringMap MenuButtonUIObject::get_state()
+{
+ StringMap aMap = WindowUIObject::get_state();
+ aMap["Label"] = mxMenuButton->GetDisplayText();
+ return aMap;
+}
+
+void MenuButtonUIObject::execute(const OUString& rAction,
+ const StringMap& rParameters)
+{
+ if (rAction == "CLICK")
+ {
+ mxMenuButton->Check(!mxMenuButton->IsChecked());
+ mxMenuButton->Toggle();
+ }
+ else if (rAction == "OPENLIST")
+ {
+ mxMenuButton->ExecuteMenu();
+ }
+ else if (rAction == "OPENFROMLIST")
+ {
+ auto itr = rParameters.find("POS");
+ sal_uInt32 nPos = itr->second.toUInt32();
+
+ sal_uInt32 nId = mxMenuButton->GetPopupMenu()->GetItemId(nPos);
+ mxMenuButton->GetPopupMenu()->SetSelectedEntry(nId);
+ mxMenuButton->SetCurItemId();
+ mxMenuButton->Select();
+ }
+ else if (rAction == "CLOSELIST")
+ {
+ mxMenuButton->GetPopupMenu()->EndExecute();
+ }
+ else
+ WindowUIObject::execute(rAction, rParameters);
+}
+
+OUString MenuButtonUIObject::get_name() const
+{
+ return "MenuButtonUIObject";
+}
+
+std::unique_ptr<UIObject> MenuButtonUIObject::create(vcl::Window* pWindow)
+{
+ MenuButton* pMenuButton = dynamic_cast<MenuButton*>(pWindow);
+ assert(pMenuButton);
+ return std::unique_ptr<UIObject>(new MenuButtonUIObject(pMenuButton));
+}
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */