blob: 80bad7977b84b489b7b87d63411e993ac81a79b0 [file] [log] [blame]
/****************************************************************************
**
** 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);
QVERIFY(obj->metaObject()->methodCount() == 73);
void *v;
QBENCHMARK {
//+1 because QObject has one slot
QMetaObject::metacall(obj, QMetaObject::InvokeMetaMethod, signal_index+1, &v);
}
delete obj;
}
QTEST_MAIN(tst_qmetaobject)
#include "main.moc"