253 lines
6.8 KiB
C++
253 lines
6.8 KiB
C++
/****************************************************************************
|
|
**
|
|
** Copyright (C) 2016 The Qt Company Ltd.
|
|
** Contact: https://www.qt.io/licensing/
|
|
**
|
|
** This file is part of the test suite of the Qt Toolkit.
|
|
**
|
|
** $QT_BEGIN_LICENSE:GPL-EXCEPT$
|
|
** Commercial License Usage
|
|
** Licensees holding valid commercial Qt licenses may use this file in
|
|
** accordance with the commercial license agreement provided with the
|
|
** Software or, alternatively, in accordance with the terms contained in
|
|
** a written agreement between you and The Qt Company. For licensing terms
|
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
|
** information use the contact form at https://www.qt.io/contact-us.
|
|
**
|
|
** GNU General Public License Usage
|
|
** Alternatively, this file may be used under the terms of the GNU
|
|
** General Public License version 3 as published by the Free Software
|
|
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
|
|
** included in the packaging of this file. Please review the following
|
|
** information to ensure the GNU General Public License requirements will
|
|
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
|
|
**
|
|
** $QT_END_LICENSE$
|
|
**
|
|
****************************************************************************/
|
|
#include <QtCore>
|
|
#include <QtWidgets/QTreeView>
|
|
#include <qtest.h>
|
|
|
|
class LotsOfSignals : public QObject
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
LotsOfSignals() {}
|
|
|
|
signals:
|
|
void extraSignal1();
|
|
void extraSignal2();
|
|
void extraSignal3();
|
|
void extraSignal4();
|
|
void extraSignal5();
|
|
void extraSignal6();
|
|
void extraSignal7();
|
|
void extraSignal8();
|
|
void extraSignal9();
|
|
void extraSignal10();
|
|
void extraSignal12();
|
|
void extraSignal13();
|
|
void extraSignal14();
|
|
void extraSignal15();
|
|
void extraSignal16();
|
|
void extraSignal17();
|
|
void extraSignal18();
|
|
void extraSignal19();
|
|
void extraSignal20();
|
|
void extraSignal21();
|
|
void extraSignal22();
|
|
void extraSignal23();
|
|
void extraSignal24();
|
|
void extraSignal25();
|
|
void extraSignal26();
|
|
void extraSignal27();
|
|
void extraSignal28();
|
|
void extraSignal29();
|
|
void extraSignal30();
|
|
void extraSignal31();
|
|
void extraSignal32();
|
|
void extraSignal33();
|
|
void extraSignal34();
|
|
void extraSignal35();
|
|
void extraSignal36();
|
|
void extraSignal37();
|
|
void extraSignal38();
|
|
void extraSignal39();
|
|
void extraSignal40();
|
|
void extraSignal41();
|
|
void extraSignal42();
|
|
void extraSignal43();
|
|
void extraSignal44();
|
|
void extraSignal45();
|
|
void extraSignal46();
|
|
void extraSignal47();
|
|
void extraSignal48();
|
|
void extraSignal49();
|
|
void extraSignal50();
|
|
void extraSignal51();
|
|
void extraSignal52();
|
|
void extraSignal53();
|
|
void extraSignal54();
|
|
void extraSignal55();
|
|
void extraSignal56();
|
|
void extraSignal57();
|
|
void extraSignal58();
|
|
void extraSignal59();
|
|
void extraSignal60();
|
|
void extraSignal61();
|
|
void extraSignal62();
|
|
void extraSignal63();
|
|
void extraSignal64();
|
|
void extraSignal65();
|
|
void extraSignal66();
|
|
void extraSignal67();
|
|
void extraSignal68();
|
|
void extraSignal69();
|
|
void extraSignal70();
|
|
};
|
|
|
|
class tst_qmetaobject: public QObject
|
|
{
|
|
Q_OBJECT
|
|
private slots:
|
|
void initTestCase();
|
|
void cleanupTestCase();
|
|
|
|
void indexOfProperty_data();
|
|
void indexOfProperty();
|
|
void indexOfMethod_data();
|
|
void indexOfMethod();
|
|
void indexOfSignal_data();
|
|
void indexOfSignal();
|
|
void indexOfSlot_data();
|
|
void indexOfSlot();
|
|
|
|
void unconnected_data();
|
|
void unconnected();
|
|
};
|
|
|
|
void tst_qmetaobject::initTestCase()
|
|
{
|
|
}
|
|
|
|
void tst_qmetaobject::cleanupTestCase()
|
|
{
|
|
}
|
|
|
|
void tst_qmetaobject::indexOfProperty_data()
|
|
{
|
|
QTest::addColumn<QByteArray>("name");
|
|
const QMetaObject *mo = &QTreeView::staticMetaObject;
|
|
for (int i = 0; i < mo->propertyCount(); ++i) {
|
|
QMetaProperty prop = mo->property(i);
|
|
QTest::newRow(prop.name()) << QByteArray(prop.name());
|
|
}
|
|
}
|
|
|
|
void tst_qmetaobject::indexOfProperty()
|
|
{
|
|
QFETCH(QByteArray, name);
|
|
const char *p = name.constData();
|
|
const QMetaObject *mo = &QTreeView::staticMetaObject;
|
|
QBENCHMARK {
|
|
(void)mo->indexOfProperty(p);
|
|
}
|
|
}
|
|
|
|
void tst_qmetaobject::indexOfMethod_data()
|
|
{
|
|
QTest::addColumn<QByteArray>("method");
|
|
const QMetaObject *mo = &QTreeView::staticMetaObject;
|
|
for (int i = 0; i < mo->methodCount(); ++i) {
|
|
QMetaMethod method = mo->method(i);
|
|
QByteArray sig = method.methodSignature();
|
|
QTest::newRow(sig) << sig;
|
|
}
|
|
}
|
|
|
|
void tst_qmetaobject::indexOfMethod()
|
|
{
|
|
QFETCH(QByteArray, method);
|
|
const char *p = method.constData();
|
|
const QMetaObject *mo = &QTreeView::staticMetaObject;
|
|
QBENCHMARK {
|
|
(void)mo->indexOfMethod(p);
|
|
}
|
|
}
|
|
|
|
void tst_qmetaobject::indexOfSignal_data()
|
|
{
|
|
QTest::addColumn<QByteArray>("signal");
|
|
const QMetaObject *mo = &QTreeView::staticMetaObject;
|
|
for (int i = 0; i < mo->methodCount(); ++i) {
|
|
QMetaMethod method = mo->method(i);
|
|
if (method.methodType() != QMetaMethod::Signal)
|
|
continue;
|
|
QByteArray sig = method.methodSignature();
|
|
QTest::newRow(sig) << sig;
|
|
}
|
|
}
|
|
|
|
void tst_qmetaobject::indexOfSignal()
|
|
{
|
|
QFETCH(QByteArray, signal);
|
|
const char *p = signal.constData();
|
|
const QMetaObject *mo = &QTreeView::staticMetaObject;
|
|
QBENCHMARK {
|
|
(void)mo->indexOfSignal(p);
|
|
}
|
|
}
|
|
|
|
void tst_qmetaobject::indexOfSlot_data()
|
|
{
|
|
QTest::addColumn<QByteArray>("slot");
|
|
const QMetaObject *mo = &QTreeView::staticMetaObject;
|
|
for (int i = 0; i < mo->methodCount(); ++i) {
|
|
QMetaMethod method = mo->method(i);
|
|
if (method.methodType() != QMetaMethod::Slot)
|
|
continue;
|
|
QByteArray sig = method.methodSignature();
|
|
QTest::newRow(sig) << sig;
|
|
}
|
|
}
|
|
|
|
void tst_qmetaobject::indexOfSlot()
|
|
{
|
|
QFETCH(QByteArray, slot);
|
|
const char *p = slot.constData();
|
|
const QMetaObject *mo = &QTreeView::staticMetaObject;
|
|
QBENCHMARK {
|
|
(void)mo->indexOfSlot(p);
|
|
}
|
|
}
|
|
|
|
void tst_qmetaobject::unconnected_data()
|
|
{
|
|
QTest::addColumn<int>("signal_index");
|
|
QTest::newRow("signal--9") << 9;
|
|
QTest::newRow("signal--32") << 32;
|
|
QTest::newRow("signal--33") << 33;
|
|
QTest::newRow("signal--64") << 64;
|
|
QTest::newRow("signal--65") << 65;
|
|
QTest::newRow("signal--70") << 70;
|
|
}
|
|
|
|
void tst_qmetaobject::unconnected()
|
|
{
|
|
LotsOfSignals *obj = new LotsOfSignals;
|
|
QFETCH(int, signal_index);
|
|
// 74: 70 signals in LotsOfSignals, 2 signals, 1 slot + 1 invokable in QObject
|
|
QCOMPARE(obj->metaObject()->methodCount(), 74);
|
|
void *v;
|
|
QBENCHMARK {
|
|
// Add two because QObject has one slot and one invokable
|
|
QMetaObject::metacall(obj, QMetaObject::InvokeMetaMethod, signal_index + 2, &v);
|
|
}
|
|
delete obj;
|
|
}
|
|
|
|
QTEST_MAIN(tst_qmetaobject)
|
|
|
|
#include "main.moc"
|