diff options
author | Kent Hansen <khansen@trolltech.com> | 2009-07-10 12:27:16 (GMT) |
---|---|---|
committer | Kent Hansen <khansen@trolltech.com> | 2009-07-10 12:27:16 (GMT) |
commit | 75bc0215080fcafea9ba1bafedd980d9ac71bf9d (patch) | |
tree | 61156a5b2eaf3377b304beb6df59343750d21804 /tests/auto/qscriptclass | |
parent | 0579f4be2e79bb95c963a7e2368b6ee797c25e90 (diff) | |
download | Qt-75bc0215080fcafea9ba1bafedd980d9ac71bf9d.zip Qt-75bc0215080fcafea9ba1bafedd980d9ac71bf9d.tar.gz Qt-75bc0215080fcafea9ba1bafedd980d9ac71bf9d.tar.bz2 |
implement ability to dynamically change class of script objects
With an object created by QScriptEngine::newObject(), it should
be possible to call QScriptValue::setClass() to dynamically
change the behavior of that object. Similarly, it should be
possible to promote plain script objects to QObject (QVariant)
wrappers by calling the overload of QScriptEngine::newQObject()
(newVariant()) that takes a script object as the first argument.
This commit implements this capability.
The premise is the (internal) QScriptObject class, which inherits
JSC::JSObject. It reimplements all the methods for getting/setting
properties etc. Then there's a level of indirection to facilitate
dynamic change of the class: Each QScriptObject can have a
delegate associated with it that will handle operations on the
object. By default there is no delegate, so the object behaves as
a normal JS object, as you expect. However, once a delegate is set
(e.g., when QScriptValue::setScriptClass() is called),
QScriptObject will give the delegate the chance to handle the
object operation.
In addition to a delegate implementation for QScriptClass-based
objects, there are also delegates for QObject and QVariant
wrappers. These replace the QObjectWrapperObject and
QVariantWrapperObject classes.
Diffstat (limited to 'tests/auto/qscriptclass')
-rw-r--r-- | tests/auto/qscriptclass/tst_qscriptclass.cpp | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/tests/auto/qscriptclass/tst_qscriptclass.cpp b/tests/auto/qscriptclass/tst_qscriptclass.cpp index 963b221..e587b51 100644 --- a/tests/auto/qscriptclass/tst_qscriptclass.cpp +++ b/tests/auto/qscriptclass/tst_qscriptclass.cpp @@ -607,7 +607,9 @@ void tst_QScriptClass::newInstance() QVERIFY(arr.isArray()); QCOMPARE(arr.scriptClass(), (QScriptClass*)0); arr.setScriptClass(&cls); + QEXPECT_FAIL("", "Changing class of arbitrary script object is not allowed (it's OK)", Continue); QCOMPARE(arr.scriptClass(), (QScriptClass*)&cls); + QEXPECT_FAIL("", "Changing class of arbitrary script object is not allowed (it's OK)", Continue); QVERIFY(!arr.isArray()); QVERIFY(arr.isObject()); } |