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
|
#include <qtest.h>
#include <QtDeclarative/qmlcomponent.h>
#include <QtDeclarative/qmlengine.h>
class MyQmlObject : public QObject
{
Q_OBJECT
Q_PROPERTY(bool trueProperty READ trueProperty)
Q_PROPERTY(bool falseProperty READ falseProperty)
Q_PROPERTY(QString stringProperty READ stringProperty WRITE setStringProperty)
public:
MyQmlObject(): m_methodCalled(false), m_methodIntCalled(false) {}
bool trueProperty() const { return true; }
bool falseProperty() const { return false; }
QString stringProperty() const { return m_string; }
void setStringProperty(const QString &s) { m_string = s; }
bool methodCalled() const { return m_methodCalled; }
bool methodIntCalled() const { return m_methodIntCalled; }
QString string() const { return m_string; }
signals:
void basicSignal();
void argumentSignal(int a, QString b, qreal c);
public slots:
void method() { m_methodCalled = true; }
void method(int a) { if(a == 163) m_methodIntCalled = true; }
void setString(const QString &s) { m_string = s; }
private:
friend class tst_qmlbindengine;
bool m_methodCalled;
bool m_methodIntCalled;
QString m_string;
};
QML_DECLARE_TYPE(MyQmlObject);
QML_DEFINE_TYPE(MyQmlObject,MyQmlObject);
class tst_qmlbindengine : public QObject
{
Q_OBJECT
public:
tst_qmlbindengine() {}
private slots:
void boolPropertiesEvaluateAsBool();
void methods();
void signalAssignment();
private:
QmlEngine engine;
};
void tst_qmlbindengine::boolPropertiesEvaluateAsBool()
{
{
QmlComponent component(&engine, "<MyQmlObject stringProperty=\"{trueProperty?'pass':'fail'}\" />");
MyQmlObject *object = qobject_cast<MyQmlObject *>(component.create());
QVERIFY(object != 0);
QCOMPARE(object->stringProperty(), QLatin1String("pass"));
}
{
QmlComponent component(&engine, "<MyQmlObject stringProperty=\"{falseProperty?'fail':'pass'}\" />");
MyQmlObject *object = qobject_cast<MyQmlObject *>(component.create());
QVERIFY(object != 0);
QCOMPARE(object->stringProperty(), QLatin1String("pass"));
}
}
void tst_qmlbindengine::signalAssignment()
{
{
QmlComponent component(&engine, "<MyQmlObject onBasicSignal=\"setString('pass')\" />");
MyQmlObject *object = qobject_cast<MyQmlObject *>(component.create());
QVERIFY(object != 0);
QCOMPARE(object->string(), QString());
emit object->basicSignal();
QCOMPARE(object->string(), QString("pass"));
}
{
QmlComponent component(&engine, "<MyQmlObject onArgumentSignal=\"setString('pass ' + a + ' ' + b + ' ' + c)\" />");
MyQmlObject *object = qobject_cast<MyQmlObject *>(component.create());
QVERIFY(object != 0);
QCOMPARE(object->string(), QString());
emit object->argumentSignal(19, "Hello world!", 10.3);
QCOMPARE(object->string(), QString("pass 19 Hello world! 10.3"));
}
}
void tst_qmlbindengine::methods()
{
{
QmlComponent component(&engine, "<MyQmlObject id=\"MyObject\" onBasicSignal=\"MyObject.method()\" />");
MyQmlObject *object = qobject_cast<MyQmlObject *>(component.create());
QVERIFY(object != 0);
QCOMPARE(object->methodCalled(), false);
QCOMPARE(object->methodIntCalled(), false);
emit object->basicSignal();
QCOMPARE(object->methodCalled(), true);
QCOMPARE(object->methodIntCalled(), false);
}
{
QmlComponent component(&engine, "<MyQmlObject id=\"MyObject\" onBasicSignal=\"MyObject.method(163)\" />");
MyQmlObject *object = qobject_cast<MyQmlObject *>(component.create());
QVERIFY(object != 0);
QCOMPARE(object->methodCalled(), false);
QCOMPARE(object->methodIntCalled(), false);
emit object->basicSignal();
QCOMPARE(object->methodCalled(), false);
QCOMPARE(object->methodIntCalled(), true);
}
}
QTEST_MAIN(tst_qmlbindengine)
#include "tst_qmlbindengine.moc"
|