**
** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
+** Contact: http://www.qt-project.org/
**
** This file is part of the test suite of the Qt Toolkit.
**
QCOMPARE(fun.prototype().strictlyEquals(eng.evaluate("Function.prototype")), true);
QCOMPARE(fun.call().isNull(), true);
- QCOMPARE(fun.construct().isObject(), true);
+ QCOMPARE(fun.callAsConstructor().isObject(), true);
}
}
QCOMPARE(fun.prototype().strictlyEquals(eng.evaluate("Function.prototype")), true);
QCOMPARE(fun.call().isNull(), true);
- QCOMPARE(fun.construct().isObject(), true);
+ QCOMPARE(fun.callAsConstructor().isObject(), true);
}
}
QCOMPARE(proto.propertyFlags("constructor"), QScriptValue::SkipInEnumeration);
QCOMPARE(fun.call().isNull(), true);
- QCOMPARE(fun.construct().isObject(), true);
+ QCOMPARE(fun.callAsConstructor().isObject(), true);
}
// whether the return value is correct
{
QCOMPARE(opaque.prototype().isValid(), true);
QEXPECT_FAIL("", "FIXME: newly created QObject's prototype is an JS Object", Continue);
QCOMPARE(opaque.prototype().isVariant(), true);
- QVERIFY(opaque.property("valueOf").call(opaque).isUndefined());
+ QVERIFY(opaque.property("valueOf").callWithInstance(opaque).isUndefined());
}
}
QJSEngine eng;
{
QJSValue object = eng.newVariant(QVariant(123));
- QJSValue value = object.property("valueOf").call(object);
+ QJSValue value = object.property("valueOf").callWithInstance(object);
QVERIFY(value.isNumber());
QCOMPARE(value.toInt(), 123);
QCOMPARE(object.toString(), QString::fromLatin1("123"));
}
{
QJSValue object = eng.newVariant(QVariant(QString::fromLatin1("hello")));
- QJSValue value = object.property("valueOf").call(object);
+ QJSValue value = object.property("valueOf").callWithInstance(object);
QVERIFY(value.isString());
QCOMPARE(value.toString(), QString::fromLatin1("hello"));
QCOMPARE(object.toString(), QString::fromLatin1("hello"));
}
{
QJSValue object = eng.newVariant(QVariant(false));
- QJSValue value = object.property("valueOf").call(object);
+ QJSValue value = object.property("valueOf").callWithInstance(object);
QVERIFY(value.isBool());
QCOMPARE(value.toBool(), false);
QCOMPARE(object.toString(), QString::fromLatin1("false"));
}
{
QJSValue object = eng.newVariant(QVariant(QPoint(10, 20)));
- QJSValue value = object.property("valueOf").call(object);
+ QJSValue value = object.property("valueOf").callWithInstance(object);
QVERIFY(value.isObject());
QVERIFY(value.strictlyEquals(object));
QCOMPARE(object.toString(), QString::fromLatin1("QVariant(QPoint)"));
QCOMPARE(r.toString(), QString::fromLatin1("/foo/gim"));
QJSValue rxCtor = eng.globalObject().property("RegExp");
- QJSValue r2 = rxCtor.call(QJSValue(), QJSValueList() << r);
+ QJSValue r2 = rxCtor.call(QJSValueList() << r);
QVERIFY(r2.isRegExp());
QVERIFY(r2.strictlyEquals(r));
- QJSValue r3 = rxCtor.call(QJSValue(), QJSValueList() << r << "gim");
+ QJSValue r3 = rxCtor.call(QJSValueList() << r << "gim");
QVERIFY(r3.isError());
QVERIFY(r3.toString().contains(QString::fromLatin1("TypeError"))); // Cannot supply flags when constructing one RegExp from another
- QJSValue r4 = rxCtor.call(QJSValue(), QJSValueList() << "foo" << "gim");
+ QJSValue r4 = rxCtor.call(QJSValueList() << "foo" << "gim");
QVERIFY(r4.isRegExp());
- QJSValue r5 = rxCtor.construct(QJSValueList() << r);
+ QJSValue r5 = rxCtor.callAsConstructor(QJSValueList() << r);
QVERIFY(r5.isRegExp());
QCOMPARE(r5.toString(), QString::fromLatin1("/foo/gim"));
// In JSC, constructing a RegExp from another produces the same identical object.
QVERIFY(!r5.strictlyEquals(r));
QEXPECT_FAIL("", "V8 and jsc ignores invalid flags", Continue); //https://bugs.webkit.org/show_bug.cgi?id=41614
- QJSValue r6 = rxCtor.construct(QJSValueList() << "foo" << "bar");
+ QJSValue r6 = rxCtor.callAsConstructor(QJSValueList() << "foo" << "bar");
QVERIFY(r6.isError());
// QVERIFY(r6.toString().contains(QString::fromLatin1("SyntaxError"))); // Invalid regular expression flag
QVERIFY(r8.isRegExp());
QCOMPARE(r8.toString(), QString::fromLatin1("/foo/gim"));
- QJSValue r9 = rxCtor.construct();
+ QJSValue r9 = rxCtor.callAsConstructor();
QVERIFY(r9.isRegExp());
QCOMPARE(r9.toString(), QString::fromLatin1("/(?:)/"));
- QJSValue r10 = rxCtor.construct(QJSValueList() << "" << "gim");
+ QJSValue r10 = rxCtor.callAsConstructor(QJSValueList() << "" << "gim");
QVERIFY(r10.isRegExp());
QCOMPARE(r10.toString(), QString::fromLatin1("/(?:)/gim"));
- QJSValue r11 = rxCtor.construct(QJSValueList() << "{1.*}" << "g");
+ QJSValue r11 = rxCtor.callAsConstructor(QJSValueList() << "{1.*}" << "g");
QVERIFY(r11.isRegExp());
QCOMPARE(r11.toString(), QString::fromLatin1("/{1.*}/g"));
}
static QScriptValue instanceofJS(const QScriptValue &inst, const QScriptValue &ctor)
{
return inst.engine()->evaluate("(function(inst, ctor) { return inst instanceof ctor; })")
- .call(QScriptValue(), QScriptValueList() << inst << ctor);
+ .call(QScriptValueList() << inst << ctor);
}
void tst_QJSEngine::newQMetaObject()
QCOMPARE(qclass.prototype().isObject(), true);
QCOMPARE(qclass2.prototype().isObject(), true);
- QScriptValue instance = qclass.construct();
+ QScriptValue instance = qclass.callAsConstructor();
QCOMPARE(instance.isQObject(), true);
QCOMPARE(instance.toQObject()->metaObject(), qclass.toQMetaObject());
QEXPECT_FAIL("", "FIXME: newQMetaObject not implemented properly yet", Abort);
QVERIFY(instance.instanceOf(qclass));
QVERIFY(instanceofJS(instance, qclass).strictlyEquals(true));
- QScriptValue instance2 = qclass2.construct();
+ QScriptValue instance2 = qclass2.callAsConstructor();
QCOMPARE(instance2.isQObject(), true);
QCOMPARE(instance2.toQObject()->metaObject(), qclass2.toQMetaObject());
QVERIFY(instance2.instanceOf(qclass2));
QScriptValueList args;
args << instance;
- QScriptValue instance3 = qclass.construct(args);
+ QScriptValue instance3 = qclass.callAsConstructor(args);
QCOMPARE(instance3.isQObject(), true);
QCOMPARE(instance3.toQObject()->parent(), instance.toQObject());
QVERIFY(instance3.instanceOf(qclass));
QVERIFY(instanceofJS(ret, qclass).strictlyEquals(false));
}
{
- QScriptValue ret = qclass3.construct();
+ QScriptValue ret = qclass3.callAsConstructor();
QVERIFY(ret.isObject());
QVERIFY(ret.property("isCalledAsConstructor").isBool());
QVERIFY(ret.property("isCalledAsConstructor").toBool());
}
// subclassing
- qclass2.setProperty("prototype", qclass.construct());
- QVERIFY(qclass2.construct().instanceOf(qclass));
- QVERIFY(instanceofJS(qclass2.construct(), qclass).strictlyEquals(true));
+ qclass2.setProperty("prototype", qclass.callAsConstructor());
+ QVERIFY(qclass2.callAsConstructor().instanceOf(qclass));
+ QVERIFY(instanceofJS(qclass2.callAsConstructor(), qclass).strictlyEquals(true));
// with meta-constructor
QScriptValue qclass4 = eng.newQMetaObject(&QObject::staticMetaObject);
{
- QScriptValue inst = qclass4.construct();
+ QScriptValue inst = qclass4.callAsConstructor();
QVERIFY(inst.isQObject());
QVERIFY(inst.toQObject() != 0);
QCOMPARE(inst.toQObject()->parent(), (QObject*)0);
QVERIFY(instanceofJS(inst, qclass3).strictlyEquals(false));
}
{
- QScriptValue inst = qclass4.construct(QScriptValueList() << eng.newQObject(this));
+ QScriptValue inst = qclass4.callAsConstructor(QScriptValueList() << eng.newQObject(this));
QVERIFY(inst.isQObject());
QVERIFY(inst.toQObject() != 0);
QCOMPARE(inst.toQObject()->parent(), (QObject*)this);
}
// From QScriptValue::call()
{
- QScriptValue result = fun.call(eng.evaluate("p = { id:'foo' }") , QScriptValueList() );
+ QScriptValue result = fun.callWithInstance(eng.evaluate("p = { id:'foo' }") , QScriptValueList() );
QCOMPARE(result.property("local_bar").toString(), QString("local"));
QCOMPARE(result.property("thisObjectIdBefore").toString(), QString("foo"));
QCOMPARE(result.property("thisObjectIdAfter").toString(), QString("foo"));
static QScriptValue recurse2(QScriptContext *ctx, QScriptEngine *eng)
{
Q_UNUSED(eng);
- return ctx->callee().construct();
+ return ctx->callee().callAsConstructor();
}
void tst_QJSEngine::infiniteRecursion()
}
{
QScriptValue fun = eng.newFunction(recurse2);
- QScriptValue ret = fun.construct();
+ QScriptValue ret = fun.callAsConstructor();
QCOMPARE(ret.isError(), true);
QCOMPARE(ret.toString(), stackOverflowError);
}
}
{
- QScriptValue ret = toBaz.call(scriptZoo, QScriptValueList() << baz2Value);
+ QScriptValue ret = toBaz.callWithInstance(scriptZoo, QScriptValueList() << baz2Value);
QVERIFY(ret.isError());
QCOMPARE(ret.toString(), QLatin1String("TypeError: incompatible type of argument(s) in call to toBaz(); candidates were\n toBaz(Bar*)"));
}
}
{
- QScriptValue ret = toBaz.call(scriptZoo, QScriptValueList() << baz2Value);
+ QScriptValue ret = toBaz.callWithInstance(scriptZoo, QScriptValueList() << baz2Value);
QEXPECT_FAIL("", "Cannot convert Baz* to Bar*", Continue);
QVERIFY(!ret.isError());
QEXPECT_FAIL("", "Cannot convert Baz* to Bar*", Continue);
QCOMPARE(eng.processEventsInterval(), 100);
if (x) script.call();
- else script.construct();
+ else script.callAsConstructor();
QVERIFY(!eng.hasUncaughtException());
QVERIFY(receiver.received);
{
QJSValue ret = eng.evaluate("foo('bar')");
QVERIFY(ret.isCallable());
- QJSValue ret2 = ret.call(QJSValue());
+ QJSValue ret2 = ret.call();
QCOMPARE(ret2.toString(), QString::fromLatin1("bar"));
QVERIFY(!eng.globalObject().property("bar").isValid());
QVERIFY(!eng.globalObject().property("baz").isValid());
{
QJSValue ret = eng.evaluate("foo('baz')");
QVERIFY(ret.isCallable());
- QJSValue ret2 = ret.call(QJSValue());
+ QJSValue ret2 = ret.call();
QCOMPARE(ret2.toString(), QString::fromLatin1("baz"));
QVERIFY(!eng.globalObject().property("bar").isValid());
QVERIFY(!eng.globalObject().property("baz").isValid());
static QScriptValue callQsTr(QScriptContext *ctx, QScriptEngine *eng)
{
- return eng->globalObject().property("qsTr").call(ctx->thisObject(), ctx->argumentsObject());
+ return eng->globalObject().property("qsTr").callWithInstance(ctx->thisObject(), ctx->argumentsObject());
}
void tst_QJSEngine::translateScript_callQsTrFromNative()
// There is no context, but it shouldn't crash
QCOMPARE(engine.globalObject().property("qsTr").call(
- QScriptValue(), QScriptValueList() << "One").toString(), QString::fromLatin1("One"));
+ QScriptValueList() << "One").toString(), QString::fromLatin1("One"));
}
void tst_QJSEngine::translateWithInvalidArgs_data()
QScriptEngine eng;
{
QScriptValue fun = eng.newFunction(counter);
- QScriptValue cnt = fun.call(QScriptValue(), QScriptValueList() << 123);
+ QScriptValue cnt = fun.call(QScriptValueList() << 123);
QVERIFY(cnt.isCallable());
{
QScriptValue ret = cnt.call();
}
{
QScriptValue fun = eng.newFunction(counter_hybrid);
- QScriptValue cnt = fun.call(QScriptValue(), QScriptValueList() << 123);
+ QScriptValue cnt = fun.call(QScriptValueList() << 123);
QVERIFY(cnt.isCallable());
{
QScriptValue ret = cnt.call();
{
QScriptValue fun = eng.newFunction(createProgram);
QScriptProgram program = qscriptvalue_cast<QScriptProgram>(
- fun.call(QScriptValue(), QScriptValueList() << "a + 1"));
+ fun.call(QScriptValueList() << "a + 1"));
QVERIFY(!program.isNull());
eng.globalObject().setProperty("a", QScriptValue());
{
QVERIFY(rexp.isCallable());
QJSValue func = eng.evaluate("(function(string, regexp) { return string.match(regexp); })");
- QJSValue result = func.call(QJSValue(), QJSValueList() << string << rexp);
+ QJSValue result = func.call(QJSValueList() << string << rexp);
rx.indexIn(string);
for (int i = 0; i <= rx.captureCount(); i++) {
QJSValue jsDate = eng.evaluate(QString::fromLatin1("new Date(%0)").arg(secs * 1000.0));
QDateTime qtDate = jsDate.toDateTime();
QString qtUTCDateStr = qtDate.toUTC().toString(Qt::ISODate);
- QString jsUTCDateStr = jsDate.property("toISOString").call(jsDate).toString();
+ QString jsUTCDateStr = jsDate.property("toISOString").callWithInstance(jsDate).toString();
jsUTCDateStr.remove(jsUTCDateStr.length() - 5, 4); // get rid of milliseconds (".000")
if (qtUTCDateStr != jsUTCDateStr)
QFAIL(qPrintable(jsDate.toString()));
QJSEngine eng;
for (int i = 0; i < 8000; ++i) {
QJSValue jsDate = eng.newDate(qtDate);
- QString jsUTCDateStr = jsDate.property("toISOString").call(jsDate).toString();
+ QString jsUTCDateStr = jsDate.property("toISOString").callWithInstance(jsDate).toString();
jsUTCDateStr.remove(jsUTCDateStr.length() - 5, 4); // get rid of milliseconds (".000")
QString qtUTCDateStr = qtDate.toUTC().toString(Qt::ISODate);
if (jsUTCDateStr != qtUTCDateStr)
QCOMPARE(meta.toQMetaObject(), &QScriptEngine::staticMetaObject);
// Because of missing Q_SCRIPT_DECLARE_QMETAOBJECT() for QScriptEngine.
QEXPECT_FAIL("", "FIXME: because construct never returns invalid values", Continue);
- QVERIFY(!meta.construct().isValid());
+ QVERIFY(!meta.callAsConstructor().isValid());
}
{
QScriptValue meta = eng.scriptValueFromQMetaObject<QStandardItemModel>();
QVERIFY(meta.isQMetaObject());
QCOMPARE(meta.toQMetaObject(), &QStandardItemModel::staticMetaObject);
- QScriptValue obj = meta.construct(QScriptValueList() << eng.newQObject(&eng));
+ QScriptValue obj = meta.callAsConstructor(QScriptValueList() << eng.newQObject(&eng));
QVERIFY(obj.isQObject());
QStandardItemModel *model = qobject_cast<QStandardItemModel*>(obj.toQObject());
QVERIFY(model != 0);