diff options
Diffstat (limited to 'tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp')
-rw-r--r-- | tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp | 79 |
1 files changed, 46 insertions, 33 deletions
diff --git a/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp b/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp index 3f412ee6d4..a39564bd19 100644 --- a/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp +++ b/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp @@ -55,6 +55,7 @@ #include "../../shared/util.h" #include <private/qv4functionobject_p.h> #include <private/qv4scopedvalue_p.h> +#include <private/qv4alloca_p.h> #ifdef Q_CC_MSVC #define NO_INLINE __declspec(noinline) @@ -62,12 +63,6 @@ #define NO_INLINE __attribute__((noinline)) #endif -#if defined(Q_OS_WIN) -#include <malloc.h> -#else -#include <alloca.h> -#endif - /* This test covers evaluation of ECMAScript expressions and bindings from within QML. This does not include static QML language issues. @@ -174,6 +169,7 @@ private slots: void singletonTypeResolution(); void importScripts_data(); void importScripts(); + void importCreationContext(); void scarceResources(); void scarceResources_data(); void scarceResources_other(); @@ -385,7 +381,7 @@ void tst_qqmlecmascript::assignBasicTypes() QCOMPARE(object->rectFProperty(), QRectF(1000.1, -10.9, 400, 90.99)); QCOMPARE(object->boolProperty(), true); QCOMPARE(object->variantProperty(), QVariant("Hello World!")); - QCOMPARE(object->vectorProperty(), QVector3D(10, 1, 2.2)); + QCOMPARE(object->vectorProperty(), QVector3D(10, 1, 2.2f)); QCOMPARE(object->urlProperty(), component.url().resolved(QUrl("main.qml"))); delete object; } @@ -414,7 +410,7 @@ void tst_qqmlecmascript::assignBasicTypes() QCOMPARE(object->rectFProperty(), QRectF(1000.1, -10.9, 400, 90.99)); QCOMPARE(object->boolProperty(), true); QCOMPARE(object->variantProperty(), QVariant("Hello World!")); - QCOMPARE(object->vectorProperty(), QVector3D(10, 1, 2.2)); + QCOMPARE(object->vectorProperty(), QVector3D(10, 1, 2.2f)); QCOMPARE(object->urlProperty(), component.url().resolved(QUrl("main.qml"))); delete object; } @@ -771,7 +767,7 @@ void tst_qqmlecmascript::contextPropertiesTriggerReeval() context.setContextProperty("testObj", &object1); context.setContextProperty("testObj2", object3); - { + { MyExpression expr(&context, "testProp + 1"); QCOMPARE(expr.changed, false); QCOMPARE(expr.evaluate(), QVariant(2)); @@ -781,7 +777,7 @@ void tst_qqmlecmascript::contextPropertiesTriggerReeval() QCOMPARE(expr.evaluate(), QVariant(3)); } - { + { MyExpression expr(&context, "testProp + testProp + testProp"); QCOMPARE(expr.changed, false); QCOMPARE(expr.evaluate(), QVariant(6)); @@ -791,7 +787,7 @@ void tst_qqmlecmascript::contextPropertiesTriggerReeval() QCOMPARE(expr.evaluate(), QVariant(12)); } - { + { MyExpression expr(&context, "testObj.stringProperty"); QCOMPARE(expr.changed, false); QCOMPARE(expr.evaluate(), QVariant("Hello")); @@ -801,7 +797,7 @@ void tst_qqmlecmascript::contextPropertiesTriggerReeval() QCOMPARE(expr.evaluate(), QVariant("World")); } - { + { MyExpression expr(&context, "testObj.stringProperty /**/"); QCOMPARE(expr.changed, false); QCOMPARE(expr.evaluate(), QVariant("World")); @@ -811,7 +807,7 @@ void tst_qqmlecmascript::contextPropertiesTriggerReeval() QCOMPARE(expr.evaluate(), QVariant("Hello")); } - { + { MyExpression expr(&context, "testObj2"); QCOMPARE(expr.changed, false); QCOMPARE(expr.evaluate(), QVariant::fromValue((QObject *)object3)); @@ -832,7 +828,7 @@ void tst_qqmlecmascript::objectPropertiesTriggerReeval() object2.setStringProperty(QLatin1String("Dog")); object3.setStringProperty(QLatin1String("Cat")); - { + { MyExpression expr(&context, "testObj.stringProperty"); QCOMPARE(expr.changed, false); QCOMPARE(expr.evaluate(), QVariant("Hello")); @@ -842,7 +838,7 @@ void tst_qqmlecmascript::objectPropertiesTriggerReeval() QCOMPARE(expr.evaluate(), QVariant("World")); } - { + { MyExpression expr(&context, "testObj.objectProperty.stringProperty"); QCOMPARE(expr.changed, false); QCOMPARE(expr.evaluate(), QVariant()); @@ -877,7 +873,7 @@ void tst_qqmlecmascript::objectPropertiesTriggerReeval() void tst_qqmlecmascript::deferredProperties() { QQmlComponent component(&engine, testFileUrl("deferredProperties.qml")); - MyDeferredObject *object = + MyDeferredObject *object = qobject_cast<MyDeferredObject *>(component.create()); QVERIFY(object != 0); QCOMPARE(object->value(), 0); @@ -886,7 +882,7 @@ void tst_qqmlecmascript::deferredProperties() qmlExecuteDeferred(object); QCOMPARE(object->value(), 10); QVERIFY(object->objectProperty() != 0); - MyQmlObject *qmlObject = + MyQmlObject *qmlObject = qobject_cast<MyQmlObject *>(object->objectProperty()); QVERIFY(qmlObject != 0); QCOMPARE(qmlObject->value(), 10); @@ -900,7 +896,7 @@ void tst_qqmlecmascript::deferredProperties() void tst_qqmlecmascript::deferredPropertiesErrors() { QQmlComponent component(&engine, testFileUrl("deferredPropertiesErrors.qml")); - MyDeferredObject *object = + MyDeferredObject *object = qobject_cast<MyDeferredObject *>(component.create()); QVERIFY(object != 0); QCOMPARE(object->value(), 0); @@ -962,7 +958,7 @@ void tst_qqmlecmascript::deferredPropertiesInDestruction() void tst_qqmlecmascript::extensionObjects() { QQmlComponent component(&engine, testFileUrl("extensionObjects.qml")); - MyExtendedObject *object = + MyExtendedObject *object = qobject_cast<MyExtendedObject *>(component.create()); QVERIFY(object != 0); QCOMPARE(object->baseProperty(), 13); @@ -1154,7 +1150,7 @@ void tst_qqmlecmascript::valueTypeFunctions() delete obj; } -/* +/* Tests that writing a constant to a property with a binding on it disables the binding. */ @@ -1237,7 +1233,7 @@ the original binding to be disabled. */ void tst_qqmlecmascript::outerBindingOverridesInnerBinding() { - QQmlComponent component(&engine, + QQmlComponent component(&engine, testFileUrl("outerBindingOverridesInnerBinding.qml")); MyQmlObject *object = qobject_cast<MyQmlObject *>(component.create()); QVERIFY(object != 0); @@ -1260,7 +1256,7 @@ void tst_qqmlecmascript::outerBindingOverridesInnerBinding() } /* -Access a non-existent attached object. +Access a non-existent attached object. Tests for a regression where this used to crash. */ @@ -1917,7 +1913,7 @@ void tst_qqmlecmascript::propertyAssignmentErrors() delete object; } - + /* Test bindings still work when the reeval is triggered from within a signal script. @@ -2264,7 +2260,7 @@ void tst_qqmlecmascript::regExpBug() static inline bool evaluate_error(QV8Engine *engine, const QV4::ValueRef o, const char *source) { - QString functionSource = QLatin1String("(function(object) { return ") + + QString functionSource = QLatin1String("(function(object) { return ") + QLatin1String(source) + QLatin1String(" })"); QV4::Script program(QV8Engine::getV4(engine)->rootContext, functionSource); @@ -2292,7 +2288,7 @@ static inline bool evaluate_error(QV8Engine *engine, const QV4::ValueRef o, cons static inline bool evaluate_value(QV8Engine *engine, const QV4::ValueRef o, const char *source, const QV4::ValueRef result) { - QString functionSource = QLatin1String("(function(object) { return ") + + QString functionSource = QLatin1String("(function(object) { return ") + QLatin1String(source) + QLatin1String(" })"); QV4::Script program(QV8Engine::getV4(engine)->rootContext, functionSource); @@ -2324,7 +2320,7 @@ static inline bool evaluate_value(QV8Engine *engine, const QV4::ValueRef o, static inline QV4::ReturnedValue evaluate(QV8Engine *engine, const QV4::ValueRef o, const char *source) { - QString functionSource = QLatin1String("(function(object) { return ") + + QString functionSource = QLatin1String("(function(object) { return ") + QLatin1String(source) + QLatin1String(" })"); QV4::ExecutionContext *ctx = QV8Engine::getV4(engine)->currentContext(); @@ -2363,7 +2359,7 @@ void tst_qqmlecmascript::callQtInvokables() QQmlEngine qmlengine; QQmlEnginePrivate *ep = QQmlEnginePrivate::get(&qmlengine); - + QV8Engine *engine = ep->v8engine(); QV4::Scope scope(QV8Engine::getV4(engine)); @@ -3027,7 +3023,7 @@ void tst_qqmlecmascript::attachedPropertyScope() QObject *object = component.create(); QVERIFY(object != 0); - MyQmlAttachedObject *attached = + MyQmlAttachedObject *attached = qobject_cast<MyQmlAttachedObject *>(qmlAttachedPropertiesObject<MyQmlObject>(object)); QVERIFY(attached != 0); @@ -3242,7 +3238,7 @@ void tst_qqmlecmascript::ownership() QVERIFY(own.object != 0); QObject *object = component.create(context); - + engine.collectGarbage(); QCoreApplication::sendPostedEvents(0, QEvent::DeferredDelete); @@ -3278,7 +3274,7 @@ public: QPointer<QObject> value; }; -// QTBUG-15695. +// QTBUG-15695. // Test setObjectOwnership(CppOwnership) works even when there is no QQmlData void tst_qqmlecmascript::cppOwnershipReturnValue() { @@ -3911,7 +3907,7 @@ void tst_qqmlecmascript::verifyContextLifetime(QQmlContextData *ctxt) { QV4::Scope scope(v4); QV4::ScopedArrayObject scripts(scope, ctxt->importedScripts); QV4::ScopedValue qml(scope); - for (quint32 i = 0; i < scripts->arrayLength(); ++i) { + for (quint32 i = 0; i < scripts->getLength(); ++i) { QQmlContextData *scriptContext, *newContext; qml = scripts->getIndexed(i); @@ -4216,6 +4212,20 @@ void tst_qqmlecmascript::importScripts() engine.setImportPathList(importPathList); } +void tst_qqmlecmascript::importCreationContext() +{ + QQmlComponent component(&engine, testFileUrl("jsimport/creationContext.qml")); + QScopedPointer<QObject> object(component.create()); + QVERIFY(!object.isNull()); + bool success = object->property("success").toBool(); + if (!success) { + QSignalSpy readySpy(object.data(), SIGNAL(loaded())); + readySpy.wait(); + } + success = object->property("success").toBool(); + QVERIFY(success); +} + void tst_qqmlecmascript::scarceResources_other() { /* These tests require knowledge of state, since we test values after @@ -5628,7 +5638,7 @@ void tst_qqmlecmascript::assignSequenceTypes() } } -// Test that assigning a null object works +// Test that assigning a null object works // Regressed with: df1788b4dbbb2826ae63f26bdf166342595343f4 void tst_qqmlecmascript::nullObjectBinding() { @@ -6070,6 +6080,9 @@ void tst_qqmlecmascript::signalHandlers() QMetaObject::invokeMethod(o, "testAliasSignalHandler", Q_RETURN_ARG(QVariant, result)); QCOMPARE(result.toBool(), true); + QMetaObject::invokeMethod(o, "testSignalWithClosureArgument", Q_RETURN_ARG(QVariant, result)); + QCOMPARE(result.toBool(), true); + delete o; } @@ -6276,7 +6289,7 @@ void tst_qqmlecmascript::aliasBindingsAssignCorrectly() // Test bindings assigned to alias properties override a binding on the target (QTBUG-13719) void tst_qqmlecmascript::aliasBindingsOverrideTarget() { - { + { QQmlComponent component(&engine, testFileUrl("aliasBindingsOverrideTarget.qml")); QObject *o = component.create(); QVERIFY(o != 0); |