| /**************************************************************************** |
| ** |
| ** Copyright (C) 2016 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Milian Wolff <milian.wolff@kdab.com> |
| ** Copyright (C) 2019 Menlo Systems GmbH, author Arno Rehn <a.rehn@menlosystems.com> |
| ** Contact: https://www.qt.io/licensing/ |
| ** |
| ** This file is part of the QtWebChannel module 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$ |
| ** |
| ****************************************************************************/ |
| |
| #ifndef TST_WEBCHANNEL_H |
| #define TST_WEBCHANNEL_H |
| |
| #include <QObject> |
| #include <QVariant> |
| #include <QVector> |
| #include <QJsonValue> |
| #include <QJsonObject> |
| #include <QJsonArray> |
| |
| #include <QtWebChannel/QWebChannelAbstractTransport> |
| |
| struct TestStruct |
| { |
| TestStruct(int foo = 0, int bar = 0) |
| : foo(foo) |
| , bar(bar) |
| {} |
| int foo; |
| int bar; |
| }; |
| Q_DECLARE_METATYPE(TestStruct) |
| using TestStructVector = std::vector<TestStruct>; |
| Q_DECLARE_METATYPE(TestStructVector) |
| |
| QT_BEGIN_NAMESPACE |
| |
| class DummyTransport : public QWebChannelAbstractTransport |
| { |
| Q_OBJECT |
| public: |
| explicit DummyTransport(QObject *parent = nullptr) |
| : QWebChannelAbstractTransport(parent) |
| {} |
| ~DummyTransport() {}; |
| |
| void emitMessageReceived(const QJsonObject &message) |
| { |
| emit messageReceived(message, this); |
| } |
| |
| QVector<QJsonObject> messagesSent() const |
| { |
| return mMessagesSent; |
| } |
| |
| public slots: |
| void sendMessage(const QJsonObject &message) override |
| { |
| mMessagesSent.push_back(message); |
| } |
| private: |
| QVector<QJsonObject> mMessagesSent; |
| }; |
| |
| class TestObject : public QObject |
| { |
| Q_OBJECT |
| Q_ENUMS(Foo) |
| |
| Q_PROPERTY(Foo foo READ foo CONSTANT) |
| Q_PROPERTY(int asdf READ asdf NOTIFY asdfChanged) |
| Q_PROPERTY(QString bar READ bar NOTIFY theBarHasChanged) |
| Q_PROPERTY(QObject * objectProperty READ objectProperty WRITE setObjectProperty NOTIFY objectPropertyChanged) |
| Q_PROPERTY(TestObject * returnedObject READ returnedObject WRITE setReturnedObject NOTIFY returnedObjectChanged) |
| Q_PROPERTY(QString prop READ prop WRITE setProp NOTIFY propChanged) |
| |
| public: |
| explicit TestObject(QObject *parent = 0) |
| : QObject(parent) |
| , mObjectProperty(0) |
| , mReturnedObject(Q_NULLPTR) |
| { } |
| |
| enum Foo { |
| Bar, |
| Asdf |
| }; |
| |
| enum TestFlag : quint16 { |
| FirstFlag = 0x1, |
| SecondFlag = 0x2 |
| }; |
| Q_DECLARE_FLAGS(TestFlags, TestFlag) |
| Q_FLAG(TestFlags) |
| |
| Foo foo() const {return Bar;} |
| int asdf() const {return 42;} |
| QString bar() const {return QString();} |
| |
| QObject *objectProperty() const |
| { |
| return mObjectProperty; |
| } |
| |
| TestObject *returnedObject() const |
| { |
| return mReturnedObject; |
| } |
| |
| QString prop() const |
| { |
| return mProp; |
| } |
| |
| Q_INVOKABLE void method1() {} |
| |
| protected: |
| Q_INVOKABLE void method2() {} |
| |
| private: |
| Q_INVOKABLE void method3() {} |
| |
| signals: |
| void sig1(); |
| void sig2(const QString&); |
| void asdfChanged(); |
| void theBarHasChanged(); |
| void objectPropertyChanged(); |
| void returnedObjectChanged(); |
| void propChanged(const QString&); |
| void replay(); |
| void overloadSignal(int); |
| void overloadSignal(float); |
| |
| public slots: |
| void slot1() {} |
| void slot2(const QString&) {} |
| |
| void setReturnedObject(TestObject *obj) |
| { |
| mReturnedObject = obj; |
| emit returnedObjectChanged(); |
| } |
| |
| void setObjectProperty(QObject *object) |
| { |
| mObjectProperty = object; |
| emit objectPropertyChanged(); |
| } |
| |
| void setProp(const QString&prop) {emit propChanged(mProp=prop);} |
| void fire() {emit replay();} |
| |
| double overload(double d) { return d + 1; } |
| int overload(int i) { return i * 2; } |
| QObject *overload(QObject *object) { return object; } |
| QString overload(const QString &str) { return str.toUpper(); } |
| QString overload(const QString &str, int i) { return str.toUpper() + QString::number(i + 1); } |
| QString overload(const QJsonArray &v) { return QString::number(v[1].toInt()) + v[0].toString(); } |
| |
| protected slots: |
| void slot3() {} |
| |
| private slots: |
| void slot4() {} |
| |
| public: |
| QObject *mObjectProperty; |
| TestObject *mReturnedObject; |
| QString mProp; |
| }; |
| |
| Q_DECLARE_OPERATORS_FOR_FLAGS(TestObject::TestFlags) |
| |
| class BenchObject : public QObject |
| { |
| Q_OBJECT |
| |
| Q_PROPERTY(int p0 MEMBER m_p0 NOTIFY p0Changed) |
| Q_PROPERTY(int p1 MEMBER m_p1 NOTIFY p1Changed) |
| Q_PROPERTY(int p2 MEMBER m_p2 NOTIFY p2Changed) |
| Q_PROPERTY(int p3 MEMBER m_p3 NOTIFY p3Changed) |
| Q_PROPERTY(int p4 MEMBER m_p4 NOTIFY p4Changed) |
| Q_PROPERTY(int p5 MEMBER m_p5 NOTIFY p5Changed) |
| Q_PROPERTY(int p6 MEMBER m_p6 NOTIFY p6Changed) |
| Q_PROPERTY(int p7 MEMBER m_p7 NOTIFY p7Changed) |
| Q_PROPERTY(int p8 MEMBER m_p8 NOTIFY p8Changed) |
| Q_PROPERTY(int p9 MEMBER m_p9 NOTIFY p9Changed) |
| public: |
| explicit BenchObject(QObject *parent = 0) |
| : QObject(parent) |
| , m_p0(0) |
| , m_p1(0) |
| , m_p2(0) |
| , m_p3(0) |
| , m_p4(0) |
| , m_p5(0) |
| , m_p6(0) |
| , m_p7(0) |
| , m_p8(0) |
| , m_p9(0) |
| { } |
| |
| void change() |
| { |
| m_p0++; |
| m_p1++; |
| m_p2++; |
| m_p3++; |
| m_p4++; |
| m_p5++; |
| m_p6++; |
| m_p7++; |
| m_p8++; |
| m_p9++; |
| emit p0Changed(m_p0); |
| emit p1Changed(m_p1); |
| emit p2Changed(m_p2); |
| emit p3Changed(m_p3); |
| emit p4Changed(m_p4); |
| emit p5Changed(m_p5); |
| emit p6Changed(m_p6); |
| emit p7Changed(m_p7); |
| emit p8Changed(m_p8); |
| emit p9Changed(m_p9); |
| } |
| |
| signals: |
| void s0(); |
| void s1(); |
| void s2(); |
| void s3(); |
| void s4(); |
| void s5(); |
| void s6(); |
| void s7(); |
| void s8(); |
| void s9(); |
| |
| void p0Changed(int); |
| void p1Changed(int); |
| void p2Changed(int); |
| void p3Changed(int); |
| void p4Changed(int); |
| void p5Changed(int); |
| void p6Changed(int); |
| void p7Changed(int); |
| void p8Changed(int); |
| void p9Changed(int); |
| |
| public slots: |
| void m0(){}; |
| void m1(){}; |
| void m2(){}; |
| void m3(){}; |
| void m4(){}; |
| void m5(){}; |
| void m6(){}; |
| void m7(){}; |
| void m8(){}; |
| void m9(){}; |
| |
| private: |
| int m_p0, m_p1, m_p2, m_p3, m_p4, m_p5, m_p6, m_p7, m_p8, m_p9; |
| }; |
| |
| class TestWebChannel : public QObject |
| { |
| Q_OBJECT |
| |
| Q_PROPERTY(int lastInt READ readInt WRITE setInt NOTIFY lastIntChanged); |
| Q_PROPERTY(bool lastBool READ readBool WRITE setBool NOTIFY lastBoolChanged); |
| Q_PROPERTY(double lastDouble READ readDouble WRITE setDouble NOTIFY lastDoubleChanged); |
| Q_PROPERTY(QVariant lastVariant READ readVariant WRITE setVariant NOTIFY lastVariantChanged); |
| Q_PROPERTY(QJsonValue lastJsonValue READ readJsonValue WRITE setJsonValue NOTIFY lastJsonValueChanged); |
| Q_PROPERTY(QJsonObject lastJsonObject READ readJsonObject WRITE setJsonObject NOTIFY lastJsonObjectChanged); |
| Q_PROPERTY(QJsonArray lastJsonArray READ readJsonArray WRITE setJsonArray NOTIFY lastJsonArrayChanged); |
| public: |
| explicit TestWebChannel(QObject *parent = 0); |
| virtual ~TestWebChannel(); |
| |
| public slots: |
| int readInt() const; |
| void setInt(int i); |
| bool readBool() const; |
| void setBool(bool b); |
| double readDouble() const; |
| void setDouble(double d); |
| QVariant readVariant() const; |
| void setVariant(const QVariant &v); |
| QJsonValue readJsonValue() const; |
| void setJsonValue(const QJsonValue &v); |
| QJsonObject readJsonObject() const; |
| void setJsonObject(const QJsonObject &v); |
| QJsonArray readJsonArray() const; |
| void setJsonArray(const QJsonArray &v); |
| |
| int readOverload(int i); |
| QString readOverload(const QString &arg); |
| QString readOverload(const QString &arg, int i); |
| |
| signals: |
| void lastIntChanged(); |
| void lastBoolChanged(); |
| void lastDoubleChanged(); |
| void lastVariantChanged(); |
| void lastJsonValueChanged(); |
| void lastJsonObjectChanged(); |
| void lastJsonArrayChanged(); |
| |
| private slots: |
| void testRegisterObjects(); |
| void testDeregisterObjects(); |
| void testDeregisterObjectAtStart(); |
| void testInfoForObject(); |
| void testInvokeMethodConversion(); |
| void testFunctionOverloading(); |
| void testSetPropertyConversion(); |
| void testInvokeMethodOverloadResolution(); |
| void testDisconnect(); |
| void testWrapRegisteredObject(); |
| void testUnwrapObject(); |
| void testTransportWrapObjectProperties(); |
| void testRemoveUnusedTransports(); |
| void testPassWrappedObjectBack(); |
| void testWrapValues(); |
| void testWrapObjectWithMultipleTransports(); |
| void testJsonToVariant(); |
| void testInfiniteRecursion(); |
| void testAsyncObject(); |
| void testDeletionDuringMethodInvocation_data(); |
| void testDeletionDuringMethodInvocation(); |
| |
| void benchClassInfo(); |
| void benchInitializeClients(); |
| void benchPropertyUpdates(); |
| void benchRegisterObjects(); |
| void benchRemoveTransport(); |
| |
| void qtbug46548_overriddenProperties(); |
| void qtbug62388_wrapObjectMultipleTransports(); |
| |
| private: |
| DummyTransport *m_dummyTransport; |
| |
| int m_lastInt; |
| bool m_lastBool; |
| double m_lastDouble; |
| QVariant m_lastVariant; |
| QJsonValue m_lastJsonValue; |
| QJsonObject m_lastJsonObject; |
| QJsonArray m_lastJsonArray; |
| }; |
| |
| QT_END_NAMESPACE |
| |
| Q_DECLARE_METATYPE(TestObject::Foo) |
| |
| #endif // TST_WEBCHANNEL_H |