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
|
// Copyright (C) 2020 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include <QtTest/qtest.h>
#include <QtTest/qsignalspy.h>
#include <QtGui/qpa/qwindowsysteminterface.h>
#include <QtQuickTestUtils/private/qmlutils_p.h>
#include <QtQuickTestUtils/private/visualtestutils_p.h>
#include <QtQuickTemplates2/private/qquickbutton_p.h>
#include <QtQuickControlsTestUtils/private/qtest_quickcontrols_p.h>
#include <QtQuick/private/qquicktext_p_p.h>
using namespace QQuickVisualTestUtils;
class tst_QQuickControl : public QQmlDataTest
{
Q_OBJECT
public:
tst_QQuickControl();
private slots:
void initTestCase() override;
void flickable();
void fractionalFontSize();
void resizeBackgroundKeepsBindings();
private:
QScopedPointer<QPointingDevice> touchDevice;
};
tst_QQuickControl::tst_QQuickControl()
: QQmlDataTest(QT_QMLTEST_DATADIR)
{
}
void tst_QQuickControl::initTestCase()
{
QQmlDataTest::initTestCase();
qputenv("QML_NO_TOUCH_COMPRESSION", "1");
touchDevice.reset(QTest::createTouchDevice());
}
void tst_QQuickControl::flickable()
{
// Check that when a Button that is inside a Flickable with a pressDelay
// still gets the released and clicked signals sent due to the fact that
// Flickable sends a mouse event for the delay and not a touch event
QQuickApplicationHelper helper(this, QStringLiteral("flickable.qml"));
QQuickWindow *window = helper.window;
window->show();
QVERIFY(QTest::qWaitForWindowExposed(window));
QQuickButton *button = window->property("button").value<QQuickButton *>();
QVERIFY(button);
QSignalSpy buttonPressedSpy(button, SIGNAL(pressed()));
QVERIFY(buttonPressedSpy.isValid());
QSignalSpy buttonReleasedSpy(button, SIGNAL(released()));
QVERIFY(buttonReleasedSpy.isValid());
QSignalSpy buttonClickedSpy(button, SIGNAL(clicked()));
QVERIFY(buttonClickedSpy.isValid());
QPoint p(button->width() / 2, button->height() / 2);
QTest::touchEvent(window, touchDevice.data()).press(0, p);
QTRY_COMPARE(buttonPressedSpy.count(), 1);
p += QPoint(1, 1); // less than the drag threshold
QTest::touchEvent(window, touchDevice.data()).move(0, p);
QTest::touchEvent(window, touchDevice.data()).release(0, p);
QTRY_COMPARE(buttonReleasedSpy.count(), 1);
QTRY_COMPARE(buttonClickedSpy.count(), 1);
}
void tst_QQuickControl::fractionalFontSize()
{
QQuickApplicationHelper helper(this, QStringLiteral("fractionalFontSize.qml"));
QQuickWindow *window = helper.window;
window->show();
QVERIFY(QTest::qWaitForWindowExposed(window));
const QQuickControl *control = window->property("control").value<QQuickControl *>();
QVERIFY(control);
QQuickText *contentItem = qobject_cast<QQuickText *>(control->contentItem());
QVERIFY(contentItem);
QVERIFY(!contentItem->truncated());
QVERIFY2(qFuzzyCompare(contentItem->contentWidth(),
QQuickTextPrivate::get(contentItem)->layout.boundingRect().width()),
"The QQuickText::contentWidth() doesn't match the layout's preferred text width");
}
void tst_QQuickControl::resizeBackgroundKeepsBindings()
{
QQuickApplicationHelper helper(this, QStringLiteral("resizeBackgroundKeepsBindings.qml"));
QQuickWindow *window = helper.window;
window->show();
QVERIFY(QTest::qWaitForWindowExposed(window));
auto ctxt = qmlContext(window);
QVERIFY(ctxt);
auto background = qobject_cast<QQuickItem *>(ctxt->objectForName("background"));
QVERIFY(background);
QCOMPARE(background->height(), 4);
QVERIFY(background->bindableHeight().hasBinding());
}
QTEST_QUICKCONTROLS_MAIN(tst_QQuickControl)
#include "tst_qquickcontrol.moc"
|