diff options
Diffstat (limited to 'tests/auto/qml/qqmlecmascript/testtypes.h')
-rw-r--r-- | tests/auto/qml/qqmlecmascript/testtypes.h | 217 |
1 files changed, 203 insertions, 14 deletions
diff --git a/tests/auto/qml/qqmlecmascript/testtypes.h b/tests/auto/qml/qqmlecmascript/testtypes.h index ff9dda36d1..cc20437fff 100644 --- a/tests/auto/qml/qqmlecmascript/testtypes.h +++ b/tests/auto/qml/qqmlecmascript/testtypes.h @@ -1,5 +1,5 @@ // Copyright (C) 2016 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #ifndef TESTTYPES_H #define TESTTYPES_H @@ -31,6 +31,7 @@ #include <private/qqmlengine_p.h> #include <private/qv4qobjectwrapper_p.h> +#include <private/qqmlcomponentattached_p.h> class MyQmlAttachedObject : public QObject { @@ -243,7 +244,7 @@ public slots: void myinvokable(MyQmlObject *o) { myinvokableObject = o; } void variantMethod(const QVariant &v) { m_variant = v; } void qjsvalueMethod(const QJSValue &v) { m_qjsvalue = v; } - void v8function(QQmlV4Function*); + void v8function(QQmlV4FunctionPtr); void registeredFlagMethod(Qt::MouseButtons v) { m_buttons = v; } QString slotWithReturnValue(const QString &arg) { return arg; } int resetCount() { return m_resetCount; } @@ -862,6 +863,17 @@ struct NonRegisteredType struct CompletelyUnknown; +class SingletonWithEnum : public QObject +{ + Q_OBJECT + Q_ENUMS(TestEnum) +public: + enum TestEnum { + TestValue = 42, + TestValue_MinusOne = -1 + }; +}; + class MyInvokableObject : public MyInvokableBaseObject { Q_OBJECT @@ -919,7 +931,7 @@ public: Q_INVOKABLE void method_unknown(NonRegisteredType) { invoke(28); } - Q_INVOKABLE void method_overload2(QQmlV4Function *v) + Q_INVOKABLE void method_overload2(QQmlV4FunctionPtr v) { invoke(31); QV4::Scope scope(v->v4engine()); @@ -955,12 +967,43 @@ public: invoke(40); m_actuals << f; } + Q_INVOKABLE void method_qobject(QObject *o) { invoke(41); m_actuals << QVariant::fromValue(o); } + Q_INVOKABLE QQmlComponent *someComponent() { return &m_someComponent; } + Q_INVOKABLE void method_component(QQmlComponent *c) + { + invoke(42); + m_actuals << QVariant::fromValue(c); + } + + Q_INVOKABLE MyTypeObject *someTypeObject() { return &m_someTypeObject; } + Q_INVOKABLE void method_component(MyTypeObject *c) + { + invoke(43); + m_actuals << QVariant::fromValue(c); + } + + Q_INVOKABLE void method_component(const QUrl &c) + { + invoke(44); + m_actuals << QVariant::fromValue(c); + } + + Q_INVOKABLE void method_typeWrapper(QQmlComponentAttached *attached) + { + m_actuals << QVariant::fromValue(attached); + } + + Q_INVOKABLE void method_typeWrapper(SingletonWithEnum *singleton) + { + m_actuals << QVariant::fromValue(singleton); + } + private: friend class MyInvokableBaseObject; void invoke(int idx) { if (m_invoked != -1) m_invokedError = true; m_invoked = idx;} @@ -969,6 +1012,8 @@ private: QVariantList m_actuals; QFont m_someFont; + QQmlComponent m_someComponent; + MyTypeObject m_someTypeObject; public: Q_SIGNALS: @@ -1807,17 +1852,6 @@ public: QML_DECLARE_TYPEINFO(FallbackBindingsTypeObject, QML_HAS_ATTACHED_PROPERTIES) QML_DECLARE_TYPEINFO(FallbackBindingsTypeDerived, QML_HAS_ATTACHED_PROPERTIES) -class SingletonWithEnum : public QObject -{ - Q_OBJECT - Q_ENUMS(TestEnum) -public: - enum TestEnum { - TestValue = 42, - TestValue_MinusOne = -1 - }; -}; - // Like QtObject, but with default property class QObjectContainer : public QObject { @@ -2000,6 +2034,161 @@ public: QBindable<int> bindableX() const { return &_xProp; } }; +class ResettableGadget +{ + Q_GADGET + Q_PROPERTY(qreal value READ value WRITE setValue RESET resetValue) + + qreal m_value = 0; + +public: + qreal value() const { return m_value; } + void setValue(qreal val) { m_value = val; } + void resetValue() { m_value = 42; } +}; + +class ResettableGadgetHolder : public QObject { + Q_OBJECT + QML_ELEMENT + + Q_PROPERTY(ResettableGadget g READ g WRITE setG NOTIFY gChanged) + ResettableGadget m_g; + +signals: + void gChanged(); + +public: + ResettableGadget g() const { return m_g; } + void setG(ResettableGadget newG) + { + if (m_g.value() == newG.value()) + return; + m_g = newG; + Q_EMIT gChanged(); + } +}; + +class ListPropertyAssignment_Gadget +{ + Q_GADGET + Q_PROPERTY(QStringList gadgetStringList READ gadgetStringList WRITE setGadgetStringList) + Q_PROPERTY(QVariantList gadgetVariantList READ gadgetVariantList WRITE setGadgetVariantList) + QML_VALUE_TYPE(listPropertyAssignment_Gadget) +public: + ListPropertyAssignment_Gadget(); + QStringList gadgetStringList() const; + void setGadgetStringList(const QStringList &list); + + QVariantList gadgetVariantList() const; + void setGadgetVariantList(const QVariantList &list); + +private: + QStringList m_gadgetStringList; + QVariantList m_gadgetVariantList; +}; + +class ListPropertyAssignment_Object : public QObject +{ + Q_OBJECT + QML_ELEMENT + Q_PROPERTY(QStringList qobjectStringList READ qobjectStringList WRITE setQobjectStringList) +public: + explicit ListPropertyAssignment_Object(QObject *parent = nullptr); + + QStringList qobjectStringList() const { return m_qobjectStringList; } + + void setQobjectStringList(const QStringList &newList); + +private: + QStringList m_qobjectStringList; +}; + +class SingletonBase : public QObject { + Q_OBJECT + +public: + Q_INVOKABLE virtual void trackPage(const QString&) {} + Q_INVOKABLE virtual void trackPage(const QString&, const QVariantMap&) {} + + bool m_okay = false; +}; + +class SingletonImpl : public SingletonBase { + Q_OBJECT + +public: + Q_INVOKABLE virtual void trackPage(const QString&) override {} + Q_INVOKABLE virtual void trackPage(const QString&, const QVariantMap&) override + { + m_okay = true; + } +}; + +class SingletonRegistrationWrapper { + Q_GADGET + QML_FOREIGN(SingletonBase) + QML_NAMED_ELEMENT(SingletonInheritanceTest) + QML_SINGLETON + +public: + static SingletonBase* create(QQmlEngine*, QJSEngine*) { + return new SingletonImpl(); + } + +private: + SingletonRegistrationWrapper() = default; +}; + +class MetaCallInterceptor : public QObject, public QDynamicMetaObjectData +{ + Q_OBJECT +public: + MetaCallInterceptor() + { + didGetObjectDestroyedCallback = false; + } + + void objectDestroyed(QObject *object) override + { + didGetObjectDestroyedCallback = true; + + // Deletes this meta object + QDynamicMetaObjectData::objectDestroyed(object); + } + + QMetaObject *toDynamicMetaObject(QObject *) override + { + return const_cast<QMetaObject *>(&MetaCallInterceptor::staticMetaObject); + } + + int metaCall(QObject *o, QMetaObject::Call call, int idx, void **argv) override + { + return o->qt_metacall(call, idx, argv); + } + + static bool didGetObjectDestroyedCallback; +}; + +struct TypeToTriggerProxyMetaObject +{ + Q_GADGET +}; + +class TypeWithCustomMetaObject : public QObject +{ + Q_OBJECT + QML_NAMED_ELEMENT(TypeWithCustomMetaObject) + QML_EXTENDED_NAMESPACE(TypeToTriggerProxyMetaObject) + +public: + TypeWithCustomMetaObject() + { + auto *p = QObjectPrivate::get(this); + Q_ASSERT(!p->metaObject); + p->metaObject = new MetaCallInterceptor; + } +}; + void registerTypes(); #endif // TESTTYPES_H |