From f6416183d36a260f3cbf6f89753f8a0ee27df7cc Mon Sep 17 00:00:00 2001 From: Kent Hansen Date: Wed, 12 Oct 2011 14:27:57 +0200 Subject: Get rid of QDeclarativeMetaType::{canCopy,copy} Now that we have QMetaType::construct() that does placement new construction, we can use that to copy the value. We need to destruct the (default-constructed) existing value first, but for primitive types that's a no-op, and for Qt's types it's cheap since they use lazy initialization or "shared null". Change-Id: Idadee04b1d5b590be7fec50fb0396fd277bee973 Reviewed-by: Aaron Kennedy --- src/declarative/qml/qdeclarativeboundsignal.cpp | 21 +- src/declarative/qml/qdeclarativemetatype.cpp | 563 --------------------- src/declarative/qml/qdeclarativemetatype_p.h | 3 - .../data/signalWithQJSValue.qml | 14 + .../declarative/qdeclarativeecmascript/testtypes.h | 4 + .../tst_qdeclarativeecmascript.cpp | 28 + .../tst_qdeclarativemetatype.cpp | 167 ------ 7 files changed, 53 insertions(+), 747 deletions(-) create mode 100644 tests/auto/declarative/qdeclarativeecmascript/data/signalWithQJSValue.qml diff --git a/src/declarative/qml/qdeclarativeboundsignal.cpp b/src/declarative/qml/qdeclarativeboundsignal.cpp index 6bbbb243fc..8c0c0b1519 100644 --- a/src/declarative/qml/qdeclarativeboundsignal.cpp +++ b/src/declarative/qml/qdeclarativeboundsignal.cpp @@ -252,15 +252,9 @@ QDeclarativeBoundSignalParameters::QDeclarativeBoundSignalParameters(const QMeta } } } - if (QDeclarativeMetaType::canCopy(t)) { - types[ii] = t; - QMetaPropertyBuilder prop = mob.addProperty(name, propType); - prop.setWritable(false); - } else { - types[ii] = 0x80000000 | t; - QMetaPropertyBuilder prop = mob.addProperty(name, "QVariant"); - prop.setWritable(false); - } + types[ii] = t; + QMetaPropertyBuilder prop = mob.addProperty(name, propType); + prop.setWritable(false); } } myMetaObject = mob.toMetaObject(); @@ -291,11 +285,10 @@ int QDeclarativeBoundSignalParameters::metaCall(QMetaObject::Call c, int id, voi return -1; if (c == QMetaObject::ReadProperty && id >= 1) { - if (types[id - 1] & 0x80000000) { - *((QVariant *)a[0]) = QVariant(types[id - 1] & 0x7FFFFFFF, values[id]); - } else { - QDeclarativeMetaType::copy(types[id - 1], a[0], values[id]); - } + int t = types[id - 1]; + void *p = a[0]; + QMetaType::destruct(t, p); + QMetaType::construct(t, p, values[id]); return -1; } else { return qt_metacall(c, id, a); diff --git a/src/declarative/qml/qdeclarativemetatype.cpp b/src/declarative/qml/qdeclarativemetatype.cpp index ac89eb9a2e..6ead4f19fa 100644 --- a/src/declarative/qml/qdeclarativemetatype.cpp +++ b/src/declarative/qml/qdeclarativemetatype.cpp @@ -56,36 +56,14 @@ #include #include -#include #include #include #include #include #include -#include -#include #include -#ifdef QT_BOOTSTRAPPED -# ifndef QT_NO_GEOM_VARIANT -# define QT_NO_GEOM_VARIANT -# endif -#else -# include -# include -# include -#endif - -#ifndef QT_NO_GEOM_VARIANT -# include -# include -# include -# include -# include -#endif -#define NS(x) QT_PREPEND_NAMESPACE(x) - QT_BEGIN_NAMESPACE struct QDeclarativeMetaTypeData @@ -1356,547 +1334,6 @@ QList QDeclarativeMetaType::qmlTypes() return data->nameToType.values(); } -QT_END_NAMESPACE - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -//#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -Q_DECLARE_METATYPE(QJSValue); -Q_DECLARE_METATYPE(QDeclarativeV8Handle); - -QT_BEGIN_NAMESPACE - -bool QDeclarativeMetaType::canCopy(int type) -{ - switch(type) { - case QMetaType::VoidStar: - case QMetaType::QObjectStar: - case QMetaType::QWidgetStar: - case QMetaType::Long: - case QMetaType::Int: - case QMetaType::Short: - case QMetaType::Char: - case QMetaType::ULong: - case QMetaType::UInt: - case QMetaType::LongLong: - case QMetaType::ULongLong: - case QMetaType::UShort: - case QMetaType::UChar: - case QMetaType::Bool: - case QMetaType::Float: - case QMetaType::Double: - case QMetaType::QChar: - case QMetaType::QVariantMap: - case QMetaType::QVariantHash: - case QMetaType::QVariantList: - case QMetaType::QByteArray: - case QMetaType::QString: - case QMetaType::QStringList: - case QMetaType::QBitArray: - case QMetaType::QDate: - case QMetaType::QTime: - case QMetaType::QDateTime: - case QMetaType::QUrl: - case QMetaType::QLocale: - case QMetaType::QRect: - case QMetaType::QRectF: - case QMetaType::QSize: - case QMetaType::QSizeF: - case QMetaType::QLine: - case QMetaType::QLineF: - case QMetaType::QPoint: - case QMetaType::QPointF: - case QMetaType::QVector3D: -#ifndef QT_NO_REGEXP - case QMetaType::QRegExp: -#endif - case QMetaType::Void: -#ifdef QT3_SUPPORT - case QMetaType::QColorGroup: -#endif - case QMetaType::QFont: - case QMetaType::QPixmap: - case QMetaType::QBrush: - case QMetaType::QColor: - case QMetaType::QPalette: - case QMetaType::QImage: - case QMetaType::QPolygon: - case QMetaType::QRegion: - case QMetaType::QBitmap: -#ifndef QT_NO_CURSOR - case QMetaType::QCursor: -#endif - case QMetaType::QKeySequence: - case QMetaType::QPen: - case QMetaType::QTextLength: - case QMetaType::QTextFormat: - case QMetaType::QMatrix: - case QMetaType::QTransform: - case QMetaType::QMatrix4x4: - case QMetaType::QVector2D: - case QMetaType::QVector4D: - case QMetaType::QQuaternion: - return true; - - default: - if (type == qMetaTypeId() || - type == qMetaTypeId() || - type == qMetaTypeId() || - typeCategory(type) != Unknown) { - return true; - } - break; - } - - return false; -} - -/*! - Copies \a copy into \a data, assuming they both are of type \a type. If - \a copy is zero, a default type is copied. Returns true if the copy was - successful and false if not. - - \note This should move into QMetaType once complete - -*/ -bool QDeclarativeMetaType::copy(int type, void *data, const void *copy) -{ - if (copy) { - switch(type) { - case QMetaType::VoidStar: - case QMetaType::QObjectStar: - case QMetaType::QWidgetStar: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::Long: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::Int: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::Short: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::Char: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::ULong: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::UInt: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::LongLong: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::ULongLong: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::UShort: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::UChar: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::Bool: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::Float: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::Double: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QChar: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QVariantMap: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QVariantHash: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QVariantList: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QByteArray: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QString: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QStringList: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QBitArray: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QDate: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QTime: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QDateTime: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QUrl: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QLocale: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QRect: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QRectF: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QSize: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QSizeF: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QLine: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QLineF: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QPoint: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QPointF: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QVector3D: - *static_cast(data) = *static_cast(copy); - return true; -#ifndef QT_NO_REGEXP - case QMetaType::QRegExp: - *static_cast(data) = *static_cast(copy); - return true; -#endif - case QMetaType::Void: - return true; - - -#ifdef QT3_SUPPORT - case QMetaType::QColorGroup: - *static_cast(data) = *static_cast(copy); - return true; -#endif - - case QMetaType::QFont: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QPixmap: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QBrush: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QColor: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QPalette: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QImage: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QPolygon: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QRegion: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QBitmap: - *static_cast(data) = *static_cast(copy); - return true; -#ifndef QT_NO_CURSOR - case QMetaType::QCursor: - *static_cast(data) = *static_cast(copy); - return true; -#endif - case QMetaType::QKeySequence: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QPen: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QTextLength: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QTextFormat: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QMatrix: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QTransform: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QMatrix4x4: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QVector2D: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QVector4D: - *static_cast(data) = *static_cast(copy); - return true; - case QMetaType::QQuaternion: - *static_cast(data) = *static_cast(copy); - return true; - - default: - if (type == qMetaTypeId()) { - *static_cast(data) = *static_cast(copy); - return true; - } else if (type == qMetaTypeId()) { - *static_cast(data) = *static_cast(copy); - return true; - } else if (type == qMetaTypeId()) { - *static_cast(data) = *static_cast(copy); - return true; - } else if (typeCategory(type) != Unknown) { - *static_cast(data) = *static_cast(copy); - return true; - } - break; - } - } else { - switch(type) { - case QMetaType::VoidStar: - case QMetaType::QObjectStar: - case QMetaType::QWidgetStar: - *static_cast(data) = 0; - return true; - case QMetaType::Long: - *static_cast(data) = long(0); - return true; - case QMetaType::Int: - *static_cast(data) = int(0); - return true; - case QMetaType::Short: - *static_cast(data) = short(0); - return true; - case QMetaType::Char: - *static_cast(data) = char(0); - return true; - case QMetaType::ULong: - *static_cast(data) = ulong(0); - return true; - case QMetaType::UInt: - *static_cast(data) = uint(0); - return true; - case QMetaType::LongLong: - *static_cast(data) = qlonglong(0); - return true; - case QMetaType::ULongLong: - *static_cast(data) = qulonglong(0); - return true; - case QMetaType::UShort: - *static_cast(data) = ushort(0); - return true; - case QMetaType::UChar: - *static_cast(data) = uchar(0); - return true; - case QMetaType::Bool: - *static_cast(data) = bool(false); - return true; - case QMetaType::Float: - *static_cast(data) = float(0); - return true; - case QMetaType::Double: - *static_cast(data) = double(0); - return true; - case QMetaType::QChar: - *static_cast(data) = NS(QChar)(); - return true; - case QMetaType::QVariantMap: - *static_cast(data) = NS(QVariantMap)(); - return true; - case QMetaType::QVariantHash: - *static_cast(data) = NS(QVariantHash)(); - return true; - case QMetaType::QVariantList: - *static_cast(data) = NS(QVariantList)(); - return true; - case QMetaType::QByteArray: - *static_cast(data) = NS(QByteArray)(); - return true; - case QMetaType::QString: - *static_cast(data) = NS(QString)(); - return true; - case QMetaType::QStringList: - *static_cast(data) = NS(QStringList)(); - return true; - case QMetaType::QBitArray: - *static_cast(data) = NS(QBitArray)(); - return true; - case QMetaType::QDate: - *static_cast(data) = NS(QDate)(); - return true; - case QMetaType::QTime: - *static_cast(data) = NS(QTime)(); - return true; - case QMetaType::QDateTime: - *static_cast(data) = NS(QDateTime)(); - return true; - case QMetaType::QUrl: - *static_cast(data) = NS(QUrl)(); - return true; - case QMetaType::QLocale: - *static_cast(data) = NS(QLocale)(); - return true; - case QMetaType::QRect: - *static_cast(data) = NS(QRect)(); - return true; - case QMetaType::QRectF: - *static_cast(data) = NS(QRectF)(); - return true; - case QMetaType::QSize: - *static_cast(data) = NS(QSize)(); - return true; - case QMetaType::QSizeF: - *static_cast(data) = NS(QSizeF)(); - return true; - case QMetaType::QLine: - *static_cast(data) = NS(QLine)(); - return true; - case QMetaType::QLineF: - *static_cast(data) = NS(QLineF)(); - return true; - case QMetaType::QPoint: - *static_cast(data) = NS(QPoint)(); - return true; - case QMetaType::QPointF: - *static_cast(data) = NS(QPointF)(); - return true; - case QMetaType::QVector3D: - *static_cast(data) = NS(QVector3D)(); - return true; -#ifndef QT_NO_REGEXP - case QMetaType::QRegExp: - *static_cast(data) = NS(QRegExp)(); - return true; -#endif - case QMetaType::Void: - return true; - -#ifdef QT3_SUPPORT - case QMetaType::QColorGroup: - *static_cast(data) = NS(QColorGroup)(); - return true; -#endif - - case QMetaType::QFont: - *static_cast(data) = NS(QFont)(); - return true; - case QMetaType::QPixmap: - *static_cast(data) = NS(QPixmap)(); - return true; - case QMetaType::QBrush: - *static_cast(data) = NS(QBrush)(); - return true; - case QMetaType::QColor: - *static_cast(data) = NS(QColor)(); - return true; - case QMetaType::QPalette: - *static_cast(data) = NS(QPalette)(); - return true; - case QMetaType::QImage: - *static_cast(data) = NS(QImage)(); - return true; - case QMetaType::QPolygon: - *static_cast(data) = NS(QPolygon)(); - return true; - case QMetaType::QRegion: - *static_cast(data) = NS(QRegion)(); - return true; - case QMetaType::QBitmap: - *static_cast(data) = NS(QBitmap)(); - return true; -#ifndef QT_NO_CURSOR - case QMetaType::QCursor: - *static_cast(data) = NS(QCursor)(); - return true; -#endif - case QMetaType::QKeySequence: - *static_cast(data) = NS(QKeySequence)(); - return true; - case QMetaType::QPen: - *static_cast(data) = NS(QPen)(); - return true; - case QMetaType::QTextLength: - *static_cast(data) = NS(QTextLength)(); - return true; - case QMetaType::QTextFormat: - *static_cast(data) = NS(QTextFormat)(); - return true; - case QMetaType::QMatrix: - *static_cast(data) = NS(QMatrix)(); - return true; - case QMetaType::QTransform: - *static_cast(data) = NS(QTransform)(); - return true; - case QMetaType::QMatrix4x4: - *static_cast(data) = NS(QMatrix4x4)(); - return true; - case QMetaType::QVector2D: - *static_cast(data) = NS(QVector2D)(); - return true; - case QMetaType::QVector4D: - *static_cast(data) = NS(QVector4D)(); - return true; - case QMetaType::QQuaternion: - *static_cast(data) = NS(QQuaternion)(); - return true; - default: - if (type == qMetaTypeId()) { - *static_cast(data) = NS(QVariant)(); - return true; - } else if (type == qMetaTypeId()) { - *static_cast(data) = NS(QJSValue)(); - return true; - } else if (type == qMetaTypeId()) { - *static_cast(data) = NS(QDeclarativeV8Handle)(); - return true; - } else if (typeCategory(type) != Unknown) { - *static_cast(data) = 0; - return true; - } - break; - } - } - - return false; -} - int QDeclarativeMetaType::QQuickAnchorLineMetaTypeId() { static int id = 0; diff --git a/src/declarative/qml/qdeclarativemetatype_p.h b/src/declarative/qml/qdeclarativemetatype_p.h index fc4cff8342..6a8da1a390 100644 --- a/src/declarative/qml/qdeclarativemetatype_p.h +++ b/src/declarative/qml/qdeclarativemetatype_p.h @@ -71,9 +71,6 @@ class QDeclarativeTypeModule; class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeMetaType { public: - static bool canCopy(int type); - static bool copy(int type, void *data, const void *copy = 0); - static QList qmlTypeNames(); static QList qmlTypes(); diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/signalWithQJSValue.qml b/tests/auto/declarative/qdeclarativeecmascript/data/signalWithQJSValue.qml new file mode 100644 index 0000000000..36f481d533 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/signalWithQJSValue.qml @@ -0,0 +1,14 @@ +import Qt.test 1.0 + +MyQmlObject { + property string expression + property string compare + property bool pass: false + + onSignalWithQJSValue: + { + qjsvalueMethod(arg); + var expected = eval(expression); + pass = eval(compare)(arg, expected); + } +} diff --git a/tests/auto/declarative/qdeclarativeecmascript/testtypes.h b/tests/auto/declarative/qdeclarativeecmascript/testtypes.h index 06cc561c7f..b7f3f909ea 100644 --- a/tests/auto/declarative/qdeclarativeecmascript/testtypes.h +++ b/tests/auto/declarative/qdeclarativeecmascript/testtypes.h @@ -163,6 +163,7 @@ public: int value; }; QVariant variant() const { return m_variant; } + QJSValue qjsvalue() const { return m_qjsvalue; } int intProperty() const { return m_intProperty; } void setIntProperty(int i) { m_intProperty = i; emit intChanged(); } @@ -176,6 +177,7 @@ signals: void thirdBasicSignal(); void signalWithUnknownType(const MyQmlObject::MyType &arg); void signalWithVariant(const QVariant &arg); + void signalWithQJSValue(const QJSValue &arg); void intChanged(); public slots: @@ -185,6 +187,7 @@ public slots: void setString(const QString &s) { m_string = s; } void myinvokable(MyQmlObject *o) { myinvokableObject = o; } void variantMethod(const QVariant &v) { m_variant = v; } + void qjsvalueMethod(const QJSValue &v) { m_qjsvalue = v; } void v8function(QDeclarativeV8Function*); private: @@ -199,6 +202,7 @@ private: int m_resetProperty; QRegExp m_regExp; QVariant m_variant; + QJSValue m_qjsvalue; int m_intProperty; }; diff --git a/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp b/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp index 31d4feb655..38d436448f 100644 --- a/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp +++ b/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp @@ -148,6 +148,8 @@ private slots: void signalWithJSValueInVariant(); void signalWithJSValueInVariant_twoEngines_data(); void signalWithJSValueInVariant_twoEngines(); + void signalWithQJSValue_data(); + void signalWithQJSValue(); void moduleApi_data(); void moduleApi(); void importScripts_data(); @@ -2945,6 +2947,32 @@ void tst_qdeclarativeecmascript::signalWithJSValueInVariant_twoEngines() QVERIFY(!object->property("pass").toBool()); } +void tst_qdeclarativeecmascript::signalWithQJSValue_data() +{ + signalWithJSValueInVariant_data(); +} + +void tst_qdeclarativeecmascript::signalWithQJSValue() +{ + QFETCH(QString, expression); + QFETCH(QString, compare); + + QDeclarativeComponent component(&engine, TEST_FILE("signalWithQJSValue.qml")); + QScopedPointer object(qobject_cast(component.create())); + QVERIFY(object != 0); + + QJSValue value = engine.evaluate(expression); + QVERIFY(!engine.hasUncaughtException()); + object->setProperty("expression", expression); + object->setProperty("compare", compare); + object->setProperty("pass", false); + + emit object->signalWithQJSValue(value); + + QVERIFY(object->property("pass").toBool()); + QVERIFY(object->qjsvalue().strictlyEquals(value)); +} + void tst_qdeclarativeecmascript::moduleApi_data() { QTest::addColumn("testfile"); diff --git a/tests/auto/declarative/qdeclarativemetatype/tst_qdeclarativemetatype.cpp b/tests/auto/declarative/qdeclarativemetatype/tst_qdeclarativemetatype.cpp index bf83a3d5f8..7426ac1518 100644 --- a/tests/auto/declarative/qdeclarativemetatype/tst_qdeclarativemetatype.cpp +++ b/tests/auto/declarative/qdeclarativemetatype/tst_qdeclarativemetatype.cpp @@ -40,18 +40,7 @@ ****************************************************************************/ #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include #include #include @@ -65,8 +54,6 @@ public: private slots: void initTestCase(); - void copy(); - void qmlParserStatusCast(); void qmlPropertyValueSourceCast(); void qmlPropertyValueInterceptorCast(); @@ -116,26 +103,6 @@ public: }; QML_DECLARE_TYPE(ValueInterceptorTestType); - -#define COPY_TEST(cpptype, metatype, value, defaultvalue) \ -{ \ - cpptype v = (value); cpptype v2 = (value); \ - QVERIFY(QDeclarativeMetaType::copy(QMetaType:: metatype, &v, 0)); \ - QCOMPARE((cpptype)(v),(cpptype)(defaultvalue)); \ - QVERIFY(v == (defaultvalue)); \ - QVERIFY(QDeclarativeMetaType::copy(QMetaType:: metatype, &v, &v2)); \ - QVERIFY(v == (value)); \ -} - -#define QT_COPY_TEST(type, value) \ -{ \ - type v = (value); type v2 = (value); \ - QVERIFY(QDeclarativeMetaType::copy(QMetaType:: type, &v, 0)); \ - QVERIFY(v == (type ())); \ - QVERIFY(QDeclarativeMetaType::copy(QMetaType:: type, &v, &v2)); \ - QVERIFY(v == (value)); \ -} - void tst_qdeclarativemetatype::initTestCase() { qmlRegisterType("Test", 1, 0, "TestType"); @@ -144,140 +111,6 @@ void tst_qdeclarativemetatype::initTestCase() qmlRegisterType("Test", 1, 0, "ValueInterceptorTestType"); } -void tst_qdeclarativemetatype::copy() -{ - QVERIFY(QDeclarativeMetaType::copy(QMetaType::Void, 0, 0)); - - COPY_TEST(bool, Bool, true, false); - COPY_TEST(int, Int, 10, 0); - COPY_TEST(unsigned int, UInt, 10, 0); - COPY_TEST(long long, LongLong, 10, 0); - COPY_TEST(unsigned long long, ULongLong, 10, 0); - COPY_TEST(double, Double, 19.2, 0); - - QT_COPY_TEST(QChar, QChar('a')); - - QVariantMap variantMap; - variantMap.insert("Hello World!", QVariant(10)); - QT_COPY_TEST(QVariantMap, variantMap); - - QT_COPY_TEST(QVariantList, QVariantList() << QVariant(19.2)); - QT_COPY_TEST(QString, QString("QML Rocks!")); - QT_COPY_TEST(QStringList, QStringList() << "QML" << "Rocks"); - QT_COPY_TEST(QByteArray, QByteArray("0x1102DDD")); - QT_COPY_TEST(QBitArray, QBitArray(102, true)); - QDate cd = QDate::currentDate(); - QT_COPY_TEST(QDate, cd); - QTime ct = QTime::currentTime(); - QT_COPY_TEST(QTime, ct); - QDateTime cdt = QDateTime::currentDateTime(); - QT_COPY_TEST(QDateTime, cdt); - QT_COPY_TEST(QUrl, QUrl("http://www.nokia.com")); - QT_COPY_TEST(QLocale, QLocale(QLocale::English, QLocale::Australia)); - QT_COPY_TEST(QRect, QRect(-10, 10, 102, 99)); - QT_COPY_TEST(QRectF, QRectF(-10.2, 1.2, 102, 99.6)); - QT_COPY_TEST(QSize, QSize(100, 2)); - QT_COPY_TEST(QSizeF, QSizeF(20.2, -100234.2)); - QT_COPY_TEST(QLine, QLine(0, 0, 100, 100)); - QT_COPY_TEST(QLineF, QLineF(-10.2, 0, 103, 1)); - QT_COPY_TEST(QPoint, QPoint(-1912, 1613)); - QT_COPY_TEST(QPointF, QPointF(-908.1, 1612)); - QT_COPY_TEST(QRegExp, QRegExp("(\\d+)(?:\\s*)(cm|inch)")); - - QVariantHash variantHash; - variantHash.insert("Hello World!", QVariant(19)); - QT_COPY_TEST(QVariantHash, variantHash); - - QT_COPY_TEST(QFont, QFont("Helvetica", 1024)); - - { - QPixmap v = QPixmap(100, 100); QPixmap v2 = QPixmap(100, 100); - QVERIFY(QDeclarativeMetaType::copy(QMetaType::QPixmap, &v, 0)); - QVERIFY(v.size() == QPixmap().size()); - QVERIFY(QDeclarativeMetaType::copy(QMetaType::QPixmap , &v, &v2)); - QVERIFY(v.size() == QPixmap(100,100).size()); - } - - QT_COPY_TEST(QBrush, QBrush(Qt::blue)); - QT_COPY_TEST(QColor, QColor("lightsteelblue")); - QT_COPY_TEST(QPalette, QPalette(Qt::green)); - - { - QImage v = QImage(100, 100, QImage::Format_RGB32); - QImage v2 = QImage(100, 100, QImage::Format_RGB32); - QVERIFY(QDeclarativeMetaType::copy(QMetaType::QImage, &v, 0)); - QVERIFY(v.size() == QImage().size()); - QVERIFY(QDeclarativeMetaType::copy(QMetaType::QImage , &v, &v2)); - QVERIFY(v.size() == QImage(100,100, QImage::Format_RGB32).size()); - } - - QT_COPY_TEST(QPolygon, QPolygon(QRect(100, 100, 200, 103))); - QT_COPY_TEST(QRegion, QRegion(QRect(0, 10, 99, 87))); - - { - QBitmap v = QBitmap(100, 100); QBitmap v2 = QBitmap(100, 100); - QVERIFY(QDeclarativeMetaType::copy(QMetaType::QBitmap, &v, 0)); - QVERIFY(v.size() == QBitmap().size()); - QVERIFY(QDeclarativeMetaType::copy(QMetaType::QBitmap , &v, &v2)); - QVERIFY(v.size() == QBitmap(100,100).size()); - } - - { - QCursor v = QCursor(Qt::SizeFDiagCursor); QCursor v2 = QCursor(Qt::SizeFDiagCursor); - QVERIFY(QDeclarativeMetaType::copy(QMetaType::QCursor, &v, 0)); - QVERIFY(v.shape() == QCursor().shape()); - QVERIFY(QDeclarativeMetaType::copy(QMetaType::QCursor , &v, &v2)); - QVERIFY(v.shape() == QCursor(Qt::SizeFDiagCursor).shape()); - } - - QT_COPY_TEST(QKeySequence, QKeySequence("Ctrl+O")); - QT_COPY_TEST(QPen, QPen(Qt::red)); - QT_COPY_TEST(QTextLength, QTextLength(QTextLength::FixedLength, 10.2)); - QT_COPY_TEST(QTextFormat, QTextFormat(QTextFormat::ListFormat)); - QT_COPY_TEST(QMatrix, QMatrix().translate(10, 10)); - QT_COPY_TEST(QTransform, QTransform().translate(10, 10)); - QT_COPY_TEST(QMatrix4x4, QMatrix4x4(1,0,2,3,0,1,0,0,9,0,1,0,0,0,10,1)); - QT_COPY_TEST(QVector2D, QVector2D(10.2, 1)); - QT_COPY_TEST(QVector3D, QVector3D(10.2, 1, -2)); - QT_COPY_TEST(QVector4D, QVector4D(10.2, 1, -2, 1.2)); - QT_COPY_TEST(QQuaternion, QQuaternion(1.0, 10.2, 1, -2)); - - int voidValue; - COPY_TEST(void *, VoidStar, (void *)&voidValue, (void *)0); - COPY_TEST(long, Long, 10, 0); - COPY_TEST(short, Short, 10, 0); - COPY_TEST(char, Char, 'a', 0); - COPY_TEST(unsigned long, ULong, 10, 0); - COPY_TEST(unsigned short, UShort, 10, 0); - COPY_TEST(unsigned char, UChar, 'a', 0); - COPY_TEST(float, Float, 10.5, 0); - - QObject objectValue; - QWidget widgetValue; - COPY_TEST(QObject *, QObjectStar, &objectValue, 0); - COPY_TEST(QWidget *, QWidgetStar, &widgetValue, 0); - COPY_TEST(qreal, QReal, 10.5, 0); - - { - QVariant tv = QVariant::fromValue(QVariant(10)); - QVariant v(tv); QVariant v2(tv); - QVERIFY(QDeclarativeMetaType::copy(qMetaTypeId(), &v, 0)); - QVERIFY(v == QVariant()); - QVERIFY(QDeclarativeMetaType::copy(qMetaTypeId(), &v, &v2)); - QVERIFY(v == tv); - } - - { - TestType t; QVariant tv = QVariant::fromValue(&t); - - QVariant v(tv); QVariant v2(tv); - QVERIFY(QDeclarativeMetaType::copy(qMetaTypeId(), &v, 0)); - QVERIFY(v == QVariant::fromValue((TestType *)0)); - QVERIFY(QDeclarativeMetaType::copy(qMetaTypeId(), &v, &v2)); - QVERIFY(v == tv); - } -} - void tst_qdeclarativemetatype::qmlParserStatusCast() { QVERIFY(QDeclarativeMetaType::qmlType(QVariant::Int) == 0); -- cgit v1.2.3