File: select.hpp

package info (click to toggle)
sight 25.2.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 42,180 kB
  • sloc: cpp: 289,476; xml: 17,257; ansic: 9,878; python: 1,379; sh: 144; makefile: 33
file content (160 lines) | stat: -rw-r--r-- 4,577 bytes parent folder | download | duplicates (2)
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
151
152
153
154
155
156
157
158
159
160
/************************************************************************
 *
 * Copyright (C) 2023-2024 IRCAD France
 *
 * This file is part of Sight.
 *
 * Sight is free software: you can redistribute it and/or modify it under
 * the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * Sight is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with Sight. If not, see <https://www.gnu.org/licenses/>.
 *
 ***********************************************************************/

#pragma once

#include <sight/ui/test/config.hpp>

#include <ui/test/tester.hpp>

#include <string>
#include <variant>

namespace sight::ui::test::helper
{

class selector
{
public:

    enum class type
    {
        from_main,
        from_dialog,
        from_parent,
        from_current,
        current,
        dialog
    };

    using Data = std::variant<std::string, std::pair<std::string, std::string> >;

    /**
     * Implicit constructor from a string. Equivalent to selector::fromMain. @see fromMain
     *
     * @param _object_name The objectName of the object to be selected
     *
     * @{
     */
    SIGHT_UI_TEST_API selector(const char* _object_name);
    SIGHT_UI_TEST_API selector(const std::string& _object_name);
    /// @}

    /**
     * Create a selector to select an object from the main window.
     *
     * @param _object_name The objectName of the object to be selected
     */
    SIGHT_UI_TEST_API static selector from_main(const std::string& _object_name);

    /**
     * Create a selector to select an object from the current dialog window.
     *
     * @param _object_name The objectName of the object to be selected
     */
    SIGHT_UI_TEST_API static selector from_dialog(const std::string& _object_name);

    /**
     * Create a selector to select an object via its parent.
     *
     * @param _parent_name The objectName of the parent of the object to be selected
     * @param _child_name The objectName of the object to be selected
     */
    SIGHT_UI_TEST_API static selector from_parent(const std::string& _parent_name, const std::string& _child_name);

    /**
     * Create a selector to select an object via the current graphic component.
     *
     * @param _object_name The objectName of the object to be selected
     */
    SIGHT_UI_TEST_API static selector from_current(const std::string& _object_name);

    /**
     * Create a selector to select the current component graphic component.
     */
    SIGHT_UI_TEST_API static selector current();

    /**
     * Create a selector to select the current dialog window.
     */
    SIGHT_UI_TEST_API static selector dialog();

    /**
     * Sets the timeout associated with the selection.
     *
     * @param _timeout Timeout in milliseconds
     *
     * @returns A copy of this
     */
    SIGHT_UI_TEST_API selector with_timeout(int _timeout) const;

    /**
     * Adds a new condition for the object to meet
     *
     * @param _condition A condition for the object to meet
     *
     * @returns A copy of this
     */
    SIGHT_UI_TEST_API selector with_condition(std::function<bool(QObject*)> _condition) const;

    /**
     * selects the desired object.
     *
     * @param _tester The current tester
     *
     * @post The current tester's current graphic component is the desired object if it was found.
     */
    SIGHT_UI_TEST_API void select(tester& _tester) const;

    /**
     * Returns the description of the object
     *
     * @param _tester The current tester
     *
     * @returns The description of the object
     */
    SIGHT_UI_TEST_API std::string get_description(const tester& _tester) const;

    //------------------------------------------------------------------------------

    SIGHT_UI_TEST_API enum type type() const
    {
        return m_type;
    }

    //------------------------------------------------------------------------------

    SIGHT_UI_TEST_API Data data() const
    {
        return m_data;
    }

private:

    selector(enum type _type, Data _data);

    enum type m_type;
    Data m_data;
    int m_timeout = tester::DEFAULT_TIMEOUT;
    std::vector<std::function<bool(QObject*)> > m_conditions;
};

} // namespace sight::ui