1 /****************************************************************************
3 ** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
4 ** All rights reserved.
5 ** Contact: http://www.qt-project.org/
7 ** This file is part of the test suite of the Qt Toolkit.
9 ** $QT_BEGIN_LICENSE:LGPL$
10 ** GNU Lesser General Public License Usage
11 ** This file may be used under the terms of the GNU Lesser General Public
12 ** License version 2.1 as published by the Free Software Foundation and
13 ** appearing in the file LICENSE.LGPL included in the packaging of this
14 ** file. Please review the following information to ensure the GNU Lesser
15 ** General Public License version 2.1 requirements will be met:
16 ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
18 ** In addition, as a special exception, Nokia gives you certain additional
19 ** rights. These rights are described in the Nokia Qt LGPL Exception
20 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
22 ** GNU General Public License Usage
23 ** Alternatively, this file may be used under the terms of the GNU General
24 ** Public License version 3.0 as published by the Free Software Foundation
25 ** and appearing in the file LICENSE.GPL included in the packaging of this
26 ** file. Please review the following information to ensure the GNU General
27 ** Public License version 3.0 requirements will be met:
28 ** http://www.gnu.org/copyleft/gpl.html.
31 ** Alternatively, this file may be used in accordance with the terms and
32 ** conditions contained in a signed written agreement between you and Nokia.
40 ****************************************************************************/
41 #include "testtypes.h"
43 #include <QPlainTextEdit>
44 #include <QDeclarativeEngine>
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(QDeclarativeV8Function *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(QDeclarativeEngine *engine, QJSEngine *scriptEngine)
114 static int testProperty = 13;
115 QJSValue v = scriptEngine->newObject();
116 v.setProperty("scriptTestProperty", testProperty++);
120 static QJSValue readonly_script_api(QDeclarativeEngine *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(QDeclarativeEngine *engine, QJSEngine *scriptEngine)
138 Q_UNUSED(scriptEngine)
140 testQObjectApi *o = new testQObjectApi();
141 o->setQObjectTestProperty(20);
142 o->setQObjectTestWritableProperty(50);
146 static QObject *qobject_api_engine_parent(QDeclarativeEngine *engine, QJSEngine *scriptEngine)
148 Q_UNUSED(scriptEngine)
150 static int testProperty = 26;
151 testQObjectApi *o = new testQObjectApi(engine);
152 o->setQObjectTestProperty(testProperty++);
158 qmlRegisterType<MyQmlObject>("Qt.test", 1,0, "MyQmlObjectAlias");
159 qmlRegisterType<MyQmlObject>("Qt.test", 1,0, "MyQmlObject");
160 qmlRegisterType<MyDeferredObject>("Qt.test", 1,0, "MyDeferredObject");
161 qmlRegisterType<MyQmlContainer>("Qt.test", 1,0, "MyQmlContainer");
162 qmlRegisterExtendedType<MyBaseExtendedObject, BaseExtensionObject>("Qt.test", 1,0, "MyBaseExtendedObject");
163 qmlRegisterExtendedType<MyExtendedObject, ExtensionObject>("Qt.test", 1,0, "MyExtendedObject");
164 qmlRegisterType<MyTypeObject>("Qt.test", 1,0, "MyTypeObject");
165 qmlRegisterType<MyDerivedObject>("Qt.test", 1,0, "MyDerivedObject");
166 qmlRegisterType<NumberAssignment>("Qt.test", 1,0, "NumberAssignment");
167 qmlRegisterExtendedType<DefaultPropertyExtendedObject, DefaultPropertyExtensionObject>("Qt.test", 1,0, "DefaultPropertyExtendedObject");
168 qmlRegisterType<OverrideDefaultPropertyObject>("Qt.test", 1,0, "OverrideDefaultPropertyObject");
169 qmlRegisterType<MyRevisionedClass>("Qt.test",1,0,"MyRevisionedClass");
170 qmlRegisterType<MyDeleteObject>("Qt.test", 1,0, "MyDeleteObject");
171 qmlRegisterType<MyRevisionedClass,1>("Qt.test",1,1,"MyRevisionedClass");
173 // test scarce resource property binding post-evaluation optimisation
174 // and for testing memory usage in property var circular reference test
175 qmlRegisterType<ScarceResourceObject>("Qt.test", 1,0, "MyScarceResourceObject");
177 // Register the uncreatable base class
178 qmlRegisterRevision<MyRevisionedBaseClassRegistered,1>("Qt.test",1,1);
179 // MyRevisionedSubclass 1.0 uses MyRevisionedClass revision 0
180 qmlRegisterType<MyRevisionedSubclass>("Qt.test",1,0,"MyRevisionedSubclass");
181 // MyRevisionedSubclass 1.1 uses MyRevisionedClass revision 1
182 qmlRegisterType<MyRevisionedSubclass,1>("Qt.test",1,1,"MyRevisionedSubclass");
184 qmlRegisterExtendedType<QWidget,QWidgetDeclarativeUI>("Qt.test",1,0,"QWidget");
185 qmlRegisterType<QPlainTextEdit>("Qt.test",1,0,"QPlainTextEdit");
187 qRegisterMetaType<MyQmlObject::MyType>("MyQmlObject::MyType");
189 qmlRegisterModuleApi("Qt.test",1,0,script_api); // register (script) module API for an existing uri which contains elements
190 qmlRegisterModuleApi("Qt.test",1,0,qobject_api); // register (qobject) for an existing uri for which another module API was previously regd. Should replace!
191 qmlRegisterModuleApi("Qt.test.scriptApi",1,0,script_api); // register (script) module API for a uri which doesn't contain elements
192 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
193 qmlRegisterModuleApi("Qt.test.qobjectApi",1,0,qobject_api); // register (qobject) module API for a uri which doesn't contain elements
194 qmlRegisterModuleApi("Qt.test.qobjectApi",1,3,qobject_api); // register (qobject) module API for a uri which doesn't contain elements, minor version set
195 qmlRegisterModuleApi("Qt.test.qobjectApi",2,0,qobject_api); // register (qobject) module API for a uri which doesn't contain elements, major version set
196 qmlRegisterModuleApi("Qt.test.qobjectApiParented",1,0,qobject_api_engine_parent); // register (parented qobject) module API for a uri which doesn't contain elements
198 qRegisterMetaType<MyQmlObject::MyType>("MyEnum2");
199 qRegisterMetaType<Qt::MouseButtons>("Qt::MouseButtons");
201 qmlRegisterType<CircularReferenceObject>("Qt.test", 1, 0, "CircularReferenceObject");
202 qmlRegisterType<CircularReferenceHandle>("Qt.test", 1, 0, "CircularReferenceHandle");
204 qmlRegisterType<MyDynamicCreationDestructionObject>("Qt.test", 1, 0, "MyDynamicCreationDestructionObject");
205 qmlRegisterType<WriteCounter>("Qt.test", 1, 0, "WriteCounter");
207 qmlRegisterType<MySequenceConversionObject>("Qt.test", 1, 0, "MySequenceConversionObject");
210 #include "testtypes.moc"