summaryrefslogtreecommitdiff
path: root/tests/benchmarks/script/qscriptvalue/tst_qscriptvalue.cpp
diff options
context:
space:
mode:
authorQt by Nokia <qt-info@nokia.com>2011-04-27 12:05:43 +0200
committeraxis <qt-info@nokia.com>2011-04-27 12:05:43 +0200
commitc4af45c2914381172e1bd7ee528481edaa2fff1a (patch)
tree01265e109316fda93845e1c96c5e566d870f51d0 /tests/benchmarks/script/qscriptvalue/tst_qscriptvalue.cpp
downloadqtscript-c4af45c2914381172e1bd7ee528481edaa2fff1a.tar.gz
Initial import from the monolithic Qt.
This is the beginning of revision history for this module. If you want to look at revision history older than this, please refer to the Qt Git wiki for how to use Git history grafting. At the time of writing, this wiki is located here: http://qt.gitorious.org/qt/pages/GitIntroductionWithQt If you have already performed the grafting and you don't see any history beyond this commit, try running "git log" with the "--follow" argument. Branched from the monolithic repo, Qt master branch, at commit 896db169ea224deb96c59ce8af800d019de63f12
Diffstat (limited to 'tests/benchmarks/script/qscriptvalue/tst_qscriptvalue.cpp')
-rw-r--r--tests/benchmarks/script/qscriptvalue/tst_qscriptvalue.cpp1022
1 files changed, 1022 insertions, 0 deletions
diff --git a/tests/benchmarks/script/qscriptvalue/tst_qscriptvalue.cpp b/tests/benchmarks/script/qscriptvalue/tst_qscriptvalue.cpp
new file mode 100644
index 0000000..f3bd745
--- /dev/null
+++ b/tests/benchmarks/script/qscriptvalue/tst_qscriptvalue.cpp
@@ -0,0 +1,1022 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <qtest.h>
+#include <QtScript>
+
+Q_DECLARE_METATYPE(QScriptValue)
+
+//TESTED_FILES=
+
+class tst_QScriptValue : public QObject
+{
+ Q_OBJECT
+
+public:
+ tst_QScriptValue();
+ virtual ~tst_QScriptValue();
+
+public slots:
+ void init();
+ void cleanup();
+
+private slots:
+ void boolConstructor();
+ void floatConstructor();
+ void numberConstructor();
+ void stringConstructor();
+ void nullConstructor();
+ void undefinedConstructor();
+ void boolConstructorWithEngine();
+ void floatConstructorWithEngine();
+ void intConstructorWithEngine();
+ void stringConstructorWithEngine();
+ void nullConstructorWithEngine();
+ void undefinedConstructorWithEngine();
+ void copyConstructor_data();
+ void copyConstructor();
+ void call_data();
+ void call();
+ void construct_data();
+ void construct();
+ void data();
+ void setData();
+ void data_noData_data();
+ void data_noData();
+ void engine_data();
+ void engine();
+ void equalsSelf_data();
+ void equalsSelf();
+ void lessThanSelf_data();
+ void lessThanSelf();
+ void strictlyEqualsSelf_data();
+ void strictlyEqualsSelf();
+ void instanceOf();
+ void isArray_data();
+ void isArray();
+ void isBool_data();
+ void isBool();
+ void isDate_data();
+ void isDate();
+ void isError_data();
+ void isError();
+ void isFunction_data();
+ void isFunction();
+ void isNull_data();
+ void isNull();
+ void isNumber_data();
+ void isNumber();
+ void isObject_data();
+ void isObject();
+ void isQMetaObject_data();
+ void isQMetaObject();
+ void isQObject_data();
+ void isQObject();
+ void isRegExp_data();
+ void isRegExp();
+ void isString_data();
+ void isString();
+ void isUndefined_data();
+ void isUndefined();
+ void isValid_data();
+ void isValid();
+ void isVariant_data();
+ void isVariant();
+ void toBool_data();
+ void toBool();
+ void toDateTime_data();
+ void toDateTime();
+ void toInt32_data();
+ void toInt32();
+ void toInteger_data();
+ void toInteger();
+ void toNumber_data();
+ void toNumber();
+ void toRegExp_data();
+ void toRegExp();
+ void toString_data();
+ void toString();
+ void toUInt16_data();
+ void toUInt16();
+ void toUInt32_data();
+ void toUInt32();
+ void toQMetaObject_data();
+ void toQMetaObject();
+ void toQObject_data();
+ void toQObject();
+ void toVariant_data();
+ void toVariant();
+ void property_data();
+ void property();
+ void propertyById_data();
+ void propertyById();
+ void propertyByIndex();
+ void setProperty_data();
+ void setProperty();
+ void setPropertyById_data();
+ void setPropertyById();
+ void setPropertyByIndex();
+ void propertyFlags_data();
+ void propertyFlags();
+ void propertyFlagsById_data();
+ void propertyFlagsById();
+ void prototype_data();
+ void prototype();
+ void setPrototype();
+ void scriptClass_data();
+ void scriptClass();
+ void setScriptClass();
+ void readMetaProperty();
+ void writeMetaProperty();
+
+private:
+ void defineStandardTestValues();
+ void newEngine()
+ {
+ delete m_engine;
+ m_engine = new QScriptEngine;
+ }
+
+ QScriptEngine *m_engine;
+};
+
+tst_QScriptValue::tst_QScriptValue()
+ : m_engine(0)
+{
+}
+
+tst_QScriptValue::~tst_QScriptValue()
+{
+ delete m_engine;
+}
+
+void tst_QScriptValue::init()
+{
+}
+
+void tst_QScriptValue::cleanup()
+{
+}
+
+void tst_QScriptValue::boolConstructor()
+{
+ QBENCHMARK {
+ QScriptValue val(true);
+ }
+}
+
+void tst_QScriptValue::floatConstructor()
+{
+ QBENCHMARK {
+ QScriptValue val(123.0);
+ }
+}
+
+void tst_QScriptValue::numberConstructor()
+{
+ QBENCHMARK {
+ (void)QScriptValue(123);
+ }
+}
+
+void tst_QScriptValue::stringConstructor()
+{
+ QString str = QString::fromLatin1("ciao");
+ QBENCHMARK {
+ (void)QScriptValue(str);
+ }
+}
+
+void tst_QScriptValue::nullConstructor()
+{
+ QBENCHMARK {
+ QScriptValue val(QScriptValue::NullValue);
+ }
+}
+
+void tst_QScriptValue::undefinedConstructor()
+{
+ QBENCHMARK {
+ QScriptValue val(QScriptValue::UndefinedValue);
+ }
+}
+
+void tst_QScriptValue::boolConstructorWithEngine()
+{
+ newEngine();
+ QBENCHMARK {
+ QScriptValue val(m_engine, true);
+ }
+}
+
+void tst_QScriptValue::floatConstructorWithEngine()
+{
+ newEngine();
+ QBENCHMARK {
+ QScriptValue val(m_engine, 123.0);
+ }
+}
+
+void tst_QScriptValue::intConstructorWithEngine()
+{
+ newEngine();
+ QBENCHMARK {
+ (void)QScriptValue(m_engine, 123);
+ }
+}
+
+void tst_QScriptValue::stringConstructorWithEngine()
+{
+ newEngine();
+ QString str = QString::fromLatin1("ciao");
+ QBENCHMARK {
+ (void)QScriptValue(m_engine, str);
+ }
+}
+
+void tst_QScriptValue::nullConstructorWithEngine()
+{
+ newEngine();
+ QBENCHMARK {
+ QScriptValue val(m_engine, QScriptValue::NullValue);
+ }
+}
+
+void tst_QScriptValue::undefinedConstructorWithEngine()
+{
+ newEngine();
+ QBENCHMARK {
+ QScriptValue val(m_engine, QScriptValue::UndefinedValue);
+ }
+}
+
+void tst_QScriptValue::copyConstructor_data()
+{
+ defineStandardTestValues();
+}
+
+void tst_QScriptValue::copyConstructor()
+{
+ QFETCH(QScriptValue, val);
+ QBENCHMARK {
+ QScriptValue copy(val);
+ }
+}
+
+void tst_QScriptValue::call_data()
+{
+ newEngine();
+ QTest::addColumn<QString>("code");
+ QTest::newRow("empty function") << QString::fromLatin1("(function(){})");
+ QTest::newRow("function returning number") << QString::fromLatin1("(function(){ return 123; })");
+ QTest::newRow("closure") << QString::fromLatin1("(function(a, b){ return function() { return a + b; }; })(1, 2)");
+}
+
+void tst_QScriptValue::call()
+{
+ QFETCH(QString, code);
+ QScriptValue fun = m_engine->evaluate(code);
+ QVERIFY(fun.isFunction());
+ QBENCHMARK {
+ (void)fun.call();
+ }
+}
+
+void tst_QScriptValue::construct_data()
+{
+ newEngine();
+ QTest::addColumn<QString>("code");
+ QTest::newRow("empty function") << QString::fromLatin1("(function(){})");
+ QTest::newRow("simple constructor") << QString::fromLatin1("(function(){ this.x = 10; this.y = 20; })");
+}
+
+void tst_QScriptValue::construct()
+{
+ QFETCH(QString, code);
+ QScriptValue fun = m_engine->evaluate(code);
+ QVERIFY(fun.isFunction());
+ QBENCHMARK {
+ (void)fun.construct();
+ }
+}
+
+void tst_QScriptValue::data()
+{
+ newEngine();
+ QScriptValue obj = m_engine->newObject();
+ obj.setData(QScriptValue(m_engine, 123));
+ QBENCHMARK {
+ obj.data();
+ }
+}
+
+void tst_QScriptValue::setData()
+{
+ newEngine();
+ QScriptValue obj = m_engine->newObject();
+ QScriptValue val(m_engine, 123);
+ QBENCHMARK {
+ obj.setData(val);
+ }
+}
+
+void tst_QScriptValue::data_noData_data()
+{
+ defineStandardTestValues();
+}
+
+void tst_QScriptValue::data_noData()
+{
+ QFETCH(QScriptValue, val);
+ QVERIFY(!val.data().isValid());
+ QBENCHMARK {
+ val.data();
+ }
+}
+
+void tst_QScriptValue::engine_data()
+{
+ defineStandardTestValues();
+}
+
+void tst_QScriptValue::engine()
+{
+ QFETCH(QScriptValue, val);
+ QBENCHMARK {
+ val.engine();
+ }
+}
+
+void tst_QScriptValue::equalsSelf_data()
+{
+ defineStandardTestValues();
+}
+
+void tst_QScriptValue::equalsSelf()
+{
+ QFETCH(QScriptValue, val);
+ QBENCHMARK {
+ val.equals(val);
+ }
+}
+
+void tst_QScriptValue::lessThanSelf_data()
+{
+ defineStandardTestValues();
+}
+
+void tst_QScriptValue::lessThanSelf()
+{
+ QFETCH(QScriptValue, val);
+ QBENCHMARK {
+ val.lessThan(val);
+ }
+}
+
+void tst_QScriptValue::strictlyEqualsSelf_data()
+{
+ defineStandardTestValues();
+}
+
+void tst_QScriptValue::strictlyEqualsSelf()
+{
+ QFETCH(QScriptValue, val);
+ QBENCHMARK {
+ val.strictlyEquals(val);
+ }
+}
+
+void tst_QScriptValue::instanceOf()
+{
+ newEngine();
+ QScriptValue arrayCtor = m_engine->globalObject().property("Array");
+ QScriptValue array = arrayCtor.construct();
+ QVERIFY(array.instanceOf(arrayCtor));
+ QBENCHMARK {
+ array.instanceOf(arrayCtor);
+ }
+}
+
+void tst_QScriptValue::isArray_data()
+{
+ defineStandardTestValues();
+}
+
+void tst_QScriptValue::isArray()
+{
+ QFETCH(QScriptValue, val);
+ QBENCHMARK {
+ val.isArray();
+ }
+}
+
+void tst_QScriptValue::isBool_data()
+{
+ defineStandardTestValues();
+}
+
+void tst_QScriptValue::isBool()
+{
+ QFETCH(QScriptValue, val);
+ QBENCHMARK {
+ val.isBool();
+ }
+}
+
+void tst_QScriptValue::isDate_data()
+{
+ defineStandardTestValues();
+}
+
+void tst_QScriptValue::isDate()
+{
+ QFETCH(QScriptValue, val);
+ QBENCHMARK {
+ val.isDate();
+ }
+}
+
+void tst_QScriptValue::isError_data()
+{
+ defineStandardTestValues();
+}
+
+void tst_QScriptValue::isError()
+{
+ QFETCH(QScriptValue, val);
+ QBENCHMARK {
+ val.isError();
+ }
+}
+
+void tst_QScriptValue::isFunction_data()
+{
+ defineStandardTestValues();
+}
+
+void tst_QScriptValue::isFunction()
+{
+ QFETCH(QScriptValue, val);
+ QBENCHMARK {
+ val.isFunction();
+ }
+}
+
+void tst_QScriptValue::isNull_data()
+{
+ defineStandardTestValues();
+}
+
+void tst_QScriptValue::isNull()
+{
+ QFETCH(QScriptValue, val);
+ QBENCHMARK {
+ val.isNull();
+ }
+}
+
+void tst_QScriptValue::isNumber_data()
+{
+ defineStandardTestValues();
+}
+
+void tst_QScriptValue::isNumber()
+{
+ QFETCH(QScriptValue, val);
+ QBENCHMARK {
+ val.isNumber();
+ }
+}
+
+void tst_QScriptValue::isObject_data()
+{
+ defineStandardTestValues();
+}
+
+void tst_QScriptValue::isObject()
+{
+ QFETCH(QScriptValue, val);
+ QBENCHMARK {
+ val.isObject();
+ }
+}
+
+void tst_QScriptValue::isQMetaObject_data()
+{
+ defineStandardTestValues();
+}
+
+void tst_QScriptValue::isQMetaObject()
+{
+ QFETCH(QScriptValue, val);
+ QBENCHMARK {
+ val.isQMetaObject();
+ }
+}
+
+void tst_QScriptValue::isQObject_data()
+{
+ defineStandardTestValues();
+}
+
+void tst_QScriptValue::isQObject()
+{
+ QFETCH(QScriptValue, val);
+ QBENCHMARK {
+ val.isQObject();
+ }
+}
+
+void tst_QScriptValue::isRegExp_data()
+{
+ defineStandardTestValues();
+}
+
+void tst_QScriptValue::isRegExp()
+{
+ QFETCH(QScriptValue, val);
+ QBENCHMARK {
+ val.isRegExp();
+ }
+}
+
+void tst_QScriptValue::isString_data()
+{
+ defineStandardTestValues();
+}
+
+void tst_QScriptValue::isString()
+{
+ QFETCH(QScriptValue, val);
+ QBENCHMARK {
+ val.isString();
+ }
+}
+
+void tst_QScriptValue::isUndefined_data()
+{
+ defineStandardTestValues();
+}
+
+void tst_QScriptValue::isUndefined()
+{
+ QFETCH(QScriptValue, val);
+ QBENCHMARK {
+ val.isUndefined();
+ }
+}
+
+void tst_QScriptValue::isValid_data()
+{
+ defineStandardTestValues();
+}
+
+void tst_QScriptValue::isValid()
+{
+ QFETCH(QScriptValue, val);
+ QBENCHMARK {
+ val.isValid();
+ }
+}
+
+void tst_QScriptValue::isVariant_data()
+{
+ defineStandardTestValues();
+}
+
+void tst_QScriptValue::isVariant()
+{
+ QFETCH(QScriptValue, val);
+ QBENCHMARK {
+ val.isVariant();
+ }
+}
+
+void tst_QScriptValue::toBool_data()
+{
+ defineStandardTestValues();
+}
+
+void tst_QScriptValue::toBool()
+{
+ QFETCH(QScriptValue, val);
+ QBENCHMARK {
+ val.toBool();
+ }
+}
+
+void tst_QScriptValue::toDateTime_data()
+{
+ defineStandardTestValues();
+}
+
+void tst_QScriptValue::toDateTime()
+{
+ QFETCH(QScriptValue, val);
+ QBENCHMARK {
+ val.toDateTime();
+ }
+}
+
+void tst_QScriptValue::toInt32_data()
+{
+ defineStandardTestValues();
+}
+
+void tst_QScriptValue::toInt32()
+{
+ QFETCH(QScriptValue, val);
+ QBENCHMARK {
+ val.toInt32();
+ }
+}
+
+void tst_QScriptValue::toInteger_data()
+{
+ defineStandardTestValues();
+}
+
+void tst_QScriptValue::toInteger()
+{
+ QFETCH(QScriptValue, val);
+ QBENCHMARK {
+ val.toInteger();
+ }
+}
+
+void tst_QScriptValue::toNumber_data()
+{
+ defineStandardTestValues();
+}
+
+void tst_QScriptValue::toNumber()
+{
+ QFETCH(QScriptValue, val);
+ QBENCHMARK {
+ val.toNumber();
+ }
+}
+
+void tst_QScriptValue::toRegExp_data()
+{
+ defineStandardTestValues();
+}
+
+void tst_QScriptValue::toRegExp()
+{
+ QFETCH(QScriptValue, val);
+ QBENCHMARK {
+ val.toRegExp();
+ }
+}
+
+void tst_QScriptValue::toString_data()
+{
+ defineStandardTestValues();
+}
+
+void tst_QScriptValue::toString()
+{
+ QFETCH(QScriptValue, val);
+ QBENCHMARK {
+ (void)val.toString();
+ }
+}
+
+void tst_QScriptValue::toQMetaObject_data()
+{
+ defineStandardTestValues();
+}
+
+void tst_QScriptValue::toQMetaObject()
+{
+ QFETCH(QScriptValue, val);
+ QBENCHMARK {
+ val.toQMetaObject();
+ }
+}
+
+void tst_QScriptValue::toQObject_data()
+{
+ defineStandardTestValues();
+}
+
+void tst_QScriptValue::toQObject()
+{
+ QFETCH(QScriptValue, val);
+ QBENCHMARK {
+ (void)val.toQObject();
+ }
+}
+
+void tst_QScriptValue::toUInt16_data()
+{
+ defineStandardTestValues();
+}
+
+void tst_QScriptValue::toUInt16()
+{
+ QFETCH(QScriptValue, val);
+ QBENCHMARK {
+ val.toUInt16();
+ }
+}
+
+void tst_QScriptValue::toUInt32_data()
+{
+ defineStandardTestValues();
+}
+
+void tst_QScriptValue::toUInt32()
+{
+ QFETCH(QScriptValue, val);
+ QBENCHMARK {
+ val.toUInt32();
+ }
+}
+
+void tst_QScriptValue::toVariant_data()
+{
+ defineStandardTestValues();
+}
+
+void tst_QScriptValue::toVariant()
+{
+ QFETCH(QScriptValue, val);
+ QBENCHMARK {
+ val.toVariant();
+ }
+}
+void tst_QScriptValue::property_data()
+{
+ QTest::addColumn<QString>("propertyName");
+ QTest::addColumn<bool>("create");
+ QTest::newRow("foo") << QString::fromLatin1("foo") << true;
+ QTest::newRow("hasOwnProperty") << QString::fromLatin1("hasOwnProperty") << false; // From Object.prototype.
+ QTest::newRow("noSuchProperty") << QString::fromLatin1("noSuchProperty") << false;
+}
+
+void tst_QScriptValue::property()
+{
+ QFETCH(QString, propertyName);
+ QFETCH(bool, create);
+ newEngine();
+ QScriptValue obj = m_engine->newObject();
+ if (create)
+ obj.setProperty(propertyName, 123);
+ QBENCHMARK {
+ (void)obj.property(propertyName);
+ }
+}
+
+void tst_QScriptValue::propertyById_data()
+{
+ property_data();
+}
+
+void tst_QScriptValue::propertyById()
+{
+ QFETCH(QString, propertyName);
+ QFETCH(bool, create);
+ newEngine();
+ QScriptValue obj = m_engine->newObject();
+ QScriptString id = m_engine->toStringHandle(propertyName);
+ if (create)
+ obj.setProperty(id, 123);
+ QBENCHMARK {
+ obj.property(id);
+ }
+}
+
+void tst_QScriptValue::propertyByIndex()
+{
+ newEngine();
+ QScriptValue obj = m_engine->newObject();
+ obj.setProperty(123, 456);
+ QBENCHMARK {
+ obj.property(123);
+ }
+}
+
+void tst_QScriptValue::setProperty_data()
+{
+ newEngine();
+ QTest::addColumn<QString>("propertyName");
+ QTest::addColumn<QScriptValue>("val");
+ QTest::newRow("foo") << QString::fromLatin1("foo") << QScriptValue(123);
+ QTest::newRow("bar") << QString::fromLatin1("bar") << QScriptValue(m_engine, 123);
+ QTest::newRow("baz") << QString::fromLatin1("baz") << QScriptValue();
+ QTest::newRow("toString") << QString::fromLatin1("toString") << QScriptValue(m_engine, true);
+}
+
+void tst_QScriptValue::setProperty()
+{
+ QFETCH(QString, propertyName);
+ QFETCH(QScriptValue, val);
+ QScriptValue obj = m_engine->newObject();
+ QBENCHMARK {
+ obj.setProperty(propertyName, val);
+ }
+}
+
+void tst_QScriptValue::setPropertyById_data()
+{
+ setProperty_data();
+}
+
+void tst_QScriptValue::setPropertyById()
+{
+ QFETCH(QString, propertyName);
+ QFETCH(QScriptValue, val);
+ QScriptValue obj = m_engine->newObject();
+ QScriptString id = m_engine->toStringHandle(propertyName);
+ QBENCHMARK {
+ obj.setProperty(id, val);
+ }
+}
+
+void tst_QScriptValue::setPropertyByIndex()
+{
+ newEngine();
+ QScriptValue obj = m_engine->newObject();
+ QScriptValue val(456);
+ QBENCHMARK {
+ obj.setProperty(123, 456);
+ }
+}
+
+void tst_QScriptValue::propertyFlags_data()
+{
+ property_data();
+}
+
+void tst_QScriptValue::propertyFlags()
+{
+ QFETCH(QString, propertyName);
+ QFETCH(bool, create);
+ newEngine();
+ QScriptValue obj = m_engine->newObject();
+ if (create)
+ obj.setProperty(propertyName, 123, QScriptValue::SkipInEnumeration | QScriptValue::ReadOnly);
+ QBENCHMARK {
+ (void)obj.propertyFlags(propertyName);
+ }
+}
+
+void tst_QScriptValue::propertyFlagsById_data()
+{
+ propertyFlags_data();
+}
+
+void tst_QScriptValue::propertyFlagsById()
+{
+ QFETCH(QString, propertyName);
+ QFETCH(bool, create);
+ newEngine();
+ QScriptValue obj = m_engine->newObject();
+ QScriptString id = m_engine->toStringHandle(propertyName);
+ if (create)
+ obj.setProperty(id, 123, QScriptValue::SkipInEnumeration | QScriptValue::ReadOnly);
+ QBENCHMARK {
+ obj.propertyFlags(id);
+ }
+}
+
+void tst_QScriptValue::prototype_data()
+{
+ defineStandardTestValues();
+}
+
+void tst_QScriptValue::prototype()
+{
+ QFETCH(QScriptValue, val);
+ QBENCHMARK {
+ val.prototype();
+ }
+}
+
+void tst_QScriptValue::setPrototype()
+{
+ newEngine();
+ QScriptValue obj = m_engine->newObject();
+ QScriptValue proto = m_engine->newObject();
+ QBENCHMARK {
+ obj.setPrototype(proto);
+ }
+}
+
+void tst_QScriptValue::scriptClass_data()
+{
+ defineStandardTestValues();
+}
+
+void tst_QScriptValue::scriptClass()
+{
+ QFETCH(QScriptValue, val);
+ QBENCHMARK {
+ val.scriptClass();
+ }
+}
+
+void tst_QScriptValue::setScriptClass()
+{
+ newEngine();
+ QScriptValue obj = m_engine->newObject();
+ QScriptClass cls(m_engine);
+ QBENCHMARK {
+ obj.setScriptClass(&cls);
+ }
+}
+
+void tst_QScriptValue::readMetaProperty()
+{
+ newEngine();
+ QScriptValue object = m_engine->newQObject(QCoreApplication::instance());
+ QScriptString propertyName = m_engine->toStringHandle("objectName");
+ QBENCHMARK {
+ for (int i = 0; i < 10000; ++i)
+ object.property(propertyName);
+ }
+}
+
+void tst_QScriptValue::writeMetaProperty()
+{
+ newEngine();
+ QScriptValue object = m_engine->newQObject(QCoreApplication::instance());
+ QScriptString propertyName = m_engine->toStringHandle("objectName");
+ QScriptValue value(m_engine, "foo");
+ QBENCHMARK {
+ for (int i = 0; i < 10000; ++i)
+ object.setProperty(propertyName, value);
+ }
+}
+
+void tst_QScriptValue::defineStandardTestValues()
+{
+ newEngine();
+ QTest::addColumn<QScriptValue>("val");
+ QTest::newRow("bool") << m_engine->evaluate("true");
+ QTest::newRow("number") << m_engine->evaluate("123");
+ QTest::newRow("string") << m_engine->evaluate("'ciao'");
+ QTest::newRow("null") << m_engine->evaluate("null");
+ QTest::newRow("undefined") << m_engine->evaluate("undefined");
+ QTest::newRow("object") << m_engine->evaluate("({foo:123})");
+ QTest::newRow("array") << m_engine->evaluate("[10,20,30]");
+ QTest::newRow("function") << m_engine->evaluate("(function foo(a, b, c) { return a + b + c; })");
+ QTest::newRow("date") << m_engine->evaluate("new Date");
+ QTest::newRow("regexp") << m_engine->evaluate("new RegExp('foo')");
+ QTest::newRow("error") << m_engine->evaluate("new Error");
+
+ QTest::newRow("qobject") << m_engine->newQObject(this);
+ QTest::newRow("qmetaobject") << m_engine->newQMetaObject(&QScriptEngine::staticMetaObject);
+ QTest::newRow("variant") << m_engine->newVariant(123);
+ QTest::newRow("qscriptclassobject") << m_engine->newObject(new QScriptClass(m_engine));
+
+ QTest::newRow("invalid") << QScriptValue();
+ QTest::newRow("bool-no-engine") << QScriptValue(true);
+ QTest::newRow("number-no-engine") << QScriptValue(123.0);
+ QTest::newRow("string-no-engine") << QScriptValue(QString::fromLatin1("hello"));
+ QTest::newRow("null-no-engine") << QScriptValue(QScriptValue::NullValue);
+ QTest::newRow("undefined-no-engine") << QScriptValue(QScriptValue::UndefinedValue);
+}
+
+QTEST_MAIN(tst_QScriptValue)
+#include "tst_qscriptvalue.moc"