[Libreoffice-commits] core.git: Branch 'feature/dialog-screenshots' - reportdesign/CppunitTest_reportdesign_dialogs_test.mk reportdesign/Module_reportdesign.mk reportdesign/qa

Armin Le Grand Armin.Le.Grand at cib.de
Fri Jul 22 14:46:57 UTC 2016


 reportdesign/CppunitTest_reportdesign_dialogs_test.mk   |   67 +++++++
 reportdesign/Module_reportdesign.mk                     |    4 
 reportdesign/qa/unit/data/reportdesign-dialogs-test.txt |   51 +++++
 reportdesign/qa/unit/reportdesign-dialogs-test.cxx      |  150 ++++++++++++++++
 4 files changed, 272 insertions(+)

New commits:
commit 62a68fc01f2d61e992df3a52a6f0aad6c4cdc68d
Author: Armin Le Grand <Armin.Le.Grand at cib.de>
Date:   Fri Jul 22 16:44:22 2016 +0200

    Added dialog screenshot test case for reportdesign
    
    One patterend dialog does not work what means all based on this one
    do not work, need to be instantziated real probably
    
    Change-Id: I8d82e0dbf937bb4c052486da21ada58afe7f5a08

diff --git a/reportdesign/CppunitTest_reportdesign_dialogs_test.mk b/reportdesign/CppunitTest_reportdesign_dialogs_test.mk
new file mode 100644
index 0000000..07d56585
--- /dev/null
+++ b/reportdesign/CppunitTest_reportdesign_dialogs_test.mk
@@ -0,0 +1,67 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+#*************************************************************************
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+#*************************************************************************
+
+$(eval $(call gb_CppunitTest_CppunitTest,reportdesign_dialogs_test))
+
+$(eval $(call gb_CppunitTest_add_exception_objects,reportdesign_dialogs_test, \
+    reportdesign/qa/unit/reportdesign-dialogs-test \
+))
+
+$(eval $(call gb_CppunitTest_use_sdk_api,reportdesign_dialogs_test))
+
+$(eval $(call gb_CppunitTest_set_include,desktop_dialogs_test,\
+    -I$(SRCDIR)/reportdesign/source/inc \
+    -I$(SRCDIR)/reportdesign/inc \
+    $$(INCLUDE) \
+))
+
+$(eval $(call gb_CppunitTest_use_libraries,reportdesign_dialogs_test, \
+    basegfx \
+    comphelper \
+    cppu \
+    cppuhelper \
+    drawinglayer \
+    editeng \
+    i18nlangtag \
+    i18nutil \
+    msfilter \
+    oox \
+    sal \
+    salhelper \
+    sax \
+    sfx \
+    sot \
+    svl \
+    svt \
+    test \
+    tl \
+    tk \
+    ucbhelper \
+    unotest \
+    utl \
+    vcl \
+    xo \
+    $(gb_UWINAPI) \
+))
+
+$(eval $(call gb_CppunitTest_use_external,reportdesign_dialogs_test,boost_headers))
+
+$(eval $(call gb_CppunitTest_use_sdk_api,reportdesign_dialogs_test))
+
+$(eval $(call gb_CppunitTest_use_ure,reportdesign_dialogs_test))
+$(eval $(call gb_CppunitTest_use_vcl_non_headless_with_windows,reportdesign_dialogs_test))
+
+$(eval $(call gb_CppunitTest_use_rdb,reportdesign_dialogs_test,services))
+
+# $(eval $(call gb_CppunitTest_use_configuration,reportdesign_dialogs_test))
+$(eval $(call gb_CppunitTest_use_instdir_configuration,reportdesign_dialogs_test))
+
+# vim: set noet sw=4 ts=4:
diff --git a/reportdesign/Module_reportdesign.mk b/reportdesign/Module_reportdesign.mk
index bba86b9..a06efb0 100644
--- a/reportdesign/Module_reportdesign.mk
+++ b/reportdesign/Module_reportdesign.mk
@@ -27,4 +27,8 @@ $(eval $(call gb_Module_add_l10n_targets,reportdesign,\
 	JunitTest_reportdesign_complex \
 ))
 
+$(eval $(call gb_Module_add_slowcheck_targets,reportdesign,\
+    CppunitTest_reportdesign_dialogs_test \
+))
+
 # vim: set noet sw=4 ts=4:
diff --git a/reportdesign/qa/unit/data/reportdesign-dialogs-test.txt b/reportdesign/qa/unit/data/reportdesign-dialogs-test.txt
new file mode 100644
index 0000000..d56f389
--- /dev/null
+++ b/reportdesign/qa/unit/data/reportdesign-dialogs-test.txt
@@ -0,0 +1,51 @@
+# -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+
+# This file contains all dialogs that the unit tests in the module
+# will work on if it is in script mode. It will read one-by-one,
+# try to open it and create a screenshot that will be saved in
+# workdir/screenshots using the pattern of the ui-file name.
+#
+# Syntax:
+# - emty lines are allowed
+# - lines starting with '#' are treated as comment
+# - all other lines should contain a *.ui filename in the same
+#   notation as in the dialog constructors (see code)
+
+#
+# The 'known' dialogs which have a hard-coded representation
+# in registerKnownDialogsByID/createDialogByID
+#
+
+# No known dialogs in reportdesign for now
+
+#
+# Dialogs without a hard-coded representation. These will
+# be visualized using a fallback based on VclBuilder
+#
+
+# currently deactivated, leads to problems and the test to not work
+# This is typically a hint that these should be hard-coded in the
+# test case since they need some document and model data to work
+# all these are pretty much a single one based on modules/dbreport/ui/_.ui
+# with _ being the listed entries - probably all work when base dialog works
+# modules/dbreport/ui/background.ui
+# modules/dbreport/ui/page.ui
+# modules/dbreport/ui/font.ui
+# modules/dbreport/ui/fonteffects.ui
+# modules/dbreport/ui/position.ui
+# modules/dbreport/ui/asianlayout.ui
+# modules/dbreport/ui/alignment.ui
+
+modules/dbreport/ui/condformatdialog.ui
+modules/dbreport/ui/datetimedialog.ui
+modules/dbreport/ui/pagenumberdialog.ui
+modules/dbreport/ui/floatingsort.ui
+modules/dbreport/ui/floatingnavigator.ui
+modules/dbreport/ui/conditionwin.ui
diff --git a/reportdesign/qa/unit/reportdesign-dialogs-test.cxx b/reportdesign/qa/unit/reportdesign-dialogs-test.cxx
new file mode 100644
index 0000000..ac59b80
--- /dev/null
+++ b/reportdesign/qa/unit/reportdesign-dialogs-test.cxx
@@ -0,0 +1,150 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <sal/config.h>
+#include <test/screenshot_test.hxx>
+#include <rtl/strbuf.hxx>
+#include <osl/file.hxx>
+#include <sfx2/app.hxx>
+#include <vcl/abstdlg.hxx>
+
+using namespace ::com::sun::star;
+
+/// Test opening a dialog in reportdesign
+class ReportdesignDialogsTest : public ScreenshotTest
+{
+private:
+    /// helper method to populate KnownDialogs, called in setUp(). Needs to be
+    /// written and has to add entries to KnownDialogs
+    virtual void registerKnownDialogsByID(mapType& rKnownDialogs) override;
+
+    /// dialog creation for known dialogs by ID. Has to be implemented for
+    /// each registered known dialog
+    virtual VclAbstractDialog* createDialogByID(sal_uInt32 nID) override;
+
+public:
+    ReportdesignDialogsTest();
+    virtual ~ReportdesignDialogsTest();
+
+    virtual void setUp() override;
+
+    // try to open a dialog
+    void openAnyDialog();
+
+    CPPUNIT_TEST_SUITE(ReportdesignDialogsTest);
+    CPPUNIT_TEST(openAnyDialog);
+    CPPUNIT_TEST_SUITE_END();
+};
+
+ReportdesignDialogsTest::ReportdesignDialogsTest()
+{
+}
+
+ReportdesignDialogsTest::~ReportdesignDialogsTest()
+{
+}
+
+void ReportdesignDialogsTest::setUp()
+{
+    ScreenshotTest::setUp();
+}
+
+void ReportdesignDialogsTest::registerKnownDialogsByID(mapType& /*rKnownDialogs*/)
+{
+    // fill map of known dilogs
+}
+
+VclAbstractDialog* ReportdesignDialogsTest::createDialogByID(sal_uInt32 /*nID*/)
+{
+    return nullptr;
+}
+
+void ReportdesignDialogsTest::openAnyDialog()
+{
+    /// example how to process an input file containing the UXMLDescriptions of the dialogs
+    /// to dump
+    if (true)
+    {
+        test::Directories aDirectories;
+        OUString aURL = aDirectories.getURLFromSrc("reportdesign/qa/unit/data/reportdesign-dialogs-test.txt");
+        SvFileStream aStream(aURL, StreamMode::READ);
+        OString aNextUIFile;
+        const OString aComment("#");
+
+        while (aStream.ReadLine(aNextUIFile))
+        {
+            if (!aNextUIFile.isEmpty() && !aNextUIFile.startsWith(aComment))
+            {
+                // first check if it's a known dialog
+                std::unique_ptr<VclAbstractDialog> pDlg(createDialogByName(aNextUIFile));
+
+                if (pDlg)
+                {
+                    // known dialog, dump screenshot to path
+                    dumpDialogToPath(*pDlg);
+                }
+                else
+                {
+                    // unknown dialog, try fallback to generic created
+                    // VclBuilder-generated instance. Keep in mind that Dialogs
+                    // using this mechanism will probably not be layouted well
+                    // since the setup/initialization part is missing. Thus,
+                    // only use for fallback when only the UI file is available.
+                    dumpDialogToPath(aNextUIFile);
+                }
+            }
+        }
+    }
+
+    /// example how to dump all known dialogs
+    if (false)
+    {
+        // example for SfxTabDialog: 5 -> "modules/sdraw/ui/drawpagedialog.ui"
+        // example for TabDialog: 22 -> "modules/simpress/ui/headerfooterdialog.ui"
+        // example for self-adapted wizard: 0 -> "modules/simpress/ui/publishingdialog.ui"
+        for (mapType::const_iterator i = getKnownDialogs().begin(); i != getKnownDialogs().end(); i++)
+        {
+            std::unique_ptr<VclAbstractDialog> pDlg(createDialogByID((*i).second));
+
+            if (pDlg)
+            {
+                // known dialog, dump screenshot to path
+                dumpDialogToPath(*pDlg);
+            }
+            else
+            {
+                // unknown dialog, should not happen in this basic loop.
+                // You have probably forgotten to add a case and
+                // implementastion to createDialogByID, please do this
+            }
+        }
+    }
+
+    /// example how to dump a dialog using fallback functionality
+    if (false)
+    {
+        // unknown dialog, try fallback to generic created
+        // VclBuilder-generated instance. Keep in mind that Dialogs
+        // using this mechanism will probably not be layouted well
+        // since the setup/initialization part is missing. Thus,
+        // only use for fallback when only the UI file is available.
+        //
+        // Take any example here, it's only for demonstration - using
+        // even a known one to demonstrate the fallback possibility
+        const OString aUIXMLDescription("modules/dbreport/ui/background.ui");
+
+        dumpDialogToPath(aUIXMLDescription);
+    }
+}
+
+CPPUNIT_TEST_SUITE_REGISTRATION(ReportdesignDialogsTest);
+
+CPPUNIT_PLUGIN_IMPLEMENT();
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */


More information about the Libreoffice-commits mailing list