include/vcl/uitest/logger.hxx | 44 + sc/source/core/data/document.cxx | 18 sc/source/ui/view/viewdata.cxx | 20 sc/source/ui/view/viewfun2.cxx | 26 sc/source/ui/view/viewfun3.cxx | 34 sc/source/ui/view/viewfunc.cxx | 28 sd/source/ui/slidesorter/controller/SlsSlotManager.cxx | 29 sd/source/ui/slidesorter/model/SlideSorterModel.cxx | 22 sfx2/source/control/unoctitm.cxx | 4 sw/source/core/edit/edtab.cxx | 20 sw/source/uibase/dochdl/swdtflvr.cxx | 24 sw/source/uibase/wrtsh/wrtsh1.cxx | 17 uitest/ui_logger_dsl/General_commands.tx | 29 uitest/ui_logger_dsl/Special_commands.tx | 209 ++++++ uitest/ui_logger_dsl/UI_Object_commands.tx | 65 + uitest/ui_logger_dsl/dialog_commands.tx | 24 uitest/ui_logger_dsl/dsl_core.py | 581 +++++++++++++++++ uitest/ui_logger_dsl/example.ul | 34 uitest/ui_logger_dsl/starter_commands.tx | 13 uitest/ui_logger_dsl/type_options.tx | 9 uitest/ui_logger_dsl/ui_logger_dsl_grammar.tx | 29 uitest/ui_logger_dsl/uno_commands.tx | 17 vcl/source/uitest/logger.cxx | 359 +++++++++- vcl/source/uitest/uiobject.cxx | 132 +++ vcl/source/window/dialog.cxx | 6 25 files changed, 1711 insertions(+), 82 deletions(-)
New commits: commit 739c370522df4d48898b924e3c29957054f71a78 Author: Markus Mohrhard <markus.mohrh...@googlemail.com> AuthorDate: Mon Aug 19 01:30:26 2019 +0800 Commit: Markus Mohrhard <markus.mohrh...@googlemail.com> CommitDate: Mon Aug 19 22:56:40 2019 +0800 uitest: pass OUString by const reference and formatting fixes Change-Id: I55eca745a84998c74e2d925ed53af20382d98289 diff --git a/sc/source/core/data/document.cxx b/sc/source/core/data/document.cxx index fd996eb3d4cb..841cb3574213 100644 --- a/sc/source/core/data/document.cxx +++ b/sc/source/core/data/document.cxx @@ -109,21 +109,6 @@ using ::std::set; namespace { -void collectUIInformation(const std::map<OUString, OUString>& aParameters,const OUString action) -{ - EventDescription aDescription; - aDescription.aID = "grid_window"; - aDescription.aAction = action; - aDescription.aParameters = aParameters; - aDescription.aParent = "MainWindow"; - aDescription.aKeyWord = "ScGridWinUIObject"; - - UITestLogger::getInstance().logEvent(aDescription); -} -} - -namespace { - std::pair<SCTAB,SCTAB> getMarkedTableRange(const std::vector<ScTableUniquePtr>& rTables, const ScMarkData& rMark) { SCTAB nTabStart = MAXTAB; @@ -145,6 +130,18 @@ std::pair<SCTAB,SCTAB> getMarkedTableRange(const std::vector<ScTableUniquePtr>& return std::pair<SCTAB,SCTAB>(nTabStart,nTabEnd); } +void collectUIInformation(const std::map<OUString, OUString>& aParameters, const OUString& rAction) +{ + EventDescription aDescription; + aDescription.aID = "grid_window"; + aDescription.aAction = rAction; + aDescription.aParameters = aParameters; + aDescription.aParent = "MainWindow"; + aDescription.aKeyWord = "ScGridWinUIObject"; + + UITestLogger::getInstance().logEvent(aDescription); +} + } struct ScDefaultAttr @@ -913,7 +910,9 @@ bool ScDocument::RenameTab( SCTAB nTab, const OUString& rName, bool bExternalDoc } } } - collectUIInformation({{"NewName",rName}},"Rename_Sheet"); + + collectUIInformation({{"NewName", rName}}, "Rename_Sheet"); + return bValid; } diff --git a/sc/source/ui/view/viewdata.cxx b/sc/source/ui/view/viewdata.cxx index 56865508373a..e15ca40404d6 100644 --- a/sc/source/ui/view/viewdata.cxx +++ b/sc/source/ui/view/viewdata.cxx @@ -91,11 +91,11 @@ void lcl_LOKRemoveWindow(ScTabViewShell* pTabViewShell, ScSplitPos eWhich) namespace { -void collectUIInformation(const std::map<OUString, OUString>& aParameters,const OUString action) +void collectUIInformation(const std::map<OUString, OUString>& aParameters, const OUString& rAction) { EventDescription aDescription; aDescription.aID = "grid_window"; - aDescription.aAction = action; + aDescription.aAction = rAction; aDescription.aParameters = aParameters; aDescription.aParent = "MainWindow"; aDescription.aKeyWord = "ScGridWinUIObject"; @@ -857,7 +857,8 @@ void ScViewData::InsertTab( SCTAB nTab ) UpdateCurrentTab(); mpMarkData->InsertTab( nTab ); - collectUIInformation({{}},"InsertTab"); + + collectUIInformation({{}}, "InsertTab"); } void ScViewData::InsertTabs( SCTAB nTab, SCTAB nNewSheets ) diff --git a/sc/source/ui/view/viewfun2.cxx b/sc/source/ui/view/viewfun2.cxx index 831e4c7dd8ee..ac926e722bb5 100644 --- a/sc/source/ui/view/viewfun2.cxx +++ b/sc/source/ui/view/viewfun2.cxx @@ -94,11 +94,11 @@ using ::editeng::SvxBorderLine; namespace { -void collectUIInformation(const std::map<OUString, OUString>& aParameters,const OUString action) +void collectUIInformation(const std::map<OUString, OUString>& aParameters, const OUString& rAction) { EventDescription aDescription; aDescription.aID = "grid_window"; - aDescription.aAction = action; + aDescription.aAction = rAction; aDescription.aParameters = aParameters; aDescription.aParent = "MainWindow"; aDescription.aKeyWord = "ScGridWinUIObject"; @@ -1227,11 +1227,14 @@ bool ScViewFunc::MergeCells( bool bApi, bool& rDoContents, bool bCenter ) pDocSh->UpdateOle(&GetViewData()); UpdateInputLine(); + + OUString aStartAddress = aMarkRange.aStart.GetColRowString(); + OUString aEndAddress = aMarkRange.aEnd.GetColRowString(); + + collectUIInformation({{"RANGE", aStartAddress + ":" + aEndAddress}}, "MERGE_CELLS"); } } - OUString aStartAddress = aMarkRange.aStart.GetColRowString(); - OUString aEndAddress = aMarkRange.aEnd.GetColRowString(); - collectUIInformation({{"RANGE", aStartAddress + ":" + aEndAddress}},"MERGE_CELLS"); + return bOk; } @@ -1318,8 +1321,8 @@ bool ScViewFunc::RemoveMerge() pDocSh->UpdateOle(&GetViewData()); } - OUString Cell_location = aRange.aStart.GetColRowString(); - collectUIInformation({{"CELL", Cell_location }},"UNMERGE_CELL"); + OUString aCellLocation = aRange.aStart.GetColRowString(); + collectUIInformation({{"CELL", aCellLocation}}, "UNMERGE_CELL"); return true; //! bOk ?? } diff --git a/sc/source/ui/view/viewfun3.cxx b/sc/source/ui/view/viewfun3.cxx index b43debda5e7e..e39cdd488fac 100644 --- a/sc/source/ui/view/viewfun3.cxx +++ b/sc/source/ui/view/viewfun3.cxx @@ -66,7 +66,7 @@ using namespace com::sun::star; namespace { -void collectUIInformation(const std::map<OUString, OUString>& aParameters,OUString action) +void collectUIInformation(const std::map<OUString, OUString>& aParameters, const OUString& action) { EventDescription aDescription; aDescription.aID = "grid_window"; @@ -153,7 +153,8 @@ void ScViewFunc::CutToClip() OUString aStartAddress = aRange.aStart.GetColRowString(); OUString aEndAddress = aRange.aEnd.GetColRowString(); - collectUIInformation({{"RANGE", aStartAddress + ":" + aEndAddress}},"CUT"); + + collectUIInformation({{"RANGE", aStartAddress + ":" + aEndAddress}}, "CUT"); } else ErrorMessage( STR_NOMULTISELECT ); @@ -188,7 +189,7 @@ bool ScViewFunc::CopyToClip( ScDocument* pClipDoc, bool bCut, bool bApi, bool bI if( !bCut ){ OUString aStartAddress = aRange.aStart.GetColRowString(); OUString aEndAddress = aRange.aEnd.GetColRowString(); - collectUIInformation({{"RANGE", aStartAddress + ":" + aEndAddress}},"COPY"); + collectUIInformation({{"RANGE", aStartAddress + ":" + aEndAddress}}, "COPY"); } return bDone; } @@ -1465,7 +1466,7 @@ bool ScViewFunc::PasteFromClip( InsertDeleteFlags nFlags, ScDocument* pClipDoc, } OUString aStartAddress = aMarkRange.aStart.GetColRowString(); OUString aEndAddress = aMarkRange.aEnd.GetColRowString(); - collectUIInformation({{"RANGE", aStartAddress + ":" + aEndAddress}},"PASTE"); + collectUIInformation({{"RANGE", aStartAddress + ":" + aEndAddress}}, "PASTE"); return true; } diff --git a/sc/source/ui/view/viewfunc.cxx b/sc/source/ui/view/viewfunc.cxx index 13c8bd708812..ad9f4a61cd05 100644 --- a/sc/source/ui/view/viewfunc.cxx +++ b/sc/source/ui/view/viewfunc.cxx @@ -101,11 +101,11 @@ ScViewFunc::~ScViewFunc() namespace { -void collectUIInformation(const std::map<OUString, OUString>& aParameters,const OUString action) +void collectUIInformation(const std::map<OUString, OUString>& aParameters, const OUString& rAction) { EventDescription aDescription; aDescription.aID = "grid_window"; - aDescription.aAction = action; + aDescription.aAction = rAction; aDescription.aParameters = aParameters; aDescription.aParent = "MainWindow"; aDescription.aKeyWord = "ScGridWinUIObject"; @@ -1636,7 +1636,7 @@ bool ScViewFunc::InsertCells( InsCellCmd eCmd, bool bRecord, bool bPartOfPaste ) } OUString aStartAddress = aRange.aStart.GetColRowString(); OUString aEndAddress = aRange.aEnd.GetColRowString(); - collectUIInformation({{"RANGE", aStartAddress + ":" + aEndAddress}},"INSERT_CELLS"); + collectUIInformation({{"RANGE", aStartAddress + ":" + aEndAddress}}, "INSERT_CELLS"); return bSuccess; } else @@ -1724,7 +1724,7 @@ void ScViewFunc::DeleteCells( DelCellCmd eCmd ) OUString aStartAddress = aRange.aStart.GetColRowString(); OUString aEndAddress = aRange.aEnd.GetColRowString(); - collectUIInformation({{"RANGE", aStartAddress + ":" + aEndAddress}},"DELETE_CELLS"); + collectUIInformation({{"RANGE", aStartAddress + ":" + aEndAddress}}, "DELETE_CELLS"); Unmark(); } @@ -2005,7 +2005,7 @@ void ScViewFunc::DeleteContents( InsertDeleteFlags nFlags ) } OUString aStartAddress = aMarkRange.aStart.GetColRowString(); OUString aEndAddress = aMarkRange.aEnd.GetColRowString(); - collectUIInformation({{"RANGE", aStartAddress + ":" + aEndAddress}},"DELETE"); + collectUIInformation({{"RANGE", aStartAddress + ":" + aEndAddress}}, "DELETE"); } // column width/row height (via header) - undo OK diff --git a/sd/source/ui/slidesorter/controller/SlsSlotManager.cxx b/sd/source/ui/slidesorter/controller/SlsSlotManager.cxx index a97ccb7d0588..069836e790cb 100644 --- a/sd/source/ui/slidesorter/controller/SlsSlotManager.cxx +++ b/sd/source/ui/slidesorter/controller/SlsSlotManager.cxx @@ -113,12 +113,12 @@ SlideExclusionState GetSlideExclusionState (model::PageEnumeration& rPageSet); namespace { -void collectUIInformation(const std::map<OUString, OUString>& aParameters,const OUString& action) +void collectUIInformation(const std::map<OUString, OUString>& aParameters, const OUString& rAction) { EventDescription aDescription; aDescription.aID = "impress_win_or_draw_win"; aDescription.aParameters = aParameters; - aDescription.aAction = action; + aDescription.aAction = rAction; aDescription.aKeyWord = "ImpressWindowUIObject"; aDescription.aParent = "MainWindow"; @@ -938,7 +938,7 @@ void SlotManager::RenameSlide(const SfxRequest& rRequest) } OUString aNewName; aNameDlg->GetName( aNewName ); - collectUIInformation({{"OldName",aOldName},{"NewName",aNewName}},"RENAME"); + collectUIInformation({{"OldName", aOldName}, {"NewName", aNewName}}, "RENAME"); aNameDlg.disposeAndClear(); } // Tell the slide sorter about the name change (necessary for @@ -1105,7 +1105,7 @@ void SlotManager::InsertSlide (SfxRequest& rRequest) PageSelector::UpdateLock aUpdateLock (mrSlideSorter); mrSlideSorter.GetController().GetPageSelector().DeselectAllPages(); mrSlideSorter.GetController().GetPageSelector().SelectPage(pNewPage); - collectUIInformation({{"POS", OUString::number(nInsertionIndex+2)}},"Insert_New_Page_or_Slide"); + collectUIInformation({{"POS", OUString::number(nInsertionIndex + 2)}}, "Insert_New_Page_or_Slide"); } void SlotManager::DuplicateSelectedSlides (SfxRequest& rRequest) @@ -1152,7 +1152,8 @@ void SlotManager::DuplicateSelectedSlides (SfxRequest& rRequest) { rSelector.SelectPage(it); } - collectUIInformation({{"POS", OUString::number(nInsertPosition+2)}},"Duplicate"); + + collectUIInformation({{"POS", OUString::number(nInsertPosition + 2)}}, "Duplicate"); } void SlotManager::ChangeSlideExclusionState ( diff --git a/sd/source/ui/slidesorter/model/SlideSorterModel.cxx b/sd/source/ui/slidesorter/model/SlideSorterModel.cxx index 7811c3b08e68..5b9f41fea0d8 100644 --- a/sd/source/ui/slidesorter/model/SlideSorterModel.cxx +++ b/sd/source/ui/slidesorter/model/SlideSorterModel.cxx @@ -106,12 +106,12 @@ namespace { namespace { -void collectUIInformation(const OUString& num,const OUString& action) +void collectUIInformation(const OUString& num, const OUString& rAction) { EventDescription aDescription; aDescription.aID = "impress_win_or_draw_win"; aDescription.aParameters = {{"POS", num}}; - aDescription.aAction = action; + aDescription.aAction = rAction; aDescription.aKeyWord = "ImpressWindowUIObject"; aDescription.aParent = "MainWindow"; @@ -632,9 +632,8 @@ bool SlideSorterModel::DeleteSlide (const SdPage* pPage) bMarkedSelected = (*iter)->HasState(PageDescriptor::ST_Selected); maPageDescriptors.erase(iter); UpdateIndices(nIndex); - } - if(nIndex>=0){ - collectUIInformation(OUString::number(nIndex+1),"Delete_Slide_or_Page"); + + collectUIInformation(OUString::number(nIndex + 1), "Delete_Slide_or_Page"); } return bMarkedSelected; } diff --git a/sfx2/source/control/unoctitm.cxx b/sfx2/source/control/unoctitm.cxx index 0a50a39735eb..3cc88838a489 100644 --- a/sfx2/source/control/unoctitm.cxx +++ b/sfx2/source/control/unoctitm.cxx @@ -611,7 +611,7 @@ void SfxDispatchController_Impl::dispatch( const css::util::URL& aURL, const css::uno::Reference< css::frame::XDispatchResultListener >& rListener ) { collectUsageInformation(aURL, aArgs); - collectUIInformation(aURL,aArgs); + collectUIInformation(aURL, aArgs); SolarMutexGuard aGuard; if ( diff --git a/sw/source/core/edit/edtab.cxx b/sw/source/core/edit/edtab.cxx index edb2510f8347..c60aed7af194 100644 --- a/sw/source/core/edit/edtab.cxx +++ b/sw/source/core/edit/edtab.cxx @@ -55,11 +55,11 @@ using namespace ::com::sun::star; using namespace ::com::sun::star::uno; namespace { -void collectUIInformation(const OUString action,const OUString aParameters) +void collectUIInformation(const OUString& rAction, const OUString& aParameters) { EventDescription aDescription; - aDescription.aAction = action; - aDescription.aParameters = {{"parameters",aParameters}}; + aDescription.aAction = rAction; + aDescription.aParameters = {{"parameters", aParameters}}; aDescription.aID = "writer_edit"; aDescription.aKeyWord = "SwEditWinUIObject"; aDescription.aParent = "MainWindow"; @@ -129,8 +129,9 @@ const SwTable& SwEditShell::InsertTable( const SwInsertTableOptions& rInsTableOp EndUndo( SwUndoId::END ); EndAllAction(); - OUString parameter = " Columns : " + OUString::number( nCols )+ " , Rows : " +OUString::number( nRows ) +" "; - collectUIInformation("CREATE_TABLE",parameter); + + OUString parameter = " Columns : " + OUString::number( nCols ) + " , Rows : " + OUString::number( nRows ) + " "; + collectUIInformation("CREATE_TABLE", parameter); return *pTable; } diff --git a/sw/source/uibase/dochdl/swdtflvr.cxx b/sw/source/uibase/dochdl/swdtflvr.cxx index 8a192441b769..0d5a46119ab3 100644 --- a/sw/source/uibase/dochdl/swdtflvr.cxx +++ b/sw/source/uibase/dochdl/swdtflvr.cxx @@ -165,11 +165,11 @@ using namespace ::com::sun::star::uno; using namespace ::com::sun::star::datatransfer; namespace { -void collectUIInformation(const OUString action,const OUString aParameters) +void collectUIInformation(const OUString& rAction, const OUString& aParameters) { EventDescription aDescription; - aDescription.aAction = action; - aDescription.aParameters = {{"parameters",aParameters}}; + aDescription.aAction = rAction; + aDescription.aParameters = {{"parameters", aParameters}}; aDescription.aID = "writer_edit"; aDescription.aKeyWord = "SwEditWinUIObject"; aDescription.aParent = "MainWindow"; @@ -846,7 +846,7 @@ int SwTransferable::Cut() int nRet = Copy( true ); if( nRet ) DeleteSelection(); - collectUIInformation("CUT","parameter"); + collectUIInformation("CUT", "parameter"); return nRet; } @@ -1113,7 +1113,7 @@ int SwTransferable::Copy( bool bIsCut ) } if( !bIsCut ){ - collectUIInformation("COPY","parameter"); + collectUIInformation("COPY", "parameter"); } return nRet; @@ -1433,7 +1433,7 @@ bool SwTransferable::Paste(SwWrtShell& rSh, TransferableDataHelper& rData, RndSt } } - collectUIInformation("PASTE","parameter"); + collectUIInformation("PASTE", "parameter"); return EXCHG_INOUT_ACTION_NONE != nAction && SwTransferable::PasteData( rData, rSh, nAction, nActionFlags, nFormat, diff --git a/sw/source/uibase/wrtsh/wrtsh1.cxx b/sw/source/uibase/wrtsh/wrtsh1.cxx index 87202b3cd219..cd5a638250e8 100644 --- a/sw/source/uibase/wrtsh/wrtsh1.cxx +++ b/sw/source/uibase/wrtsh/wrtsh1.cxx @@ -121,11 +121,11 @@ using namespace sw::mark; using namespace com::sun::star; namespace { -void collectUIInformation(const OUString action,const OUString aParameters) +void collectUIInformation(const OUString& rAction, const OUString& aParameters) { EventDescription aDescription; - aDescription.aAction = action; - aDescription.aParameters = {{"parameters",aParameters}}; + aDescription.aAction = rAction; + aDescription.aParameters = {{"parameters", aParameters}}; aDescription.aID = "writer_edit"; aDescription.aKeyWord = "SwEditWinUIObject"; aDescription.aParent = "MainWindow"; @@ -912,7 +912,7 @@ void SwWrtShell::InsertPageBreak(const OUString *pPageDesc, const ::boost::optio SetAttrItem( SvxFormatBreakItem(SvxBreak::PageBefore, RES_BREAK) ); EndUndo(SwUndoId::UI_INSERT_PAGE_BREAK); } - collectUIInformation("BREAK_PAGE","parameter"); + collectUIInformation("BREAK_PAGE", "parameter"); } // Insert hard page break; commit 147ae53b68844aa1b088926931f958e30888ffda Author: Markus Mohrhard <markus.mohrh...@googlemail.com> AuthorDate: Sun Aug 18 21:54:52 2019 +0800 Commit: Markus Mohrhard <markus.mohrh...@googlemail.com> CommitDate: Mon Aug 19 22:56:40 2019 +0800 uitest: print useful message when textX is not installed Change-Id: If6f6c71f72ba9def4885ffbd74cb7814f7465f2c diff --git a/uitest/ui_logger_dsl/dsl_core.py b/uitest/ui_logger_dsl/dsl_core.py index b77a3449aa6e..210713b4478b 100644 --- a/uitest/ui_logger_dsl/dsl_core.py +++ b/uitest/ui_logger_dsl/dsl_core.py @@ -10,7 +10,12 @@ import os import sys import argparse import keyword -from textx.metamodel import metamodel_from_file +try: + from textx.metamodel import metamodel_from_file +except ImportError: + print("textx is a required package.") + print("Please install the package for example with \"pip3 install --user textx\"") + sys.exit(1) tab=" " double_tab=" " @@ -573,4 +578,4 @@ def main(): del ui_logger if __name__ == '__main__': - main() \ No newline at end of file + main() commit 418124c3322bff0e28f4da76e90940b23060c29f Author: Markus Mohrhard <markus.mohrh...@googlemail.com> AuthorDate: Sun Aug 18 23:34:32 2019 +0800 Commit: Markus Mohrhard <markus.mohrh...@googlemail.com> CommitDate: Mon Aug 19 22:56:40 2019 +0800 uitest: fixed for formatting and plugin stringconstant Change-Id: Id657c19223f20d1175f9a774357e8b1f11344fdf diff --git a/include/vcl/uitest/logger.hxx b/include/vcl/uitest/logger.hxx index 6c8c5008541a..450285c5c247 100644 --- a/include/vcl/uitest/logger.hxx +++ b/include/vcl/uitest/logger.hxx @@ -15,10 +15,32 @@ #include <tools/stream.hxx> #include <vcl/vclevent.hxx> -namespace com { namespace sun { namespace star { - namespace beans { struct PropertyValue; } -} } } -namespace com { namespace sun { namespace star { namespace uno { template <class E> class Sequence; } } } } +namespace com +{ +namespace sun +{ +namespace star +{ +namespace beans +{ +struct PropertyValue; +} +} +} +} +namespace com +{ +namespace sun +{ +namespace star +{ +namespace uno +{ +template <class E> class Sequence; +} +} +} +} struct EventDescription; class Control; @@ -27,7 +49,6 @@ class KeyEvent; class UITEST_DLLPUBLIC UITestLogger { private: - SvFileStream maStream; bool mbValid; @@ -35,29 +56,24 @@ private: OUString app_name; public: - UITestLogger(); - void logCommand(const OUString& rAction, const css::uno::Sequence<css::beans::PropertyValue>& rArgs); + void logCommand(const OUString& rAction, + const css::uno::Sequence<css::beans::PropertyValue>& rArgs); - void logAction(VclPtr<Control> const & xUIElement, VclEventId nEvent); + void logAction(VclPtr<Control> const& xUIElement, VclEventId nEvent); void log(const OUString& rString); - void logKeyInput(VclPtr<vcl::Window> const & xUIElement, const KeyEvent& rEvent); + void logKeyInput(VclPtr<vcl::Window> const& xUIElement, const KeyEvent& rEvent); void logEvent(const EventDescription& rDescription); static UITestLogger& getInstance(); - void setAppName(OUString name){ - app_name=name; - } - - OUString getAppName(){ - return app_name; - } + void setAppName(OUString name) { app_name = name; } + OUString getAppName() { return app_name; } }; #endif diff --git a/vcl/source/uitest/logger.cxx b/vcl/source/uitest/logger.cxx index 0ecd673f9879..03c439fcbd7c 100644 --- a/vcl/source/uitest/logger.cxx +++ b/vcl/source/uitest/logger.cxx @@ -20,9 +20,9 @@ #include <com/sun/star/beans/PropertyValue.hpp> #include <memory> -namespace{ - -bool isDialogWindow(vcl::Window const * pWindow) +namespace +{ +bool isDialogWindow(vcl::Window const* pWindow) { WindowType nType = pWindow->GetType(); // DIALOG to MODALDIALOG @@ -39,7 +39,7 @@ bool isDialogWindow(vcl::Window const * pWindow) return false; } -bool isTopWindow(vcl::Window const * pWindow) +bool isTopWindow(vcl::Window const* pWindow) { WindowType eType = pWindow->GetType(); if (eType == WindowType::FLOATINGWINDOW) @@ -60,17 +60,16 @@ vcl::Window* get_top_parent(vcl::Window* pWindow) return get_top_parent(pParent); } - - } -UITestLogger::UITestLogger(): - maStream(), - mbValid(false) +UITestLogger::UITestLogger() + : maStream() + , mbValid(false) { static const char* pFile = std::getenv("LO_COLLECT_UIINFO"); if (pFile) { - OUString aDirPath("${$BRAND_BASE_DIR/" LIBO_ETC_FOLDER "/" SAL_CONFIGFILE("bootstrap") ":UserInstallation}/uitest/"); + OUString aDirPath("${$BRAND_BASE_DIR/" LIBO_ETC_FOLDER + "/" SAL_CONFIGFILE("bootstrap") ":UserInstallation}/uitest/"); rtl::Bootstrap::expandMacros(aDirPath); osl::Directory::createPath(aDirPath); OUString aFilePath = aDirPath + OUString::fromUtf8(pFile); @@ -80,7 +79,8 @@ UITestLogger::UITestLogger(): } } -void UITestLogger::logCommand(const OUString& rAction, const css::uno::Sequence< css::beans::PropertyValue >& rArgs) +void UITestLogger::logCommand(const OUString& rAction, + const css::uno::Sequence<css::beans::PropertyValue>& rArgs) { if (!mbValid) return; @@ -126,10 +126,10 @@ void UITestLogger::logCommand(const OUString& rAction, const css::uno::Sequence< maStream.WriteLine(OUStringToOString(aCommand, RTL_TEXTENCODING_UTF8)); } -namespace { - +namespace +{ // most likely this should be recursive -bool child_windows_have_focus(VclPtr<vcl::Window> const & xUIElement) +bool child_windows_have_focus(VclPtr<vcl::Window> const& xUIElement) { sal_Int32 nCount = xUIElement->GetChildCount(); for (sal_Int32 i = 0; i < nCount; ++i) @@ -144,10 +144,9 @@ bool child_windows_have_focus(VclPtr<vcl::Window> const & xUIElement) } return false; } - } -void UITestLogger::logAction(VclPtr<Control> const & xUIElement, VclEventId nEvent) +void UITestLogger::logAction(VclPtr<Control> const& xUIElement, VclEventId nEvent) { if (!mbValid) return; @@ -177,14 +176,14 @@ void UITestLogger::log(const OUString& rString) maStream.WriteLine(OUStringToOString(rString, RTL_TEXTENCODING_UTF8)); } -void UITestLogger::logKeyInput(VclPtr<vcl::Window> const & xUIElement, const KeyEvent& rEvent) +void UITestLogger::logKeyInput(VclPtr<vcl::Window> const& xUIElement, const KeyEvent& rEvent) { if (!mbValid) return; //We need to check for Parent's ID in case the UI Element is SubEdit of Combobox/SpinField - const OUString& rID = xUIElement->get_id().isEmpty() ? - xUIElement->GetParent()->get_id() : xUIElement->get_id(); + const OUString& rID + = xUIElement->get_id().isEmpty() ? xUIElement->GetParent()->get_id() : xUIElement->get_id(); if (rID.isEmpty()) return; @@ -195,22 +194,12 @@ void UITestLogger::logKeyInput(VclPtr<vcl::Window> const & xUIElement, const Key bool bMod2 = rEvent.GetKeyCode().IsMod2(); bool bMod3 = rEvent.GetKeyCode().IsMod3(); - std::map<OUString, sal_uInt16> aKeyMap = { - {"ESC", KEY_ESCAPE}, - {"TAB", KEY_TAB}, - {"DOWN", KEY_DOWN}, - {"UP", KEY_UP}, - {"LEFT", KEY_LEFT}, - {"RIGHT", KEY_RIGHT}, - {"DELETE", KEY_DELETE}, - {"INSERT", KEY_INSERT}, - {"BACKSPACE", KEY_BACKSPACE}, - {"RETURN", KEY_RETURN}, - {"HOME", KEY_HOME}, - {"END", KEY_END}, - {"PAGEUP", KEY_PAGEUP}, - {"PAGEDOWN", KEY_PAGEDOWN} - }; + std::map<OUString, sal_uInt16> aKeyMap + = { { "ESC", KEY_ESCAPE }, { "TAB", KEY_TAB }, { "DOWN", KEY_DOWN }, + { "UP", KEY_UP }, { "LEFT", KEY_LEFT }, { "RIGHT", KEY_RIGHT }, + { "DELETE", KEY_DELETE }, { "INSERT", KEY_INSERT }, { "BACKSPACE", KEY_BACKSPACE }, + { "RETURN", KEY_RETURN }, { "HOME", KEY_HOME }, { "END", KEY_END }, + { "PAGEUP", KEY_PAGEUP }, { "PAGEDOWN", KEY_PAGEDOWN } }; OUString aFound; for (auto& itr : aKeyMap) @@ -247,7 +236,7 @@ void UITestLogger::logKeyInput(VclPtr<vcl::Window> const & xUIElement, const Key std::unique_ptr<UIObject> pUIObject = xUIElement->GetUITestFactory()(xUIElement.get()); - VclPtr <vcl::Window> pParent = xUIElement->GetParent(); + VclPtr<vcl::Window> pParent = xUIElement->GetParent(); while (!pParent->IsTopWindow()) { @@ -258,52 +247,63 @@ void UITestLogger::logKeyInput(VclPtr<vcl::Window> const & xUIElement, const Key OUString aContent; - if(pUIObject->get_type()=="EditUIObject"){ - if(aParentID=="") + if (pUIObject->get_type() == "EditUIObject") + { + if (aParentID.isEmpty()) { - VclPtr <vcl::Window> pParent_top = get_top_parent(xUIElement); - aParentID= pParent_top->get_id(); + VclPtr<vcl::Window> pParent_top = get_top_parent(xUIElement); + aParentID = pParent_top->get_id(); } - if(aParentID==""){ - aContent = aContent+"Type on '" + rID + "' " + aKeyCode; + if (aParentID.isEmpty()) + { + aContent = aContent + "Type on '" + rID + "' " + aKeyCode; } - else{ - aContent = aContent+"Type on '" + rID + "' " + aKeyCode + " from " + aParentID ; + else + { + aContent = aContent + "Type on '" + rID + "' " + aKeyCode + " from " + aParentID; } } - else if(pUIObject->get_type()=="SwEditWinUIObject" && rID=="writer_edit"){ - aContent = "Type on writer " + aKeyCode ; + else if (pUIObject->get_type() == "SwEditWinUIObject" && rID == "writer_edit") + { + aContent = "Type on writer " + aKeyCode; } - else if(pUIObject->get_type()=="ScGridWinUIObject" && rID=="grid_window"){ - aContent = "Type on current cell " + aKeyCode ; + else if (pUIObject->get_type() == "ScGridWinUIObject" && rID == "grid_window") + { + aContent = "Type on current cell " + aKeyCode; } - else if(pUIObject->get_type()=="ImpressWindowUIObject" && rID=="impress_win"){ - aContent = "Type on impress " + aKeyCode ; + else if (pUIObject->get_type() == "ImpressWindowUIObject" && rID == "impress_win") + { + aContent = "Type on impress " + aKeyCode; } - else if(pUIObject->get_type()=="WindowUIObject" && rID=="math_edit"){ - aContent = "Type on math " + aKeyCode ; + else if (pUIObject->get_type() == "WindowUIObject" && rID == "math_edit") + { + aContent = "Type on math " + aKeyCode; } - else if(rID=="draw_win"){ - aContent = "Type on draw " + aKeyCode ; + else if (rID == "draw_win") + { + aContent = "Type on draw " + aKeyCode; } - else{ - if(aParentID=="") + else + { + if (aParentID.isEmpty()) { - VclPtr <vcl::Window> pParent_top = get_top_parent(xUIElement); - aParentID= pParent_top->get_id(); + VclPtr<vcl::Window> pParent_top = get_top_parent(xUIElement); + aParentID = pParent_top->get_id(); } - if(aParentID==""){ - aContent = "Type on '" + rID + "' " + aKeyCode ; + if (aParentID.isEmpty()) + { + aContent = "Type on '" + rID + "' " + aKeyCode; } - else{ - aContent = "Type on '" + rID + "' " + aKeyCode + " from " + aParentID ; + else + { + aContent = "Type on '" + rID + "' " + aKeyCode + " from " + aParentID; } } maStream.WriteLine(OUStringToOString(aContent, RTL_TEXTENCODING_UTF8)); } -namespace { - +namespace +{ OUString StringMapToOUString(const std::map<OUString, OUString>& rParameters) { if (rParameters.empty()) @@ -312,11 +312,15 @@ OUString StringMapToOUString(const std::map<OUString, OUString>& rParameters) OUStringBuffer aParameterString = " {"; for (std::map<OUString, OUString>::const_iterator itr = rParameters.begin(); - itr != rParameters.end(); ++itr) + itr != rParameters.end(); ++itr) { if (itr != rParameters.begin()) aParameterString.append(", "); - aParameterString.append("\"").append(itr->first).append("\": \"").append(itr->second).append("\""); + aParameterString.append("\"") + .append(itr->first) + .append("\": \"") + .append(itr->second) + .append("\""); } aParameterString.append("}"); @@ -324,29 +328,29 @@ OUString StringMapToOUString(const std::map<OUString, OUString>& rParameters) return aParameterString.makeStringAndClear(); } -OUString GetValueInMapWithIndex(const std::map<OUString, OUString>& rParameters,sal_Int32 index) +OUString GetValueInMapWithIndex(const std::map<OUString, OUString>& rParameters, sal_Int32 index) { - sal_Int32 j=0; + sal_Int32 j = 0; std::map<OUString, OUString>::const_iterator itr = rParameters.begin(); - for ( ; itr != rParameters.end() && j<index ; ++itr,++j); + for (; itr != rParameters.end() && j < index; ++itr, ++j) + ; return itr->second; } - -OUString GetKeyInMapWithIndex(const std::map<OUString, OUString>& rParameters,sal_Int32 index) +OUString GetKeyInMapWithIndex(const std::map<OUString, OUString>& rParameters, sal_Int32 index) { - sal_Int32 j=0; + sal_Int32 j = 0; std::map<OUString, OUString>::const_iterator itr = rParameters.begin(); - for ( ; itr != rParameters.end() && j<index ; ++itr,++j); + for (; itr != rParameters.end() && j < index; ++itr, ++j) + ; return itr->first; } - } void UITestLogger::logEvent(const EventDescription& rDescription) @@ -354,138 +358,181 @@ void UITestLogger::logEvent(const EventDescription& rDescription) OUString aParameterString = StringMapToOUString(rDescription.aParameters); //here we will customize our statments depending on the caller of this function - OUString aLogLine ; + OUString aLogLine; //first check on general commands - if(rDescription.aAction=="SET"){ - aLogLine = "Set Zoom to " + GetValueInMapWithIndex(rDescription.aParameters,0); + if (rDescription.aAction == "SET") + { + aLogLine = "Set Zoom to " + GetValueInMapWithIndex(rDescription.aParameters, 0); } - else if(rDescription.aAction=="SIDEBAR"){ + else if (rDescription.aAction == "SIDEBAR") + { aLogLine = "From SIDEBAR Choose " + aParameterString; } - else if(rDescription.aAction=="SELECT" && rDescription.aID==""){ + else if (rDescription.aAction == "SELECT" && rDescription.aID.isEmpty()) + { aLogLine = "Select " + aParameterString; } - else if(rDescription.aID=="writer_edit"){ - if(rDescription.aAction=="GOTO"){ - aLogLine = "GOTO page number " + GetValueInMapWithIndex(rDescription.aParameters,0); + else if (rDescription.aID == "writer_edit") + { + if (rDescription.aAction == "GOTO") + { + aLogLine = "GOTO page number " + GetValueInMapWithIndex(rDescription.aParameters, 0); } - else if(rDescription.aAction=="SELECT"){ - OUString to = GetValueInMapWithIndex(rDescription.aParameters,0); - OUString from = GetValueInMapWithIndex(rDescription.aParameters,1); - aLogLine = "Select from Pos " + from + " to Pos " + to ; + else if (rDescription.aAction == "SELECT") + { + OUString to = GetValueInMapWithIndex(rDescription.aParameters, 0); + OUString from = GetValueInMapWithIndex(rDescription.aParameters, 1); + aLogLine = "Select from Pos " + from + " to Pos " + to; } - else if(rDescription.aAction=="CREATE_TABLE"){ - OUString size = GetValueInMapWithIndex(rDescription.aParameters,0); - aLogLine = "Create Table with " + size; ; + else if (rDescription.aAction == "CREATE_TABLE") + { + OUString size = GetValueInMapWithIndex(rDescription.aParameters, 0); + aLogLine = "Create Table with " + size; + ; } - else if(rDescription.aAction=="COPY"){ - aLogLine = "Copy the Selected Text"; + else if (rDescription.aAction == "COPY") + { + aLogLine = "Copy the Selected Text"; } - else if(rDescription.aAction=="CUT"){ - aLogLine = "Cut the Selected Text"; + else if (rDescription.aAction == "CUT") + { + aLogLine = "Cut the Selected Text"; } - else if(rDescription.aAction=="PASTE"){ - aLogLine = "Paste in the Current Cursor Location"; + else if (rDescription.aAction == "PASTE") + { + aLogLine = "Paste in the Current Cursor Location"; } - else if(rDescription.aAction=="BREAK_PAGE"){ - aLogLine = "Insert Break Page"; + else if (rDescription.aAction == "BREAK_PAGE") + { + aLogLine = "Insert Break Page"; } } - else if(rDescription.aID=="grid_window"){ - - if(rDescription.aAction=="SELECT"){ - OUString type = GetKeyInMapWithIndex(rDescription.aParameters,0); - if(type=="CELL" || type=="RANGE"){ - aLogLine = "Select from calc" + aParameterString ; + else if (rDescription.aID == "grid_window") + { + if (rDescription.aAction == "SELECT") + { + OUString type = GetKeyInMapWithIndex(rDescription.aParameters, 0); + if (type == "CELL" || type == "RANGE") + { + aLogLine = "Select from calc" + aParameterString; } - else if(type=="TABLE") + else if (type == "TABLE") { - aLogLine = "Switch to sheet number " + GetValueInMapWithIndex(rDescription.aParameters,0) ; + aLogLine = "Switch to sheet number " + + GetValueInMapWithIndex(rDescription.aParameters, 0); } } - else if(rDescription.aAction=="LAUNCH"){ - aLogLine = "Lanuch AutoFilter from Col "+ - GetValueInMapWithIndex(rDescription.aParameters,2) + - " and Row " + GetValueInMapWithIndex(rDescription.aParameters,1); + else if (rDescription.aAction == "LAUNCH") + { + aLogLine = "Lanuch AutoFilter from Col " + + GetValueInMapWithIndex(rDescription.aParameters, 2) + " and Row " + + GetValueInMapWithIndex(rDescription.aParameters, 1); } - else if(rDescription.aAction=="DELETE_CONTENT"){ + else if (rDescription.aAction == "DELETE_CONTENT") + { aLogLine = "Remove Content from This " + aParameterString; } - else if(rDescription.aAction=="DELETE_CELLS"){ + else if (rDescription.aAction == "DELETE_CELLS") + { aLogLine = "Delete The Cells in" + aParameterString; } - else if(rDescription.aAction=="INSERT_CELLS"){ + else if (rDescription.aAction == "INSERT_CELLS") + { aLogLine = "Insert Cell around the " + aParameterString; } - else if(rDescription.aAction=="CUT"){ + else if (rDescription.aAction == "CUT") + { aLogLine = "CUT the selected " + aParameterString; } - else if(rDescription.aAction=="COPY"){ + else if (rDescription.aAction == "COPY") + { aLogLine = "COPY the selected " + aParameterString; } - else if(rDescription.aAction=="PASTE"){ + else if (rDescription.aAction == "PASTE") + { aLogLine = "Paste in the " + aParameterString; } - else if(rDescription.aAction=="MERGE_CELLS"){ + else if (rDescription.aAction == "MERGE_CELLS") + { aLogLine = "Merge " + aParameterString; } - else if(rDescription.aAction=="UNMERGE_CELL"){ + else if (rDescription.aAction == "UNMERGE_CELL") + { aLogLine = "Delete the merged " + aParameterString; } - else if(rDescription.aAction=="Rename_Sheet"){ - aLogLine = "Rename The Selected Tab to \""+\ - GetValueInMapWithIndex(rDescription.aParameters,0)+"\""; + else if (rDescription.aAction == "Rename_Sheet") + { + aLogLine = "Rename The Selected Tab to \"" + + GetValueInMapWithIndex(rDescription.aParameters, 0) + "\""; } - else if(rDescription.aAction=="InsertTab"){ + else if (rDescription.aAction == "InsertTab") + { aLogLine = "Insert New Tab "; } } - else if(rDescription.aID=="impress_win_or_draw_win"){ - if(rDescription.aAction=="Insert_New_Page_or_Slide"){ - if(UITestLogger::getInstance().getAppName()=="impress"){ - aLogLine = "Insert New Slide at Position " + GetValueInMapWithIndex(rDescription.aParameters,0); + else if (rDescription.aID == "impress_win_or_draw_win") + { + if (rDescription.aAction == "Insert_New_Page_or_Slide") + { + if (UITestLogger::getInstance().getAppName() == "impress") + { + aLogLine = "Insert New Slide at Position " + + GetValueInMapWithIndex(rDescription.aParameters, 0); } - else if(UITestLogger::getInstance().getAppName()=="draw"){ - aLogLine = "Insert New Page at Position " + GetValueInMapWithIndex(rDescription.aParameters,0); + else if (UITestLogger::getInstance().getAppName() == "draw") + { + aLogLine = "Insert New Page at Position " + + GetValueInMapWithIndex(rDescription.aParameters, 0); } } - else if(rDescription.aAction=="Delete_Slide_or_Page"){ - if(UITestLogger::getInstance().getAppName()=="impress"){ - aLogLine = "Delete Slide number "+ GetValueInMapWithIndex(rDescription.aParameters,0); + else if (rDescription.aAction == "Delete_Slide_or_Page") + { + if (UITestLogger::getInstance().getAppName() == "impress") + { + aLogLine + = "Delete Slide number " + GetValueInMapWithIndex(rDescription.aParameters, 0); } - else if(UITestLogger::getInstance().getAppName()=="draw"){ - aLogLine = "Delete Page number "+ GetValueInMapWithIndex(rDescription.aParameters,0); + else if (UITestLogger::getInstance().getAppName() == "draw") + { + aLogLine + = "Delete Page number " + GetValueInMapWithIndex(rDescription.aParameters, 0); } } - else if(rDescription.aAction=="Duplicate"){ + else if (rDescription.aAction == "Duplicate") + { aLogLine = "Duplicate The Selected Slide "; } - else if(rDescription.aAction=="RENAME"){ - if(UITestLogger::getInstance().getAppName()=="impress"){ - aLogLine = "Rename The Selected Slide from \""+ GetValueInMapWithIndex(rDescription.aParameters,1)+\ - "\" to \"" + GetValueInMapWithIndex(rDescription.aParameters,0)+"\""; + else if (rDescription.aAction == "RENAME") + { + if (UITestLogger::getInstance().getAppName() == "impress") + { + aLogLine = "Rename The Selected Slide from \"" + + GetValueInMapWithIndex(rDescription.aParameters, 1) + "\" to \"" + + GetValueInMapWithIndex(rDescription.aParameters, 0) + "\""; } - else if(UITestLogger::getInstance().getAppName()=="draw"){ - aLogLine = "Rename The Selected Page from \""+ GetValueInMapWithIndex(rDescription.aParameters,1)+\ - "\" to \"" + GetValueInMapWithIndex(rDescription.aParameters,0)+"\""; + else if (UITestLogger::getInstance().getAppName() == "draw") + { + aLogLine = "Rename The Selected Page from \"" + + GetValueInMapWithIndex(rDescription.aParameters, 1) + "\" to \"" + + GetValueInMapWithIndex(rDescription.aParameters, 0) + "\""; } } } - else if(rDescription.aParent=="element_selector"){ - aLogLine ="Select element no " + rDescription.aID + - " From " + rDescription.aParent; + else if (rDescription.aParent == "element_selector") + { + aLogLine = "Select element no " + rDescription.aID + " From " + rDescription.aParent; } - else{ - aLogLine = rDescription.aKeyWord + " Action:" + - rDescription.aAction + " Id:" + rDescription.aID + - " Parent:" + rDescription.aParent + aParameterString; + else + { + aLogLine = rDescription.aKeyWord + " Action:" + rDescription.aAction + " Id:" + + rDescription.aID + " Parent:" + rDescription.aParent + aParameterString; } log(aLogLine); } UITestLogger& UITestLogger::getInstance() { - ImplSVData *const pSVData = ImplGetSVData(); + ImplSVData* const pSVData = ImplGetSVData(); assert(pSVData); if (!pSVData->maWinData.m_pUITestLogger) @@ -496,5 +543,4 @@ UITestLogger& UITestLogger::getInstance() return *pSVData->maWinData.m_pUITestLogger; } - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/source/uitest/uiobject.cxx b/vcl/source/uitest/uiobject.cxx index d26072cd05a9..59510d6c03c8 100644 --- a/vcl/source/uitest/uiobject.cxx +++ b/vcl/source/uitest/uiobject.cxx @@ -622,7 +622,7 @@ OUString ButtonUIObject::get_action(VclEventId nEvent) const return "Start database" ; } else{ - if (get_top_parent(mxButton)->get_id()==""){ + if (get_top_parent(mxButton)->get_id().isEmpty()){ //This part because if we don't have parent return "Click on '" + mxButton->get_id() ; } @@ -751,7 +751,7 @@ OUString EditUIObject::get_action(VclEventId nEvent) const const Selection& rSelection = mxEdit->GetSelection(); long nMin = rSelection.Min(); long nMax = rSelection.Max(); - if(get_top_parent(mxEdit)->get_id()==""){ + if(get_top_parent(mxEdit)->get_id().isEmpty()){ //This part because if we don't have parent return "Select in '" + mxEdit->get_id() + @@ -880,7 +880,7 @@ OUString CheckBoxUIObject::get_action(VclEventId nEvent) const { if (nEvent == VclEventId::CheckboxToggle) { - if(get_top_parent(mxCheckBox)->get_id()==""){ + if(get_top_parent(mxCheckBox)->get_id().isEmpty()){ //This part because if we don't have parent return "Toggle '" + mxCheckBox->get_id() + "' CheckBox"; } @@ -934,7 +934,7 @@ OUString RadioButtonUIObject::get_action(VclEventId nEvent) const { if (nEvent == VclEventId::RadiobuttonToggle) { - if(get_top_parent(mxRadioButton)->get_id()==""){ + if(get_top_parent(mxRadioButton)->get_id().isEmpty()){ //This part because if we don't have parent return "Select '" + mxRadioButton->get_id() + "' RadioButton"; } @@ -1044,7 +1044,7 @@ OUString ListBoxUIObject::get_action(VclEventId nEvent) const if (nEvent == VclEventId::ListboxSelect) { sal_Int32 nPos = mxListBox->GetSelectedEntryPos(); - if(get_top_parent(mxListBox)->get_id()==""){ + if(get_top_parent(mxListBox)->get_id().isEmpty()){ //This part because if we don't have parent return "Select element with position " + OUString::number(nPos) + " in '" + mxListBox->get_id(); @@ -1054,7 +1054,7 @@ OUString ListBoxUIObject::get_action(VclEventId nEvent) const } else if (nEvent == VclEventId::ListboxFocus) { - if(get_top_parent(mxListBox)->get_id()=="") + if(get_top_parent(mxListBox)->get_id().isEmpty()) { //This part because if we don't have parent return this->get_type() + " Action:FOCUS Id:" + mxListBox->get_id(); @@ -1129,7 +1129,7 @@ OUString ComboBoxUIObject::get_action(VclEventId nEvent) const if (nEvent == VclEventId::ComboboxSelect) { sal_Int32 nPos = mxComboBox->GetSelectedEntryPos(); - if (get_top_parent(mxComboBox)->get_id()==""){ + if (get_top_parent(mxComboBox)->get_id().isEmpty()){ //This part because if we don't have parent return "Select in '" + mxComboBox->get_id() + "' ComboBox item number " + OUString::number(nPos); @@ -1249,7 +1249,7 @@ OUString SpinFieldUIObject::get_action(VclEventId nEvent) const { if (nEvent == VclEventId::SpinfieldUp) { - if(get_top_parent(mxSpinField)->get_id()=="") + if(get_top_parent(mxSpinField)->get_id().isEmpty()) { //This part because if we don't have parent return "Increase '" + mxSpinField->get_id(); @@ -1259,7 +1259,7 @@ OUString SpinFieldUIObject::get_action(VclEventId nEvent) const } else if (nEvent == VclEventId::SpinfieldDown) { - if(get_top_parent(mxSpinField)->get_id()=="") + if(get_top_parent(mxSpinField)->get_id().isEmpty()) { //This part because if we don't have parent return "Decrease '" + mxSpinField->get_id(); @@ -1328,7 +1328,7 @@ OUString TabControlUIObject::get_action(VclEventId nEvent) const { sal_Int32 nPageId = mxTabControl->GetCurPageId(); - if(get_top_parent(mxTabControl)->get_id()==""){ + if(get_top_parent(mxTabControl)->get_id().isEmpty()){ //This part because if we don't have parent return "Choose Tab number " + OUString::number(mxTabControl->GetPagePos(nPageId)) + " in '" + mxTabControl->get_id(); commit 49fb8654b4d6b0eb3184cb0218f164df88016b74 Author: Ahmed ElShreif <aelshre...@gmail.com> AuthorDate: Sat Aug 17 21:37:21 2019 -0500 Commit: Markus Mohrhard <markus.mohrh...@googlemail.com> CommitDate: Mon Aug 19 22:56:39 2019 +0800 uitest: add the SideBar implementation Change-Id: I7de9bd97e868624476b5c39a5e37afc945206e4e diff --git a/uitest/ui_logger_dsl/dsl_core.py b/uitest/ui_logger_dsl/dsl_core.py index 088fcf4a0d64..b77a3449aa6e 100644 --- a/uitest/ui_logger_dsl/dsl_core.py +++ b/uitest/ui_logger_dsl/dsl_core.py @@ -97,6 +97,7 @@ class ul_Compiler: 'math_Type_command':self.handle_math_Type_command, 'setZoom_command':self.handle_setZoom_command, 'draw_Type_command':self.handle_draw_Type_command, + 'SideBar':self.handle_SideBar, 'writer_Copy_Text':self.do_nothing, 'writer_Cut_Text':self.do_nothing, @@ -188,6 +189,15 @@ class ul_Compiler: self.current_app=app[StarterCommand.program_name] self.prev_command=StarterCommand + def handle_SideBar(self , SideBar): + + line=" self.xUITest.executeCommand(\".uno:Sidebar\")\n" + self.variables.append(line) + + self.write_line_with_one_parameters("MainWindow","SIDEBAR","PANEL",SideBar.name) + + self.prev_command=SideBar + def handle_Dialog(self, DialogCommand): if (DialogCommand.__class__.__name__ == "OpenModalDialog"): commit 1eead54fe7e264d854d5daaad610b20426143b9b Author: Ahmed ElShreif <aelshre...@gmail.com> AuthorDate: Fri Aug 16 21:56:42 2019 -0500 Commit: Markus Mohrhard <markus.mohrh...@googlemail.com> CommitDate: Mon Aug 19 22:56:39 2019 +0800 uitest: ignore the logging part of the QuerySaveDialog while closing the app Change-Id: I18fcc81fa54362dfaa574ec04125e66b37a5aad8 diff --git a/uitest/ui_logger_dsl/dsl_core.py b/uitest/ui_logger_dsl/dsl_core.py index b8e0b9b7269c..088fcf4a0d64 100644 --- a/uitest/ui_logger_dsl/dsl_core.py +++ b/uitest/ui_logger_dsl/dsl_core.py @@ -33,6 +33,7 @@ class ul_Compiler: current_app="" parent_hierarchy_count=0 last_parent=[] + flag_for_QuerySaveDialog=False def __init__(self , input_address , output_address): self.ui_dsl_mm = metamodel_from_file('ui_logger_dsl_grammar.tx') @@ -190,21 +191,27 @@ class ul_Compiler: def handle_Dialog(self, DialogCommand): if (DialogCommand.__class__.__name__ == "OpenModalDialog"): - old_line = self.variables.pop() - if (self.prev_command.__class__.__name__ == "UNOCommand"): - key_word=self.prev_command.uno_command_name[-6:] - else: - key_word=old_line[-9:-3] + if( DialogCommand.dialog_name != "QuerySaveDialog" ): + # This part is just to ignore saving the Save dialog while closing the app - if ( key_word == "Dialog"): - old_line= double_tab + "self.ui_test.execute_dialog_through_command(\""+\ - self.prev_command.uno_command_name+"\")\n" - self.variables.append(old_line) - line = double_tab + DialogCommand.dialog_name + " = self.xUITest.getTopFocusWindow()\n" - self.variables.append(line) - self.last_parent.append(DialogCommand.dialog_name) - self.parent_hierarchy_count=self.parent_hierarchy_count+1 + old_line = self.variables.pop() + if (self.prev_command.__class__.__name__ == "UNOCommand"): + key_word=self.prev_command.uno_command_name[-6:] + else: + key_word=old_line[-9:-3] + + if ( key_word == "Dialog"): + old_line= double_tab + "self.ui_test.execute_dialog_through_command(\""+\ + self.prev_command.uno_command_name+"\")\n" + self.variables.append(old_line) + line = double_tab + DialogCommand.dialog_name + " = self.xUITest.getTopFocusWindow()\n" + self.variables.append(line) + self.last_parent.append(DialogCommand.dialog_name) + self.parent_hierarchy_count=self.parent_hierarchy_count+1 + + else: + self.flag_for_QuerySaveDialog=True elif (DialogCommand.__class__.__name__ == "OpenModelessDialog"): old_line = self.variables.pop() @@ -223,37 +230,46 @@ class ul_Compiler: self.parent_hierarchy_count=self.parent_hierarchy_count+1 elif (DialogCommand.__class__.__name__ == "CloseDialog"): - if (self.prev_command.__class__.__name__ == "ButtonUIObject"): - old_line = self.variables.pop() - line="" - if(keyword.iskeyword( self.prev_command.ui_button )): - line= double_tab + "self.ui_test.close_dialog_through_button(x"+\ - self.prev_command.ui_button+")\n" - else: - line= double_tab + "self.ui_test.close_dialog_through_button("+\ - self.prev_command.ui_button+")\n" - self.variables.append(line) - self.last_parent.pop() - self.parent_hierarchy_count=self.parent_hierarchy_count-1 + + if( not ( self.flag_for_QuerySaveDialog ) ): + # This part is just to ignore saving the Save dialog while closing the app + + if (self.prev_command.__class__.__name__ == "ButtonUIObject"): + old_line = self.variables.pop() + line="" + if(keyword.iskeyword( self.prev_command.ui_button )): + line= double_tab + "self.ui_test.close_dialog_through_button(x"+\ + self.prev_command.ui_button+")\n" + else: + line= double_tab + "self.ui_test.close_dialog_through_button("+\ + self.prev_command.ui_button+")\n" + self.variables.append(line) + self.last_parent.pop() + self.parent_hierarchy_count=self.parent_hierarchy_count-1 + else: + self.flag_for_QuerySaveDialog=False self.prev_command=DialogCommand def handle_button(self, ButtonUIObject): - name_of_obj="" - if(keyword.iskeyword( ButtonUIObject.ui_button )): - name_of_obj = "x" +ButtonUIObject.ui_button - else: - name_of_obj = ButtonUIObject.ui_button + if( ButtonUIObject.parent_id!="QuerySaveDialog" ): + # This part is just to ignore saving the Save dialog while closing the app - if ButtonUIObject.parent_id == "" : - self.init_Object( name_of_obj , ButtonUIObject.ui_button , self.last_parent[self.parent_hierarchy_count] ) - else: - self.init_Object( name_of_obj , ButtonUIObject.ui_button,ButtonUIObject.parent_id) + name_of_obj="" + if(keyword.iskeyword( ButtonUIObject.ui_button )): + name_of_obj = "x" +ButtonUIObject.ui_button + else: + name_of_obj = ButtonUIObject.ui_button - self.write_line_without_parameters(name_of_obj,"CLICK","tuple") + if ButtonUIObject.parent_id == "" : + self.init_Object( name_of_obj , ButtonUIObject.ui_button , self.last_parent[self.parent_hierarchy_count] ) + else: + self.init_Object( name_of_obj , ButtonUIObject.ui_button,ButtonUIObject.parent_id) + + self.write_line_without_parameters(name_of_obj,"CLICK","tuple") - self.prev_command=ButtonUIObject + self.prev_command=ButtonUIObject def handle_check_box(self, CheckBoxUIObject): commit cb84769f7c7197ddc5440a1e29cd80bc5184f06c Author: Ahmed ElShreif <aelshre...@gmail.com> AuthorDate: Thu Aug 15 22:48:14 2019 -0500 Commit: Markus Mohrhard <markus.mohrh...@googlemail.com> CommitDate: Mon Aug 19 22:56:39 2019 +0800 uitest: use prefix for names that has conflict with python's keywords Change-Id: I01d044a96eeae60a070a5ca0fc8d6105d7333414 diff --git a/uitest/ui_logger_dsl/dsl_core.py b/uitest/ui_logger_dsl/dsl_core.py index 5d2a7e93ba82..b8e0b9b7269c 100644 --- a/uitest/ui_logger_dsl/dsl_core.py +++ b/uitest/ui_logger_dsl/dsl_core.py @@ -9,6 +9,7 @@ import os import sys import argparse +import keyword from textx.metamodel import metamodel_from_file tab=" " @@ -129,14 +130,14 @@ class ul_Compiler: line=double_tab+self.current_app+" = MainWindow.getChild(\""+self.current_app+"\")\n" self.variables.append(line) - def init_Object(self,Id_of_Object,Obj_parent): + def init_Object(self,Id_of_Object,name_of_child,Obj_parent): if Id_of_Object in self.objects: self.objects[Id_of_Object]+=1 else: self.objects[Id_of_Object]=1 line=double_tab+Id_of_Object+" = "+Obj_parent+\ - ".getChild(\""+Id_of_Object+"\")\n" + ".getChild(\""+name_of_child+"\")\n" self.variables.append(line) def write_line_without_parameters(self,Action_holder,Action,Action_type): @@ -224,8 +225,13 @@ class ul_Compiler: elif (DialogCommand.__class__.__name__ == "CloseDialog"): if (self.prev_command.__class__.__name__ == "ButtonUIObject"): old_line = self.variables.pop() - line= double_tab + "self.ui_test.close_dialog_through_button("+\ - self.prev_command.ui_button+")\n" + line="" + if(keyword.iskeyword( self.prev_command.ui_button )): + line= double_tab + "self.ui_test.close_dialog_through_button(x"+\ + self.prev_command.ui_button+")\n" + else: + line= double_tab + "self.ui_test.close_dialog_through_button("+\ + self.prev_command.ui_button+")\n" self.variables.append(line) self.last_parent.pop() self.parent_hierarchy_count=self.parent_hierarchy_count-1 @@ -234,109 +240,157 @@ class ul_Compiler: def handle_button(self, ButtonUIObject): + name_of_obj="" + if(keyword.iskeyword( ButtonUIObject.ui_button )): + name_of_obj = "x" +ButtonUIObject.ui_button + else: + name_of_obj = ButtonUIObject.ui_button + if ButtonUIObject.parent_id == "" : - self.init_Object( ButtonUIObject.ui_button , self.last_parent[self.parent_hierarchy_count] ) + self.init_Object( name_of_obj , ButtonUIObject.ui_button , self.last_parent[self.parent_hierarchy_count] ) else: - self.init_Object(ButtonUIObject.ui_button,ButtonUIObject.parent_id) + self.init_Object( name_of_obj , ButtonUIObject.ui_button,ButtonUIObject.parent_id) - self.write_line_without_parameters(ButtonUIObject.ui_button,"CLICK","tuple") + self.write_line_without_parameters(name_of_obj,"CLICK","tuple") self.prev_command=ButtonUIObject def handle_check_box(self, CheckBoxUIObject): + name_of_obj="" + if(keyword.iskeyword( CheckBoxUIObject.Check_box_id )): + name_of_obj = "x" + CheckBoxUIObject.Check_box_id + else: + name_of_obj = CheckBoxUIObject.Check_box_id + if CheckBoxUIObject.parent_id == "" : - self.init_Object( CheckBoxUIObject.Check_box_id , self.last_parent[self.parent_hierarchy_count] ) + self.init_Object( name_of_obj , CheckBoxUIObject.Check_box_id , self.last_parent[self.parent_hierarchy_count] ) else: - self.init_Object(CheckBoxUIObject.Check_box_id,CheckBoxUIObject.parent_id) + self.init_Object( name_of_obj , CheckBoxUIObject.Check_box_id,CheckBoxUIObject.parent_id) - self.write_line_without_parameters(CheckBoxUIObject.Check_box_id,"CLICK","tuple") + self.write_line_without_parameters(name_of_obj,"CLICK","tuple") self.prev_command=CheckBoxUIObject def handle_tab(self, TabControlUIObject): + name_of_obj="" + if(keyword.iskeyword( TabControlUIObject.tab_id )): + name_of_obj = "x" + TabControlUIObject.tab_id + else: + name_of_obj = TabControlUIObject.tab_id + if TabControlUIObject.parent_id == "" : - self.init_Object( TabControlUIObject.tab_id , self.last_parent[self.parent_hierarchy_count] ) + self.init_Object( name_of_obj , TabControlUIObject.tab_id , self.last_parent[self.parent_hierarchy_count] ) else: - self.init_Object(TabControlUIObject.tab_id,TabControlUIObject.parent_id) + self.init_Object( name_of_obj , TabControlUIObject.tab_id,TabControlUIObject.parent_id) - self.write_line_with_one_parameters(TabControlUIObject.tab_id,"SELECT","POS",TabControlUIObject.tab_page_number) + self.write_line_with_one_parameters(name_of_obj,"SELECT","POS",TabControlUIObject.tab_page_number) self.prev_command=TabControlUIObject def handle_Combo_box(self, ComboBoxUIObject): + name_of_obj="" + if(keyword.iskeyword( ComboBoxUIObject.Combo_box_id )): + name_of_obj = "x" + ComboBoxUIObject.Combo_box_id + else: + name_of_obj = ComboBoxUIObject.Combo_box_id + if ComboBoxUIObject.parent_id == "" : - self.init_Object( ComboBoxUIObject.Combo_box_id , self.last_parent[self.parent_hierarchy_count] ) + self.init_Object( name_of_obj , ComboBoxUIObject.Combo_box_id , self.last_parent[self.parent_hierarchy_count] ) else: - self.init_Object(ComboBoxUIObject.Combo_box_id,ComboBoxUIObject.parent_id) + self.init_Object( name_of_obj , ComboBoxUIObject.Combo_box_id,ComboBoxUIObject.parent_id) - self.write_line_with_one_parameters(ComboBoxUIObject.Combo_box_id,"SELECT","POS",ComboBoxUIObject.item_num) + self.write_line_with_one_parameters(name_of_obj,"SELECT","POS",ComboBoxUIObject.item_num) self.prev_command=ComboBoxUIObject def handle_Radio_button(self,RadioButtonUIObject): + name_of_obj="" + if(keyword.iskeyword( RadioButtonUIObject.Radio_button_id )): + name_of_obj = "x" + RadioButtonUIObject.Radio_button_id + else: + name_of_obj = RadioButtonUIObject.Radio_button_id + if RadioButtonUIObject.parent_id == "" : - self.init_Object( RadioButtonUIObject.Radio_button_id , self.last_parent[self.parent_hierarchy_count] ) + self.init_Object( name_of_obj , RadioButtonUIObject.Radio_button_id , self.last_parent[self.parent_hierarchy_count] ) else: - self.init_Object(RadioButtonUIObject.Radio_button_id,RadioButtonUIObject.parent_id) + self.init_Object( name_of_obj , RadioButtonUIObject.Radio_button_id,RadioButtonUIObject.parent_id) - self.write_line_without_parameters(RadioButtonUIObject.Radio_button_id,"CLICK","tuple") + self.write_line_without_parameters(name_of_obj,"CLICK","tuple") self.prev_command=RadioButtonUIObject def handle_List_box(self, ListBoxUIObject): + name_of_obj="" + if(keyword.iskeyword( ListBoxUIObject.list_id )): + name_of_obj = "x" + ListBoxUIObject.list_id + else: + name_of_obj = ListBoxUIObject.list_id + if ListBoxUIObject.parent_id == "" : - self.init_Object( ListBoxUIObject.list_id , self.last_parent[self.parent_hierarchy_count] ) + self.init_Object( name_of_obj , ListBoxUIObject.list_id , self.last_parent[self.parent_hierarchy_count] ) else: - self.init_Object(ListBoxUIObject.list_id,ListBoxUIObject.parent_id) + self.init_Object( name_of_obj , ListBoxUIObject.list_id,ListBoxUIObject.parent_id) - self.write_line_with_one_parameters(ListBoxUIObject.list_id,"SELECT","POS",ListBoxUIObject.POS) + self.write_line_with_one_parameters(name_of_obj,"SELECT","POS",ListBoxUIObject.POS) self.prev_command=ListBoxUIObject def handle_spin_field(self,SpinFieldUIObject): + name_of_obj="" + if(keyword.iskeyword( SpinFieldUIObject.Spin_id )): + name_of_obj = "x" + SpinFieldUIObject.Spin_id + else: + name_of_obj = SpinFieldUIObject.Spin_id + if SpinFieldUIObject.parent_id == "" : - self.init_Object( SpinFieldUIObject.Spin_id , self.last_parent[self.parent_hierarchy_count] ) + self.init_Object( name_of_obj , SpinFieldUIObject.Spin_id , self.last_parent[self.parent_hierarchy_count] ) else: - self.init_Object(SpinFieldUIObject.Spin_id,SpinFieldUIObject.parent_id) + self.init_Object( name_of_obj , SpinFieldUIObject.Spin_id,SpinFieldUIObject.parent_id) if(SpinFieldUIObject.change=="Increase"): - self.write_line_without_parameters(SpinFieldUIObject.Spin_id,"UP","tuple") + self.write_line_without_parameters(name_of_obj,"UP","tuple") elif(SpinFieldUIObject.change=="Decrease"): - self.write_line_without_parameters(SpinFieldUIObject.Spin_id,"DOWN","tuple") + self.write_line_without_parameters(name_of_obj,"DOWN","tuple") self.prev_command=SpinFieldUIObject def handle_Edit_uiObject(self,EditUIObject): + name_of_obj="" + if(keyword.iskeyword( EditUIObject.action.edit_button )): + name_of_obj = "x" + EditUIObject.action.edit_button + else: + name_of_obj =EditUIObject.action.edit_button + if EditUIObject.parent_id == "" : - self.init_Object( EditUIObject.action.edit_button , self.last_parent[self.parent_hierarchy_count] ) + self.init_Object( name_of_obj , EditUIObject.action.edit_button , self.last_parent[self.parent_hierarchy_count] ) else: - self.init_Object(EditUIObject.action.edit_button,EditUIObject.parent_id) + self.init_Object( name_of_obj , EditUIObject.action.edit_button,EditUIObject.parent_id) if(EditUIObject.action.__class__.__name__ =="Type_action"): if(EditUIObject.action.what_to_type.__class__.__name__=="char"): - self.write_line_with_one_parameters(EditUIObject.action.edit_button,\ + self.write_line_with_one_parameters(name_of_obj,\ "TYPE","TEXT",EditUIObject.action.what_to_type.input_char) elif(EditUIObject.action.what_to_type.__class__.__name__=="KeyCode"): - self.write_line_with_one_parameters(EditUIObject.action.edit_button,\ + self.write_line_with_one_parameters(name_of_obj,\ "TYPE","KEYCODE",EditUIObject.action.what_to_type.input_key_code) if(EditUIObject.action.__class__.__name__ =="SELECT"): - self.write_line_with_two_parameters(EditUIObject.action.edit_button,\ + self.write_line_with_two_parameters(name_of_obj,\ "SELECT","FROM",EditUIObject.action.from_pos,"TO",\ EditUIObject.action.to_pos) if(EditUIObject.action.__class__.__name__ =="Clear"): - self.write_line_without_parameters(SpinFieldUIObject.Spin_id,"CLEAR","tuple") + self.write_line_without_parameters(name_of_obj,"CLEAR","tuple") self.prev_command=EditUIObject commit 58cba15e9dabb895980cdddb8ad2c1e22080d343 Author: Ahmed ElShreif <aelshre...@gmail.com> AuthorDate: Thu Aug 15 12:24:09 2019 -0500 Commit: Markus Mohrhard <markus.mohrh...@googlemail.com> CommitDate: Mon Aug 19 22:56:39 2019 +0800 uitest: replace tabs with spaces Change-Id: I40779dfdb65037838e1a1b7bed5d89a656047ce6 diff --git a/uitest/ui_logger_dsl/dsl_core.py b/uitest/ui_logger_dsl/dsl_core.py index a695ec009d22..5d2a7e93ba82 100644 --- a/uitest/ui_logger_dsl/dsl_core.py +++ b/uitest/ui_logger_dsl/dsl_core.py @@ -11,6 +11,9 @@ import sys import argparse from textx.metamodel import metamodel_from_file +tab=" " +double_tab=" " + def parse_args(): """ This function parses the command-line arguments @@ -59,7 +62,7 @@ class ul_Compiler: "from libreoffice.uno.propertyvalue import mkPropertyValues\n" + \ "import importlib\n\n" + \ "class TestClass(UITestCase):\n" + \ - "\tdef test_function(self):\n" + tab+"def test_function(self):\n" self.variables.append(line) @@ -123,7 +126,7 @@ class ul_Compiler: self.objects[self.current_app]+=1 else: self.objects[self.current_app]=1 - line="\t\t"+self.current_app+" = MainWindow.getChild(\""+self.current_app+"\")\n" + line=double_tab+self.current_app+" = MainWindow.getChild(\""+self.current_app+"\")\n" self.variables.append(line) def init_Object(self,Id_of_Object,Obj_parent): @@ -132,16 +135,16 @@ class ul_Compiler: self.objects[Id_of_Object]+=1 else: self.objects[Id_of_Object]=1 - line="\t\t"+Id_of_Object+" = "+Obj_parent+\ + line=double_tab+Id_of_Object+" = "+Obj_parent+\ ".getChild(\""+Id_of_Object+"\")\n" self.variables.append(line) def write_line_without_parameters(self,Action_holder,Action,Action_type): - line="\t\t"+Action_holder+".executeAction(\""+Action+"\","+Action_type+"())\n" + line=double_tab+Action_holder+".executeAction(\""+Action+"\","+Action_type+"())\n" self.variables.append(line) def write_line_with_one_parameters(self,Action_holder,Action,Paramerter_name,parameter_value): - line="\t\t"+Action_holder+".executeAction(\""+Action+"\", mkPropertyValues({\""+\ + line=double_tab+Action_holder+".executeAction(\""+Action+"\", mkPropertyValues({\""+\ Paramerter_name+"\": \""+\ str(parameter_value)+"\"}))\n" self.variables.append(line) @@ -149,7 +152,7 @@ class ul_Compiler: def write_line_with_two_parameters(self,Action_holder,Action,Paramerter_name_1,parameter_value_1, Paramerter_name_2,parameter_value_2): - line="\t\t"+Action_holder+\ + line=double_tab+Action_holder+\ ".executeAction(\""+Action+"\", mkPropertyValues({\""+Paramerter_name_1+"\": \""+\ str(parameter_value_1)+"\", \""+Paramerter_name_2+"\": \""+\ str(parameter_value_2)+"\"}))\n" @@ -157,7 +160,7 @@ class ul_Compiler: def handle_uno(self, UNOCommand): if(UNOCommand.prameters==None): - line = "\t\tself.xUITest.executeCommand(\"" + \ + line = double_tab +"self.xUITest.executeCommand(\"" + \ UNOCommand.uno_command_name +"\")\n" else: paramaters="" @@ -165,18 +168,18 @@ class ul_Compiler: paramaters = paramaters + "\"" + p.key + "\" : " + str(p.value) + " ," paramaters = paramaters[:-1] - line = "\t\tself.xUITest.executeCommandWithParameters(\"" + \ + line = double_tab + "self.xUITest.executeCommandWithParameters(\"" + \ UNOCommand.uno_command_name +"\", mkPropertyValues({"+ paramaters +"}) )\n" self.variables.append(line) self.prev_command=UNOCommand def handle_start(self, StarterCommand): - line="\t\tMainDoc = self.ui_test.create_doc_in_start_center(\""+\ + line= double_tab + "MainDoc = self.ui_test.create_doc_in_start_center(\""+\ StarterCommand.program_name+"\")\n" self.variables.append(line) - line="\t\tMainWindow = self.xUITest.getTopFocusWindow()\n" + line= double_tab + "MainWindow = self.xUITest.getTopFocusWindow()\n" self.variables.append(line) app={"writer":"writer_edit","calc":"grid_window","impress":"impress_win"\ ,"math":"math_edit","draw":"draw_win"} @@ -194,10 +197,10 @@ class ul_Compiler: key_word=old_line[-9:-3] if ( key_word == "Dialog"): - old_line="\t\tself.ui_test.execute_dialog_through_command(\""+\ + old_line= double_tab + "self.ui_test.execute_dialog_through_command(\""+\ self.prev_command.uno_command_name+"\")\n" self.variables.append(old_line) - line = "\t\t" + DialogCommand.dialog_name + " = self.xUITest.getTopFocusWindow()\n" + line = double_tab + DialogCommand.dialog_name + " = self.xUITest.getTopFocusWindow()\n" self.variables.append(line) self.last_parent.append(DialogCommand.dialog_name) self.parent_hierarchy_count=self.parent_hierarchy_count+1 @@ -210,10 +213,10 @@ class ul_Compiler: key_word=old_line[-9:-3] if ( key_word == "Dialog"): - old_line="\t\tself.ui_test.execute_modeless_dialog_through_command(\""+\ + old_line= double_tab + "self.ui_test.execute_modeless_dialog_through_command(\""+\ self.prev_command.uno_command_name+"\")\n" self.variables.append(old_line) - line = "\t\t" + DialogCommand.dialog_name + " = self.xUITest.getTopFocusWindow()\n" + line = double_tab + DialogCommand.dialog_name + " = self.xUITest.getTopFocusWindow()\n" self.variables.append(line) self.last_parent.append(DialogCommand.dialog_name) self.parent_hierarchy_count=self.parent_hierarchy_count+1 @@ -221,7 +224,7 @@ class ul_Compiler: elif (DialogCommand.__class__.__name__ == "CloseDialog"): if (self.prev_command.__class__.__name__ == "ButtonUIObject"): old_line = self.variables.pop() - line="\t\tself.ui_test.close_dialog_through_button("+\ + line= double_tab + "self.ui_test.close_dialog_through_button("+\ self.prev_command.ui_button+")\n" self.variables.append(line) self.last_parent.pop() @@ -403,7 +406,7 @@ class ul_Compiler: self.init_app() - line="\t\t"+self.current_app+".executeAction(\"LAUNCH\", mkPropertyValues"+\ + line= double_tab +self.current_app+".executeAction(\"LAUNCH\", mkPropertyValues"+\ "({\"AUTOFILTER\": \"\", \"COL\": \""+\ str(calc_AutoFill_filter.col_num)+"\""+\ ", \"ROW\": \""+str(calc_AutoFill_filter.row_num)\ @@ -448,7 +451,7 @@ class ul_Compiler: def handle_math_element_selector (self,math_element_selector): - line="\t\t"+str(math_element_selector.element_no)+" = element_selector.getChild(\""+\ + line= double_tab +str(math_element_selector.element_no)+" = element_selector.getChild(\""+\ str(math_element_selector.element_no)+"\")\n" self.variables.append(line) @@ -465,7 +468,7 @@ class ul_Compiler: self.prev_command=setZoom_command def Generate_UI_test(self): - line="\t\tself.ui_test.close_doc()" + line= double_tab + "self.ui_test.close_doc()" self.variables.append(line) line="\n\n# vim: set shiftwidth=4 softtabstop=4 expandtab:" commit d999a30410abc4af80276c48e39e6a731d1dea30 Author: Ahmed ElShreif <aelshre...@gmail.com> AuthorDate: Tue Aug 13 12:23:06 2019 -0500 Commit: Markus Mohrhard <markus.mohrh...@googlemail.com> CommitDate: Mon Aug 19 22:56:39 2019 +0800 uitest: add footer line support Change-Id: I740995d811be030f406f9d3ff53c56d28af2b786 diff --git a/uitest/ui_logger_dsl/dsl_core.py b/uitest/ui_logger_dsl/dsl_core.py index a1d1da8b60a2..a695ec009d22 100644 --- a/uitest/ui_logger_dsl/dsl_core.py +++ b/uitest/ui_logger_dsl/dsl_core.py @@ -468,6 +468,9 @@ class ul_Compiler: line="\t\tself.ui_test.close_doc()" self.variables.append(line) + line="\n\n# vim: set shiftwidth=4 softtabstop=4 expandtab:" + self.variables.append(line) + for line in self.variables: self.output_stream.write(str(line)) commit e72ae01b906455524a1d4a615ab1a0efb94a6f11 Author: Ahmed ElShreif <aelshre...@gmail.com> AuthorDate: Fri Aug 9 23:23:11 2019 -0500 Commit: Markus Mohrhard <markus.mohrh...@googlemail.com> CommitDate: Mon Aug 19 22:56:39 2019 +0800 uitest: solve problem with un-named parents 1) Add recursively query for the parent until find an parent with a name. 2) Remove the parent part "from xxxxxx" from the log statment if there is un-named parent 3) Update the compiler to use the most top parent if there is command with no un-named parent Change-Id: Id7dd5092bc995312494b5536720141908e73af9a diff --git a/uitest/ui_logger_dsl/UI_Object_commands.tx b/uitest/ui_logger_dsl/UI_Object_commands.tx index fbdab9c4e6ca..9b25e09c6efc 100644 --- a/uitest/ui_logger_dsl/UI_Object_commands.tx +++ b/uitest/ui_logger_dsl/UI_Object_commands.tx @@ -19,31 +19,29 @@ UIObjectCommand: ; ButtonUIObject: - 'Click on' ui_button=STRING 'from' parent_id=ID + 'Click on' ui_button=STRING ('from' parent_id=ID)? ; CheckBoxUIObject: - 'Toggle' Check_box_id=STRING 'CheckBox' 'from' parent_id=ID + 'Toggle' Check_box_id=STRING 'CheckBox' ('from' parent_id=ID)? ; RadioButtonUIObject: - 'Select' Radio_button_id=STRING 'RadioButton' 'from' parent_id=ID + 'Select' Radio_button_id=STRING 'RadioButton' ('from' parent_id=ID)? ; ComboBoxUIObject: - 'Select in' Combo_box_id=STRING 'ComboBox' 'item number' item_num=INT 'from' parent_id=ID + 'Select in' Combo_box_id=STRING 'ComboBox' 'item number' item_num=INT ('from' parent_id=ID)? ; TabControlUIObject: - 'Choose Tab number' tab_page_number=INT 'in' tab_id=STRING 'from' parent_id=ID + 'Choose Tab number' tab_page_number=INT 'in' tab_id=STRING ('from' parent_id=ID)? ; - EditUIObject: - action=action_on_UIObject 'from' parent_id=ID + action=action_on_UIObject ('from' parent_id=ID)? ; SpinFieldUIObject: - change=increase_or_ecrease Spin_id=STRING 'from' parent_id=ID + change=increase_or_ecrease Spin_id=STRING ('from' parent_id=ID)? ; ListBoxUIObject: - 'Select element with position ' POS=INT 'in' list_id=STRING 'from' parent_id=ID + 'Select element with position ' POS=INT 'in' list_id=STRING ('from' parent_id=ID)? ; - //============================================================= //hellper grammer for EditUIObject action_on_UIObject: diff --git a/uitest/ui_logger_dsl/dsl_core.py b/uitest/ui_logger_dsl/dsl_core.py index 827f2ca45b20..a1d1da8b60a2 100644 --- a/uitest/ui_logger_dsl/dsl_core.py +++ b/uitest/ui_logger_dsl/dsl_core.py @@ -27,6 +27,9 @@ class ul_Compiler: variables=[] objects = dict() current_app="" + parent_hierarchy_count=0 + last_parent=[] + def __init__(self , input_address , output_address): self.ui_dsl_mm = metamodel_from_file('ui_logger_dsl_grammar.tx') self.output_stream=self.initiate_test_generation(output_address) @@ -44,6 +47,7 @@ class ul_Compiler: return content def initiate_test_generation(self,output_address): + self.last_parent.append("MainWindow") try: f = open(output_address,"w") except IOError as err: @@ -195,6 +199,8 @@ class ul_Compiler: self.variables.append(old_line) line = "\t\t" + DialogCommand.dialog_name + " = self.xUITest.getTopFocusWindow()\n" self.variables.append(line) + self.last_parent.append(DialogCommand.dialog_name) + self.parent_hierarchy_count=self.parent_hierarchy_count+1 elif (DialogCommand.__class__.__name__ == "OpenModelessDialog"): old_line = self.variables.pop() @@ -209,6 +215,8 @@ class ul_Compiler: self.variables.append(old_line) line = "\t\t" + DialogCommand.dialog_name + " = self.xUITest.getTopFocusWindow()\n" self.variables.append(line) + self.last_parent.append(DialogCommand.dialog_name) + self.parent_hierarchy_count=self.parent_hierarchy_count+1 elif (DialogCommand.__class__.__name__ == "CloseDialog"): if (self.prev_command.__class__.__name__ == "ButtonUIObject"): @@ -216,12 +224,17 @@ class ul_Compiler: line="\t\tself.ui_test.close_dialog_through_button("+\ self.prev_command.ui_button+")\n" self.variables.append(line) + self.last_parent.pop() + self.parent_hierarchy_count=self.parent_hierarchy_count-1 self.prev_command=DialogCommand def handle_button(self, ButtonUIObject): - self.init_Object(ButtonUIObject.ui_button,ButtonUIObject.parent_id) + if ButtonUIObject.parent_id == "" : + self.init_Object( ButtonUIObject.ui_button , self.last_parent[self.parent_hierarchy_count] ) + else: + self.init_Object(ButtonUIObject.ui_button,ButtonUIObject.parent_id) self.write_line_without_parameters(ButtonUIObject.ui_button,"CLICK","tuple") @@ -229,7 +242,10 @@ class ul_Compiler: def handle_check_box(self, CheckBoxUIObject): - self.init_Object(CheckBoxUIObject.Check_box_id,CheckBoxUIObject.parent_id) + if CheckBoxUIObject.parent_id == "" : + self.init_Object( CheckBoxUIObject.Check_box_id , self.last_parent[self.parent_hierarchy_count] ) + else: + self.init_Object(CheckBoxUIObject.Check_box_id,CheckBoxUIObject.parent_id) self.write_line_without_parameters(CheckBoxUIObject.Check_box_id,"CLICK","tuple") @@ -237,7 +253,10 @@ class ul_Compiler: def handle_tab(self, TabControlUIObject): - self.init_Object(TabControlUIObject.tab_id,TabControlUIObject.parent_id) + if TabControlUIObject.parent_id == "" : + self.init_Object( TabControlUIObject.tab_id , self.last_parent[self.parent_hierarchy_count] ) + else: + self.init_Object(TabControlUIObject.tab_id,TabControlUIObject.parent_id) self.write_line_with_one_parameters(TabControlUIObject.tab_id,"SELECT","POS",TabControlUIObject.tab_page_number) @@ -245,7 +264,10 @@ class ul_Compiler: def handle_Combo_box(self, ComboBoxUIObject): - self.init_Object(ComboBoxUIObject.Combo_box_id,ComboBoxUIObject.parent_id) + if ComboBoxUIObject.parent_id == "" : + self.init_Object( ComboBoxUIObject.Combo_box_id , self.last_parent[self.parent_hierarchy_count] ) + else: + self.init_Object(ComboBoxUIObject.Combo_box_id,ComboBoxUIObject.parent_id) self.write_line_with_one_parameters(ComboBoxUIObject.Combo_box_id,"SELECT","POS",ComboBoxUIObject.item_num) @@ -253,7 +275,10 @@ class ul_Compiler: def handle_Radio_button(self,RadioButtonUIObject): - self.init_Object(RadioButtonUIObject.Radio_button_id,RadioButtonUIObject.parent_id) + if RadioButtonUIObject.parent_id == "" : + self.init_Object( RadioButtonUIObject.Radio_button_id , self.last_parent[self.parent_hierarchy_count] ) + else: + self.init_Object(RadioButtonUIObject.Radio_button_id,RadioButtonUIObject.parent_id) self.write_line_without_parameters(RadioButtonUIObject.Radio_button_id,"CLICK","tuple") @@ -261,7 +286,10 @@ class ul_Compiler: def handle_List_box(self, ListBoxUIObject): - self.init_Object(ListBoxUIObject.list_id,ListBoxUIObject.parent_id) + if ListBoxUIObject.parent_id == "" : + self.init_Object( ListBoxUIObject.list_id , self.last_parent[self.parent_hierarchy_count] ) + else: + self.init_Object(ListBoxUIObject.list_id,ListBoxUIObject.parent_id) self.write_line_with_one_parameters(ListBoxUIObject.list_id,"SELECT","POS",ListBoxUIObject.POS) @@ -269,7 +297,10 @@ class ul_Compiler: def handle_spin_field(self,SpinFieldUIObject): - self.init_Object(SpinFieldUIObject.Spin_id,SpinFieldUIObject.parent_id) + if SpinFieldUIObject.parent_id == "" : + self.init_Object( SpinFieldUIObject.Spin_id , self.last_parent[self.parent_hierarchy_count] ) + else: + self.init_Object(SpinFieldUIObject.Spin_id,SpinFieldUIObject.parent_id) if(SpinFieldUIObject.change=="Increase"): self.write_line_without_parameters(SpinFieldUIObject.Spin_id,"UP","tuple") @@ -279,7 +310,10 @@ class ul_Compiler: def handle_Edit_uiObject(self,EditUIObject): - self.init_Object(EditUIObject.action.edit_button,EditUIObject.parent_id) + if EditUIObject.parent_id == "" : + self.init_Object( EditUIObject.action.edit_button , self.last_parent[self.parent_hierarchy_count] ) + else: + self.init_Object(EditUIObject.action.edit_button,EditUIObject.parent_id) if(EditUIObject.action.__class__.__name__ =="Type_action"): diff --git a/vcl/source/uitest/logger.cxx b/vcl/source/uitest/logger.cxx index 36a6c7340add..0ecd673f9879 100644 --- a/vcl/source/uitest/logger.cxx +++ b/vcl/source/uitest/logger.cxx @@ -20,6 +20,49 @@ #include <com/sun/star/beans/PropertyValue.hpp> #include <memory> +namespace{ + +bool isDialogWindow(vcl::Window const * pWindow) +{ + WindowType nType = pWindow->GetType(); + // DIALOG to MODALDIALOG + if (nType >= WindowType::DIALOG && nType <= WindowType::MODALDIALOG) + return true; + + // MESSBOX, INFOBOX, WARNINGBOX, ERRORBOX, QUERYBOX + if (nType >= WindowType::MESSBOX && nType <= WindowType::QUERYBOX) + return true; + + if (nType == WindowType::TABDIALOG) + return true; + + return false; +} + +bool isTopWindow(vcl::Window const * pWindow) +{ + WindowType eType = pWindow->GetType(); + if (eType == WindowType::FLOATINGWINDOW) + { + return pWindow->GetStyle() & WB_SYSTEMFLOATWIN; + } + return false; +} + +vcl::Window* get_top_parent(vcl::Window* pWindow) +{ + if (isDialogWindow(pWindow) || isTopWindow(pWindow)) + return pWindow; + + vcl::Window* pParent = pWindow->GetParent(); + if (!pParent) + return pWindow; + + return get_top_parent(pParent); +} + + +} UITestLogger::UITestLogger(): maStream(), mbValid(false) @@ -216,7 +259,17 @@ void UITestLogger::logKeyInput(VclPtr<vcl::Window> const & xUIElement, const Key OUString aContent; if(pUIObject->get_type()=="EditUIObject"){ - aContent = "Type on '" + rID + "' " + aKeyCode + " from " + aParentID ; + if(aParentID=="") + { + VclPtr <vcl::Window> pParent_top = get_top_parent(xUIElement); + aParentID= pParent_top->get_id(); + } + if(aParentID==""){ + aContent = aContent+"Type on '" + rID + "' " + aKeyCode; + } + else{ + aContent = aContent+"Type on '" + rID + "' " + aKeyCode + " from " + aParentID ; + } } else if(pUIObject->get_type()=="SwEditWinUIObject" && rID=="writer_edit"){ aContent = "Type on writer " + aKeyCode ; @@ -234,7 +287,17 @@ void UITestLogger::logKeyInput(VclPtr<vcl::Window> const & xUIElement, const Key aContent = "Type on draw " + aKeyCode ; } else{ - aContent = "Type on '" + rID + "' " + aKeyCode + " from " + aParentID ; + if(aParentID=="") + { + VclPtr <vcl::Window> pParent_top = get_top_parent(xUIElement); + aParentID= pParent_top->get_id(); + } + if(aParentID==""){ + aContent = "Type on '" + rID + "' " + aKeyCode ; + } + else{ + aContent = "Type on '" + rID + "' " + aKeyCode + " from " + aParentID ; + } } maStream.WriteLine(OUStringToOString(aContent, RTL_TEXTENCODING_UTF8)); } diff --git a/vcl/source/uitest/uiobject.cxx b/vcl/source/uitest/uiobject.cxx index 1919da040f1f..d26072cd05a9 100644 --- a/vcl/source/uitest/uiobject.cxx +++ b/vcl/source/uitest/uiobject.cxx @@ -622,6 +622,10 @@ OUString ButtonUIObject::get_action(VclEventId nEvent) const return "Start database" ; } else{ + if (get_top_parent(mxButton)->get_id()==""){ + //This part because if we don't have parent + return "Click on '" + mxButton->get_id() ; + } return "Click on '" + mxButton->get_id() + "' from "+ get_top_parent(mxButton)->get_id(); } @@ -747,6 +751,14 @@ OUString EditUIObject::get_action(VclEventId nEvent) const const Selection& rSelection = mxEdit->GetSelection(); long nMin = rSelection.Min(); long nMax = rSelection.Max(); + if(get_top_parent(mxEdit)->get_id()==""){ + //This part because if we don't have parent + return "Select in '" + + mxEdit->get_id() + + "' {\"FROM\": \"" + OUString::number(nMin) + "\", \"TO\": \"" + + OUString::number(nMax) + "\"}" + ; + } return "Select in '" + mxEdit->get_id() + "' {\"FROM\": \"" + OUString::number(nMin) + "\", \"TO\": \"" + @@ -868,6 +880,10 @@ OUString CheckBoxUIObject::get_action(VclEventId nEvent) const { if (nEvent == VclEventId::CheckboxToggle) { + if(get_top_parent(mxCheckBox)->get_id()==""){ + //This part because if we don't have parent + return "Toggle '" + mxCheckBox->get_id() + "' CheckBox"; + } return "Toggle '" + mxCheckBox->get_id() + "' CheckBox from " + get_top_parent(mxCheckBox)->get_id(); } @@ -918,6 +934,10 @@ OUString RadioButtonUIObject::get_action(VclEventId nEvent) const { if (nEvent == VclEventId::RadiobuttonToggle) { + if(get_top_parent(mxRadioButton)->get_id()==""){ + //This part because if we don't have parent + return "Select '" + mxRadioButton->get_id() + "' RadioButton"; + } return "Select '" + mxRadioButton->get_id() + "' RadioButton from " + get_top_parent(mxRadioButton)->get_id(); } @@ -1024,11 +1044,21 @@ OUString ListBoxUIObject::get_action(VclEventId nEvent) const if (nEvent == VclEventId::ListboxSelect) { sal_Int32 nPos = mxListBox->GetSelectedEntryPos(); + if(get_top_parent(mxListBox)->get_id()==""){ + //This part because if we don't have parent + return "Select element with position " + OUString::number(nPos) + + " in '" + mxListBox->get_id(); + } return "Select element with position " + OUString::number(nPos) + " in '" + mxListBox->get_id() +"' from" + get_top_parent(mxListBox)->get_id() ; } else if (nEvent == VclEventId::ListboxFocus) { + if(get_top_parent(mxListBox)->get_id()=="") + { + //This part because if we don't have parent + return this->get_type() + " Action:FOCUS Id:" + mxListBox->get_id(); + } return this->get_type() + " Action:FOCUS Id:" + mxListBox->get_id() + " Parent:" + get_top_parent(mxListBox)->get_id(); } @@ -1099,6 +1129,11 @@ OUString ComboBoxUIObject::get_action(VclEventId nEvent) const if (nEvent == VclEventId::ComboboxSelect) { sal_Int32 nPos = mxComboBox->GetSelectedEntryPos(); + if (get_top_parent(mxComboBox)->get_id()==""){ + //This part because if we don't have parent + return "Select in '" + mxComboBox->get_id() + + "' ComboBox item number " + OUString::number(nPos); + } return "Select in '" + mxComboBox->get_id() + "' ComboBox item number " + OUString::number(nPos) + " from " + get_top_parent(mxComboBox)->get_id(); @@ -1214,11 +1249,21 @@ OUString SpinFieldUIObject::get_action(VclEventId nEvent) const { if (nEvent == VclEventId::SpinfieldUp) { + if(get_top_parent(mxSpinField)->get_id()=="") + { + //This part because if we don't have parent + return "Increase '" + mxSpinField->get_id(); + } return "Increase '" + mxSpinField->get_id() + "' from " + get_top_parent(mxSpinField)->get_id(); } else if (nEvent == VclEventId::SpinfieldDown) { + if(get_top_parent(mxSpinField)->get_id()=="") + { + //This part because if we don't have parent + return "Decrease '" + mxSpinField->get_id(); + } return "Decrease '" + mxSpinField->get_id() + "' from " + get_top_parent(mxSpinField)->get_id(); } @@ -1282,6 +1327,12 @@ OUString TabControlUIObject::get_action(VclEventId nEvent) const if (nEvent == VclEventId::TabpageActivate) { sal_Int32 nPageId = mxTabControl->GetCurPageId(); + + if(get_top_parent(mxTabControl)->get_id()==""){ + //This part because if we don't have parent + return "Choose Tab number " + OUString::number(mxTabControl->GetPagePos(nPageId)) + + " in '" + mxTabControl->get_id(); + } return "Choose Tab number " + OUString::number(mxTabControl->GetPagePos(nPageId)) + " in '" + mxTabControl->get_id()+ "' from " + get_top_parent(mxTabControl)->get_id() ; commit 99bedce928c33e8cb607f1d3f3c09feebaeb3c6b Author: Ahmed ElShreif <aelshre...@gmail.com> AuthorDate: Sun Aug 4 13:42:09 2019 -0500 Commit: Markus Mohrhard <markus.mohrh...@googlemail.com> CommitDate: Mon Aug 19 22:56:39 2019 +0800 uitest: log more events in Calc: 1) Rename Tab 2) Insert Tab Change-Id: I7a653a4b274c0c8058672c5b0aa1645bb5a51e3a diff --git a/sc/source/core/data/document.cxx b/sc/source/core/data/document.cxx index 3a65ae04aad7..fd996eb3d4cb 100644 --- a/sc/source/core/data/document.cxx +++ b/sc/source/core/data/document.cxx @@ -94,6 +94,9 @@ #include <comphelper/lok.hxx> #include <LibreOfficeKit/LibreOfficeKitEnums.h> +#include <vcl/uitest/logger.hxx> +#include <vcl/uitest/eventdescription.hxx> + #include <mtvelements.hxx> using ::editeng::SvxBorderLine; @@ -106,6 +109,21 @@ using ::std::set; namespace { +void collectUIInformation(const std::map<OUString, OUString>& aParameters,const OUString action) +{ + EventDescription aDescription; + aDescription.aID = "grid_window"; + aDescription.aAction = action; + aDescription.aParameters = aParameters; + aDescription.aParent = "MainWindow"; + aDescription.aKeyWord = "ScGridWinUIObject"; + + UITestLogger::getInstance().logEvent(aDescription); +} +} + +namespace { + std::pair<SCTAB,SCTAB> getMarkedTableRange(const std::vector<ScTableUniquePtr>& rTables, const ScMarkData& rMark) { SCTAB nTabStart = MAXTAB; @@ -895,6 +913,7 @@ bool ScDocument::RenameTab( SCTAB nTab, const OUString& rName, bool bExternalDoc } } } + collectUIInformation({{"NewName",rName}},"Rename_Sheet"); return bValid; } diff --git a/sc/source/ui/view/viewdata.cxx b/sc/source/ui/view/viewdata.cxx index a87dc2dd3ed8..56865508373a 100644 --- a/sc/source/ui/view/viewdata.cxx +++ b/sc/source/ui/view/viewdata.cxx @@ -60,6 +60,9 @@ #include <comphelper/processfactory.hxx> #include <comphelper/string.hxx> +#include <vcl/uitest/logger.hxx> +#include <vcl/uitest/eventdescription.hxx> + #include <com/sun/star/container/XNameContainer.hpp> #include <com/sun/star/document/NamedPropertyValues.hpp> @@ -86,6 +89,21 @@ void lcl_LOKRemoveWindow(ScTabViewShell* pTabViewShell, ScSplitPos eWhich) } // anonymous namespace +namespace { + +void collectUIInformation(const std::map<OUString, OUString>& aParameters,const OUString action) +{ + EventDescription aDescription; + aDescription.aID = "grid_window"; + aDescription.aAction = action; + aDescription.aParameters = aParameters; + aDescription.aParent = "MainWindow"; + aDescription.aKeyWord = "ScGridWinUIObject"; + + UITestLogger::getInstance().logEvent(aDescription); +} +} + const ScPositionHelper::index_type ScPositionHelper::null; // definition bool ScPositionHelper::Comp::operator() (const value_type& rValue1, const value_type& rValue2) const @@ -839,6 +857,7 @@ void ScViewData::InsertTab( SCTAB nTab ) UpdateCurrentTab(); mpMarkData->InsertTab( nTab ); + collectUIInformation({{}},"InsertTab"); } void ScViewData::InsertTabs( SCTAB nTab, SCTAB nNewSheets ) diff --git a/uitest/ui_logger_dsl/Special_commands.tx b/uitest/ui_logger_dsl/Special_commands.tx index 335b6d24e7d3..a4bf1a697504 100644 --- a/uitest/ui_logger_dsl/Special_commands.tx +++ b/uitest/ui_logger_dsl/Special_commands.tx @@ -74,7 +74,8 @@ writer_Insert_BreakPage: calc_command: calc_Type_command | calc_switch_sheet | calc_Select_cell | calc_AutoFill_filter | calc_Delete_Cells | calc_Remove_Content | calc_insert_cells | calc_Cut_Cells | - calc_Copy_Cells | calc_Paste_Cells | calc_UNMerge_Cells | calc_Merge_Cells + calc_Copy_Cells | calc_Paste_Cells | calc_UNMerge_Cells | calc_Merge_Cells | + calc_Rename_Sheet | calc_Insert_sheet ; calc_Type_command: 'Type on current cell' what_to_type=Type_options @@ -118,6 +119,12 @@ calc_Merge_Cells: calc_UNMerge_Cells: 'Delete the merge between' '{' '"CELL":' input_range=STRING '}' ; +calc_Rename_Sheet: + 'Rename The Selected Tab to ' new_name=STRING +; +calc_Insert_sheet: + 'Insert New Tab ' +; //this is the select options select_options: one_cell | range_of_cells diff --git a/uitest/ui_logger_dsl/dsl_core.py b/uitest/ui_logger_dsl/dsl_core.py index 1eaa33a441cd..827f2ca45b20 100644 --- a/uitest/ui_logger_dsl/dsl_core.py +++ b/uitest/ui_logger_dsl/dsl_core.py @@ -101,6 +101,8 @@ class ul_Compiler: 'calc_Copy_Cells':self.do_nothing, 'calc_Merge_Cells':self.do_nothing, 'calc_UNMerge_Cells':self.do_nothing, + 'calc_Rename_Sheet':self.do_nothing, + 'calc_Insert_sheet':self.do_nothing, 'impress_Insert_Slide':self.do_nothing, 'impress_Delete_Page':self.do_nothing, 'impress_Duplicate_Slide':self.do_nothing, diff --git a/vcl/source/uitest/logger.cxx b/vcl/source/uitest/logger.cxx index 502c0a9f0244..36a6c7340add 100644 --- a/vcl/source/uitest/logger.cxx +++ b/vcl/source/uitest/logger.cxx @@ -369,6 +369,13 @@ void UITestLogger::logEvent(const EventDescription& rDescription) else if(rDescription.aAction=="UNMERGE_CELL"){ aLogLine = "Delete the merged " + aParameterString; } + else if(rDescription.aAction=="Rename_Sheet"){ + aLogLine = "Rename The Selected Tab to \""+\ + GetValueInMapWithIndex(rDescription.aParameters,0)+"\""; + } + else if(rDescription.aAction=="InsertTab"){ + aLogLine = "Insert New Tab "; + } } else if(rDescription.aID=="impress_win_or_draw_win"){ if(rDescription.aAction=="Insert_New_Page_or_Slide"){ commit d13252673b05942194971f83f6612c45848901fd Author: Ahmed ElShreif <aelshre...@gmail.com> AuthorDate: Sat Aug 3 11:51:11 2019 -0500 Commit: Markus Mohrhard <markus.mohrh...@googlemail.com> CommitDate: Mon Aug 19 22:56:38 2019 +0800 uitest: log more events Impress: 1) Delete Slide 2) Duplicate Slide 3) Rename Slide Draw: 1) Delte Page 2) Rename Page Change-Id: I124bdf96c58dfe00bdb039c5e93afc0dc6e7163d diff --git a/sd/source/ui/slidesorter/controller/SlsSlotManager.cxx b/sd/source/ui/slidesorter/controller/SlsSlotManager.cxx index adcc0da4ad82..a97ccb7d0588 100644 --- a/sd/source/ui/slidesorter/controller/SlsSlotManager.cxx +++ b/sd/source/ui/slidesorter/controller/SlsSlotManager.cxx @@ -113,11 +113,11 @@ SlideExclusionState GetSlideExclusionState (model::PageEnumeration& rPageSet); namespace { -void collectUIInformation(const OUString& num,const OUString& action) +void collectUIInformation(const std::map<OUString, OUString>& aParameters,const OUString& action) { EventDescription aDescription; aDescription.aID = "impress_win_or_draw_win"; - aDescription.aParameters = {{"POS", num}}; + aDescription.aParameters = aParameters; aDescription.aAction = action; aDescription.aKeyWord = "ImpressWindowUIObject"; aDescription.aParent = "MainWindow"; @@ -918,6 +918,8 @@ void SlotManager::RenameSlide(const SfxRequest& rRequest) ... etc. - the rest is truncated _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits