diff options
author | Olivier Goffart <ogoffart@trolltech.com> | 2009-08-03 14:06:30 (GMT) |
---|---|---|
committer | Olivier Goffart <ogoffart@trolltech.com> | 2009-08-03 14:06:30 (GMT) |
commit | 42aa031a16522bdcabe166881205bfa4607da693 (patch) | |
tree | 1c3ab542c188b4e52128aea7c1fb0dafdf1a98f0 /tests/auto/qscriptcontext | |
parent | 31263060c53597bfc7677ccc526cc8a19f62b387 (diff) | |
download | Qt-42aa031a16522bdcabe166881205bfa4607da693.zip Qt-42aa031a16522bdcabe166881205bfa4607da693.tar.gz Qt-42aa031a16522bdcabe166881205bfa4607da693.tar.bz2 |
QScriptContext::calledAsConstructor also works with non-native function
Use the opcode to see if it was called with op_construct
This could also work with native function, but not when they are called
with QScriptValue::call() or QScriptValue::construct()
Diffstat (limited to 'tests/auto/qscriptcontext')
-rw-r--r-- | tests/auto/qscriptcontext/tst_qscriptcontext.cpp | 33 |
1 files changed, 28 insertions, 5 deletions
diff --git a/tests/auto/qscriptcontext/tst_qscriptcontext.cpp b/tests/auto/qscriptcontext/tst_qscriptcontext.cpp index 4726815..7a363ac 100644 --- a/tests/auto/qscriptcontext/tst_qscriptcontext.cpp +++ b/tests/auto/qscriptcontext/tst_qscriptcontext.cpp @@ -764,15 +764,21 @@ static QScriptValue storeCalledAsConstructorV2(QScriptContext *ctx, QScriptEngin return eng->undefinedValue(); } +static QScriptValue storeCalledAsConstructorV3(QScriptContext *ctx, QScriptEngine *eng) +{ + ctx->callee().setProperty("calledAsConstructor", ctx->parentContext()->isCalledAsConstructor()); + return eng->undefinedValue(); +} + void tst_QScriptContext::calledAsConstructor() { QScriptEngine eng; + QScriptValue fun1 = eng.newFunction(storeCalledAsConstructor); { - QScriptValue fun = eng.newFunction(storeCalledAsConstructor); - fun.call(); - QVERIFY(!fun.property("calledAsConstructor").toBool()); - fun.construct(); - QVERIFY(fun.property("calledAsConstructor").toBool()); + fun1.call(); + QVERIFY(!fun1.property("calledAsConstructor").toBool()); + fun1.construct(); + QVERIFY(fun1.property("calledAsConstructor").toBool()); } { QScriptValue fun = eng.newFunction(storeCalledAsConstructorV2, (void*)0); @@ -781,6 +787,23 @@ void tst_QScriptContext::calledAsConstructor() fun.construct(); QVERIFY(fun.property("calledAsConstructor").toBool()); } + { + eng.globalObject().setProperty("fun1", fun1); + eng.evaluate("fun1();"); + QVERIFY(!fun1.property("calledAsConstructor").toBool()); + eng.evaluate("new fun1();"); + QVERIFY(fun1.property("calledAsConstructor").toBool()); + } + { + QScriptValue fun3 = eng.newFunction(storeCalledAsConstructorV3); + eng.globalObject().setProperty("fun3", fun3); + eng.evaluate("function test() { fun3() }"); + eng.evaluate("test();"); + QVERIFY(!fun3.property("calledAsConstructor").toBool()); + eng.evaluate("new test();"); + QVERIFY(fun3.property("calledAsConstructor").toBool()); + } + } static QScriptValue argumentsObjectInNative_test1(QScriptContext *ctx, QScriptEngine *) |