summaryrefslogtreecommitdiff
path: root/vcl/qa/unit/vcl-dialogs-test.cxx
blob: 914c52db550fd607b0b06739a92a6ab0a14d4a0f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
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 vcl
class VclDialogsTest : 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:
    VclDialogsTest();
    virtual ~VclDialogsTest();

    virtual void setUp() override;

    // try to open a dialog
    void openAnyDialog();

    CPPUNIT_TEST_SUITE(VclDialogsTest);
    CPPUNIT_TEST(openAnyDialog);
    CPPUNIT_TEST_SUITE_END();
};

VclDialogsTest::VclDialogsTest()
{
}

VclDialogsTest::~VclDialogsTest()
{
}

void VclDialogsTest::setUp()
{
    ScreenshotTest::setUp();
}

void VclDialogsTest::registerKnownDialogsByID(mapType& /*rKnownDialogs*/)
{
    // fill map of known dilogs
}

VclAbstractDialog* VclDialogsTest::createDialogByID(sal_uInt32 /*nID*/)
{
    return nullptr;
}

void VclDialogsTest::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("vcl/qa/unit/data/vcl-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("vcl/ui/printerpropertiesdialog.ui");

        dumpDialogToPath(aUIXMLDescription);
    }
}

CPPUNIT_TEST_SUITE_REGISTRATION(VclDialogsTest);

CPPUNIT_PLUGIN_IMPLEMENT();

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */