1 /****************************************************************************
3 ** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
4 ** Contact: http://www.qt-project.org/
6 ** This file is part of the test suite of the Qt Toolkit.
8 ** $QT_BEGIN_LICENSE:LGPL$
9 ** GNU Lesser General Public License Usage
10 ** This file may be used under the terms of the GNU Lesser General Public
11 ** License version 2.1 as published by the Free Software Foundation and
12 ** appearing in the file LICENSE.LGPL included in the packaging of this
13 ** file. Please review the following information to ensure the GNU Lesser
14 ** General Public License version 2.1 requirements will be met:
15 ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
17 ** In addition, as a special exception, Nokia gives you certain additional
18 ** rights. These rights are described in the Nokia Qt LGPL Exception
19 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
21 ** GNU General Public License Usage
22 ** Alternatively, this file may be used under the terms of the GNU General
23 ** Public License version 3.0 as published by the Free Software Foundation
24 ** and appearing in the file LICENSE.GPL included in the packaging of this
25 ** file. Please review the following information to ensure the GNU General
26 ** Public License version 3.0 requirements will be met:
27 ** http://www.gnu.org/copyleft/gpl.html.
30 ** Alternatively, this file may be used in accordance with the terms and
31 ** conditions contained in a signed written agreement between you and Nokia.
40 ****************************************************************************/
41 #include "testtypes.h"
43 #include <QPlainTextEdit>
47 class BaseExtensionObject : public QObject
50 Q_PROPERTY(int baseExtendedProperty READ extendedProperty WRITE setExtendedProperty NOTIFY extendedPropertyChanged)
52 BaseExtensionObject(QObject *parent) : QObject(parent), m_value(0) {}
54 int extendedProperty() const { return m_value; }
55 void setExtendedProperty(int v) { m_value = v; emit extendedPropertyChanged(); }
58 void extendedPropertyChanged();
63 class ExtensionObject : public QObject
66 Q_PROPERTY(int extendedProperty READ extendedProperty WRITE setExtendedProperty NOTIFY extendedPropertyChanged)
68 ExtensionObject(QObject *parent) : QObject(parent), m_value(0) {}
70 int extendedProperty() const { return m_value; }
71 void setExtendedProperty(int v) { m_value = v; emit extendedPropertyChanged(); }
74 void extendedPropertyChanged();
79 class DefaultPropertyExtensionObject : public QObject
82 Q_CLASSINFO("DefaultProperty", "firstProperty")
84 DefaultPropertyExtensionObject(QObject *parent) : QObject(parent) {}
87 class QWidgetDeclarativeUI : public QObject
91 Q_PROPERTY(int width READ width WRITE setWidth NOTIFY widthChanged)
97 QWidgetDeclarativeUI(QObject *other) : QObject(other) { }
100 int width() const { return 0; }
101 void setWidth(int) { }
104 void MyQmlObject::v8function(QQmlV8Function *args)
106 const char *error = "Exception thrown from within QObject slot";
107 v8::ThrowException(v8::Exception::Error(v8::String::New(error)));
110 static QJSValue script_api(QQmlEngine *engine, QJSEngine *scriptEngine)
114 static int testProperty = 13;
115 QJSValue v = scriptEngine->newObject();
116 v.setProperty("scriptTestProperty", testProperty++);
120 static QJSValue readonly_script_api(QQmlEngine *engine, QJSEngine *scriptEngine)
124 static int testProperty = 42;
125 QJSValue v = scriptEngine->newObject();
126 v.setProperty("scriptTestProperty", testProperty++);
128 // now freeze it so that it's read-only
129 QJSValue freezeFunction = scriptEngine->evaluate("(function(obj) { return Object.freeze(obj); })");
130 v = freezeFunction.call(QJSValueList() << v);
135 static QObject *qobject_api(QQmlEngine *engine, QJSEngine *scriptEngine)
138 Q_UNUSED(scriptEngine)
140 testQObjectApi *o = new testQObjectApi();
141 o->setQObjectTestProperty(20);
142 o->setQObjectTestWritableProperty(50);
143 o->setQObjectTestWritableFinalProperty(10);
147 static QObject *qobject_api_engine_parent(QQmlEngine *engine, QJSEngine *scriptEngine)
149 Q_UNUSED(scriptEngine)
151 static int testProperty = 26;
152 testQObjectApi *o = new testQObjectApi(engine);
153 o->setQObjectTestProperty(testProperty++);
159 qmlRegisterType<MyQmlObject>("Qt.test", 1,0, "MyQmlObjectAlias");
160 qmlRegisterType<MyQmlObject>("Qt.test", 1,0, "MyQmlObject");
161 qmlRegisterType<MyDeferredObject>("Qt.test", 1,0, "MyDeferredObject");
162 qmlRegisterType<MyQmlContainer>("Qt.test", 1,0, "MyQmlContainer");
163 qmlRegisterExtendedType<MyBaseExtendedObject, BaseExtensionObject>("Qt.test", 1,0, "MyBaseExtendedObject");
164 qmlRegisterExtendedType<MyExtendedObject, ExtensionObject>("Qt.test", 1,0, "MyExtendedObject");
165 qmlRegisterType<MyTypeObject>("Qt.test", 1,0, "MyTypeObject");
166 qmlRegisterType<MyDerivedObject>("Qt.test", 1,0, "MyDerivedObject");
167 qmlRegisterType<NumberAssignment>("Qt.test", 1,0, "NumberAssignment");
168 qmlRegisterExtendedType<DefaultPropertyExtendedObject, DefaultPropertyExtensionObject>("Qt.test", 1,0, "DefaultPropertyExtendedObject");
169 qmlRegisterType<OverrideDefaultPropertyObject>("Qt.test", 1,0, "OverrideDefaultPropertyObject");
170 qmlRegisterType<MyRevisionedClass>("Qt.test",1,0,"MyRevisionedClass");
171 qmlRegisterType<MyDeleteObject>("Qt.test", 1,0, "MyDeleteObject");
172 qmlRegisterType<MyRevisionedClass,1>("Qt.test",1,1,"MyRevisionedClass");
174 // test scarce resource property binding post-evaluation optimisation
175 // and for testing memory usage in property var circular reference test
176 qmlRegisterType<ScarceResourceObject>("Qt.test", 1,0, "MyScarceResourceObject");
178 // Register the uncreatable base class
179 qmlRegisterRevision<MyRevisionedBaseClassRegistered,1>("Qt.test",1,1);
180 // MyRevisionedSubclass 1.0 uses MyRevisionedClass revision 0
181 qmlRegisterType<MyRevisionedSubclass>("Qt.test",1,0,"MyRevisionedSubclass");
182 // MyRevisionedSubclass 1.1 uses MyRevisionedClass revision 1
183 qmlRegisterType<MyRevisionedSubclass,1>("Qt.test",1,1,"MyRevisionedSubclass");
185 qmlRegisterExtendedType<QWidget,QWidgetDeclarativeUI>("Qt.test",1,0,"QWidget");
186 qmlRegisterType<QPlainTextEdit>("Qt.test",1,0,"QPlainTextEdit");
188 qRegisterMetaType<MyQmlObject::MyType>("MyQmlObject::MyType");
190 qmlRegisterModuleApi("Qt.test",1,0,script_api); // register (script) module API for an existing uri which contains elements
191 qmlRegisterModuleApi("Qt.test",1,0,qobject_api); // register (qobject) for an existing uri for which another module API was previously regd. Should replace!
192 qmlRegisterModuleApi("Qt.test.scriptApi",1,0,script_api); // register (script) module API for a uri which doesn't contain elements
193 qmlRegisterModuleApi("Qt.test.scriptApi",2,0,readonly_script_api); // register (script) module API for a uri which doesn't contain elements - will be made read-only
194 qmlRegisterModuleApi("Qt.test.qobjectApi",1,0,qobject_api); // register (qobject) module API for a uri which doesn't contain elements
195 qmlRegisterModuleApi("Qt.test.qobjectApi",1,3,qobject_api); // register (qobject) module API for a uri which doesn't contain elements, minor version set
196 qmlRegisterModuleApi("Qt.test.qobjectApi",2,0,qobject_api); // register (qobject) module API for a uri which doesn't contain elements, major version set
197 qmlRegisterModuleApi("Qt.test.qobjectApiParented",1,0,qobject_api_engine_parent); // register (parented qobject) module API for a uri which doesn't contain elements
199 qRegisterMetaType<MyQmlObject::MyType>("MyEnum2");
200 qRegisterMetaType<Qt::MouseButtons>("Qt::MouseButtons");
202 qmlRegisterType<CircularReferenceObject>("Qt.test", 1, 0, "CircularReferenceObject");
203 qmlRegisterType<CircularReferenceHandle>("Qt.test", 1, 0, "CircularReferenceHandle");
205 qmlRegisterType<MyDynamicCreationDestructionObject>("Qt.test", 1, 0, "MyDynamicCreationDestructionObject");
206 qmlRegisterType<WriteCounter>("Qt.test", 1, 0, "WriteCounter");
208 qmlRegisterType<MySequenceConversionObject>("Qt.test", 1, 0, "MySequenceConversionObject");
211 #include "testtypes.moc"