Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qtest_gui.h
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#ifndef QTEST_GUI_H
5#define QTEST_GUI_H
6
7// enable GUI features
8#ifndef QT_GUI_LIB
9#define QT_GUI_LIB
10#endif
11#if 0
12#pragma qt_class(QtTestGui)
13#endif
14
15#include <QtTest/qtestassert.h>
16#include <QtTest/qtest.h>
17#include <QtTest/qtestevent.h>
18#include <QtTest/qtestmouse.h>
19#include <QtTest/qtesttouch.h>
20#include <QtTest/qtestwheel.h>
21#include <QtTest/qtestkeyboard.h>
22
23#include <QtGui/qcolor.h>
24#include <QtGui/qpixmap.h>
25#include <QtGui/qimage.h>
26#if QT_CONFIG(shortcut)
27#include <QtGui/qkeysequence.h>
28#endif
29#include <QtGui/qregion.h>
30#include <QtGui/qvector2d.h>
31#include <QtGui/qvector3d.h>
32#include <QtGui/qvector4d.h>
33#include <QtGui/qicon.h>
34
35#include <cstdio>
36
37#if 0
38// inform syncqt
39#pragma qt_no_master_include
40#endif
41
42QT_BEGIN_NAMESPACE
43
44
45namespace QTest
46{
47
48template<> inline char *toString(const QColor &color)
49{
50 return qstrdup(color.name(QColor::HexArgb).toLocal8Bit().constData());
51}
52
53template<> inline char *toString(const QRegion &region)
54{
55 QByteArray result = "QRegion(";
56 if (region.isNull()) {
57 result += "null";
58 } else if (region.isEmpty()) {
59 result += "empty";
60 } else {
61 const auto rects = region.begin();
62 const int rectCount = region.rectCount();
63 if (rectCount > 1) {
64 result += QByteArray::number(rectCount);
65 result += " rectangles, ";
66 }
67 for (int i = 0; i < rectCount; ++i) {
68 if (i)
69 result += ", ";
70 const QRect &r = rects[i];
71 result += QByteArray::number(r.width());
72 result += 'x';
73 result += QByteArray::number(r.height());
74 if (r.x() >= 0)
75 result += '+';
76 result += QByteArray::number(r.x());
77 if (r.y() >= 0)
78 result += '+';
79 result += QByteArray::number(r.y());
80 }
81 }
82 result += ')';
83 return qstrdup(result.constData());
84}
85
86#if !defined(QT_NO_VECTOR2D) || defined(Q_QDOC)
87template<> inline char *toString(const QVector2D &v)
88{
89 QByteArray result = "QVector2D(" + QByteArray::number(double(v.x())) + ", "
90 + QByteArray::number(double(v.y())) + ')';
91 return qstrdup(result.constData());
92}
93#endif // !QT_NO_VECTOR2D
94#if !defined(QT_NO_VECTOR3D) || defined(Q_QDOC)
95template<> inline char *toString(const QVector3D &v)
96{
97 QByteArray result = "QVector3D(" + QByteArray::number(double(v.x())) + ", "
98 + QByteArray::number(double(v.y())) + ", " + QByteArray::number(double(v.z())) + ')';
99 return qstrdup(result.constData());
100}
101#endif // !QT_NO_VECTOR3D
102#if !defined(QT_NO_VECTOR4D) || defined(Q_QDOC)
103template<> inline char *toString(const QVector4D &v)
104{
105 QByteArray result = "QVector4D(" + QByteArray::number(double(v.x())) + ", "
106 + QByteArray::number(double(v.y())) + ", " + QByteArray::number(double(v.z()))
107 + ", " + QByteArray::number(double(v.w())) + ')';
108 return qstrdup(result.constData());
109}
110#endif // !QT_NO_VECTOR4D
111
112#if QT_CONFIG(shortcut)
113template<> inline char *toString(const QKeySequence &keySequence)
114{
115 return toString(keySequence.toString());
116}
117#endif
118
119inline bool qCompare(QIcon const &t1, QIcon const &t2, const char *actual, const char *expected,
120 const char *file, int line)
121{
122 QTEST_ASSERT(sizeof(QIcon) == sizeof(void *));
123 return qCompare(*reinterpret_cast<void * const *>(&t1),
124 *reinterpret_cast<void * const *>(&t2), actual, expected, file, line);
125}
126
127inline bool qCompare(QImage const &t1, QImage const &t2,
128 const char *actual, const char *expected, const char *file, int line)
129{
130 char msg[1024];
131 msg[0] = '\0';
132 const bool t1Null = t1.isNull();
133 const bool t2Null = t2.isNull();
134 if (t1Null != t2Null) {
135 std::snprintf(msg, 1024, "Compared QImages differ.\n"
136 " Actual (%s).isNull(): %d\n"
137 " Expected (%s).isNull(): %d", actual, t1Null, expected, t2Null);
138 return compare_helper(false, msg, actual, expected, file, line);
139 }
140 if (t1Null && t2Null)
141 return compare_helper(true, nullptr, actual, expected, file, line);
142 if (!qFuzzyCompare(t1.devicePixelRatio(), t2.devicePixelRatio())) {
143 std::snprintf(msg, 1024, "Compared QImages differ in device pixel ratio.\n"
144 " Actual (%s): %g\n"
145 " Expected (%s): %g",
146 actual, t1.devicePixelRatio(),
147 expected, t2.devicePixelRatio());
148 return compare_helper(false, msg, actual, expected, file, line);
149 }
150 if (t1.width() != t2.width() || t1.height() != t2.height()) {
151 std::snprintf(msg, 1024, "Compared QImages differ in size.\n"
152 " Actual (%s): %dx%d\n"
153 " Expected (%s): %dx%d",
154 actual, t1.width(), t1.height(),
155 expected, t2.width(), t2.height());
156 return compare_helper(false, msg, actual, expected, file, line);
157 }
158 if (t1.format() != t2.format()) {
159 std::snprintf(msg, 1024, "Compared QImages differ in format.\n"
160 " Actual (%s): %d\n"
161 " Expected (%s): %d",
162 actual, t1.format(), expected, t2.format());
163 return compare_helper(false, msg, actual, expected, file, line);
164 }
165 return compare_helper(t1 == t2, "Compared values are not the same",
166 actual, expected, file, line);
167}
168
169inline bool qCompare(QPixmap const &t1, QPixmap const &t2, const char *actual, const char *expected,
170 const char *file, int line)
171{
172 char msg[1024];
173 msg[0] = '\0';
174 const bool t1Null = t1.isNull();
175 const bool t2Null = t2.isNull();
176 if (t1Null != t2Null) {
177 std::snprintf(msg, 1024, "Compared QPixmaps differ.\n"
178 " Actual (%s).isNull(): %d\n"
179 " Expected (%s).isNull(): %d", actual, t1Null, expected, t2Null);
180 return compare_helper(false, msg, actual, expected, file, line);
181 }
182 if (t1Null && t2Null)
183 return compare_helper(true, nullptr, actual, expected, file, line);
184 if (!qFuzzyCompare(t1.devicePixelRatio(), t2.devicePixelRatio())) {
185 std::snprintf(msg, 1024, "Compared QPixmaps differ in device pixel ratio.\n"
186 " Actual (%s): %g\n"
187 " Expected (%s): %g",
188 actual, t1.devicePixelRatio(),
189 expected, t2.devicePixelRatio());
190 return compare_helper(false, msg, actual, expected, file, line);
191 }
192 if (t1.width() != t2.width() || t1.height() != t2.height()) {
193 std::snprintf(msg, 1024, "Compared QPixmaps differ in size.\n"
194 " Actual (%s): %dx%d\n"
195 " Expected (%s): %dx%d",
196 actual, t1.width(), t1.height(),
197 expected, t2.width(), t2.height());
198 return compare_helper(false, msg, actual, expected, file, line);
199 }
200 return qCompare(t1.toImage(), t2.toImage(), actual, expected, file, line);
201}
202
203}
204
205QT_END_NAMESPACE
206
207#endif
char * toString(const MyPoint &point)
bool qCompare(QString const &t1, QLatin1StringView const &t2, const char *actual, const char *expected, const char *file, int line)
Definition qtest.h:32