2022-05-13 13:12:05 +00:00
|
|
|
// Copyright (C) 2016 The Qt Company Ltd.
|
2024-02-22 14:51:16 +00:00
|
|
|
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
2011-04-27 10:05:43 +00:00
|
|
|
|
|
|
|
#include <qtest.h>
|
2012-02-16 04:43:03 +00:00
|
|
|
#include <QQmlEngine>
|
|
|
|
#include <QQmlContext>
|
|
|
|
#include <QQmlComponent>
|
2011-04-27 10:05:43 +00:00
|
|
|
#include <QFile>
|
|
|
|
#include <QDebug>
|
|
|
|
#include "testtypes.h"
|
|
|
|
|
|
|
|
class tst_binding : public QObject
|
|
|
|
{
|
|
|
|
Q_OBJECT
|
|
|
|
|
|
|
|
public:
|
|
|
|
tst_binding();
|
|
|
|
virtual ~tst_binding();
|
|
|
|
|
|
|
|
public slots:
|
|
|
|
void initTestCase();
|
|
|
|
void cleanupTestCase();
|
|
|
|
|
|
|
|
private slots:
|
|
|
|
void objectproperty_data();
|
|
|
|
void objectproperty();
|
|
|
|
void basicproperty_data();
|
|
|
|
void basicproperty();
|
2011-05-10 04:46:10 +00:00
|
|
|
void creation_data();
|
|
|
|
void creation();
|
2011-04-27 10:05:43 +00:00
|
|
|
|
|
|
|
private:
|
2012-02-16 04:43:03 +00:00
|
|
|
QQmlEngine engine;
|
2011-05-10 04:46:10 +00:00
|
|
|
MyQmlObject tstObject;
|
2011-04-27 10:05:43 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
tst_binding::tst_binding()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
tst_binding::~tst_binding()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
void tst_binding::initTestCase()
|
|
|
|
{
|
|
|
|
registerTypes();
|
2011-05-10 04:46:10 +00:00
|
|
|
engine.rootContext()->setContextProperty("tstObject", &tstObject);
|
2011-04-27 10:05:43 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void tst_binding::cleanupTestCase()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
#define COMPONENT(filename, binding) \
|
2012-02-16 04:43:03 +00:00
|
|
|
QQmlComponent c(&engine); \
|
2011-04-27 10:05:43 +00:00
|
|
|
{ \
|
|
|
|
QFile f(filename); \
|
|
|
|
QVERIFY(f.open(QIODevice::ReadOnly)); \
|
|
|
|
QByteArray data = f.readAll(); \
|
|
|
|
data.replace("###", binding.toUtf8()); \
|
|
|
|
c.setData(data, QUrl()); \
|
|
|
|
QVERIFY(c.isReady()); \
|
|
|
|
}
|
|
|
|
|
|
|
|
void tst_binding::objectproperty_data()
|
|
|
|
{
|
|
|
|
QTest::addColumn<QString>("file");
|
|
|
|
QTest::addColumn<QString>("binding");
|
|
|
|
|
|
|
|
QTest::newRow("object.value") << SRCDIR "/data/objectproperty.txt" << "object.value";
|
|
|
|
QTest::newRow("object.value + 10") << SRCDIR "/data/objectproperty.txt" << "object.value + 10";
|
|
|
|
}
|
|
|
|
|
|
|
|
void tst_binding::objectproperty()
|
|
|
|
{
|
|
|
|
QFETCH(QString, file);
|
|
|
|
QFETCH(QString, binding);
|
|
|
|
|
|
|
|
COMPONENT(file, binding);
|
|
|
|
|
|
|
|
MyQmlObject object1;
|
|
|
|
MyQmlObject object2;
|
|
|
|
|
|
|
|
MyQmlObject *object = qobject_cast<MyQmlObject *>(c.create());
|
|
|
|
QVERIFY(object != 0);
|
|
|
|
object->setObject(&object2);
|
|
|
|
|
|
|
|
QBENCHMARK {
|
|
|
|
object->setObject(&object1);
|
|
|
|
object->setObject(&object2);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void tst_binding::basicproperty_data()
|
|
|
|
{
|
|
|
|
QTest::addColumn<QString>("file");
|
|
|
|
QTest::addColumn<QString>("binding");
|
|
|
|
|
2021-02-15 16:11:47 +00:00
|
|
|
QTest::newRow("value (repeated)") << SRCDIR "/data/repeated.plain.out.txt" << "value";
|
|
|
|
QTest::newRow("value (repeated multiple)") << SRCDIR "/data/repeated.multiple.out.txt" << "value";
|
|
|
|
QTest::newRow("value (repeated branch)") << SRCDIR "/data/repeated.branch.out.txt" << "value";
|
|
|
|
|
2011-04-27 10:05:43 +00:00
|
|
|
QTest::newRow("value") << SRCDIR "/data/localproperty.txt" << "value";
|
|
|
|
QTest::newRow("value + 10") << SRCDIR "/data/localproperty.txt" << "value + 10";
|
|
|
|
QTest::newRow("value + value + 10") << SRCDIR "/data/localproperty.txt" << "value + value + 10";
|
|
|
|
|
|
|
|
QTest::newRow("myObject.value") << SRCDIR "/data/idproperty.txt" << "myObject.value";
|
|
|
|
QTest::newRow("myObject.value + 10") << SRCDIR "/data/idproperty.txt" << "myObject.value + 10";
|
|
|
|
QTest::newRow("myObject.value + myObject.value + 10") << SRCDIR "/data/idproperty.txt" << "myObject.value + myObject.value + 10";
|
|
|
|
}
|
|
|
|
|
|
|
|
void tst_binding::basicproperty()
|
|
|
|
{
|
|
|
|
QFETCH(QString, file);
|
|
|
|
QFETCH(QString, binding);
|
|
|
|
|
|
|
|
COMPONENT(file, binding);
|
|
|
|
|
|
|
|
MyQmlObject *object = qobject_cast<MyQmlObject *>(c.create());
|
|
|
|
QVERIFY(object != 0);
|
|
|
|
object->setValue(10);
|
|
|
|
|
|
|
|
QBENCHMARK {
|
|
|
|
object->setValue(1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2011-05-10 04:46:10 +00:00
|
|
|
void tst_binding::creation_data()
|
|
|
|
{
|
|
|
|
QTest::addColumn<QString>("file");
|
|
|
|
QTest::addColumn<QString>("binding");
|
|
|
|
|
|
|
|
QTest::newRow("constant") << SRCDIR "/data/creation.txt" << "10";
|
|
|
|
QTest::newRow("ownProperty") << SRCDIR "/data/creation.txt" << "myObject.value";
|
|
|
|
QTest::newRow("declaredProperty") << SRCDIR "/data/creation.txt" << "myObject.myValue";
|
|
|
|
QTest::newRow("contextProperty") << SRCDIR "/data/creation.txt" << "tstObject.value";
|
|
|
|
}
|
|
|
|
|
|
|
|
void tst_binding::creation()
|
|
|
|
{
|
|
|
|
QFETCH(QString, file);
|
|
|
|
QFETCH(QString, binding);
|
|
|
|
|
|
|
|
COMPONENT(file, binding);
|
|
|
|
|
|
|
|
QBENCHMARK {
|
2011-06-17 01:43:09 +00:00
|
|
|
QObject *o = c.create();
|
|
|
|
delete o;
|
2011-05-10 04:46:10 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2011-04-27 10:05:43 +00:00
|
|
|
QTEST_MAIN(tst_binding)
|
|
|
|
#include "tst_binding.moc"
|