aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorKent Hansen <kent.hansen@nokia.com>2011-10-12 14:27:57 +0200
committerQt by Nokia <qt-info@nokia.com>2011-12-09 13:08:36 +0100
commitf6416183d36a260f3cbf6f89753f8a0ee27df7cc (patch)
treec0a8e60bfe2cf7dccba11f9518c7bac031b3796b /tests
parent3cfee36b9910dafebd0846dd58115bf2f069ccba (diff)
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 <aaron.kennedy@nokia.com>
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/declarative/qdeclarativeecmascript/data/signalWithQJSValue.qml14
-rw-r--r--tests/auto/declarative/qdeclarativeecmascript/testtypes.h4
-rw-r--r--tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp28
-rw-r--r--tests/auto/declarative/qdeclarativemetatype/tst_qdeclarativemetatype.cpp167
4 files changed, 46 insertions, 167 deletions
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<MyQmlObject> object(qobject_cast<MyQmlObject *>(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<QUrl>("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 <qtest.h>
-#include <QLocale>
-#include <QPixmap>
-#include <QBitmap>
-#include <QPen>
-#include <QTextLength>
-#include <QMatrix4x4>
-#include <QVector2D>
-#include <QVector3D>
-#include <QVector4D>
-#include <QQuaternion>
#include <qdeclarative.h>
-#include <QWidget>
#include <private/qdeclarativemetatype_p.h>
#include <private/qdeclarativepropertyvalueinterceptor_p.h>
@@ -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<TestType>("Test", 1, 0, "TestType");
@@ -144,140 +111,6 @@ void tst_qdeclarativemetatype::initTestCase()
qmlRegisterType<ValueInterceptorTestType>("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<QVariant>(), &v, 0));
- QVERIFY(v == QVariant());
- QVERIFY(QDeclarativeMetaType::copy(qMetaTypeId<QVariant>(), &v, &v2));
- QVERIFY(v == tv);
- }
-
- {
- TestType t; QVariant tv = QVariant::fromValue(&t);
-
- QVariant v(tv); QVariant v2(tv);
- QVERIFY(QDeclarativeMetaType::copy(qMetaTypeId<TestType *>(), &v, 0));
- QVERIFY(v == QVariant::fromValue((TestType *)0));
- QVERIFY(QDeclarativeMetaType::copy(qMetaTypeId<TestType *>(), &v, &v2));
- QVERIFY(v == tv);
- }
-}
-
void tst_qdeclarativemetatype::qmlParserStatusCast()
{
QVERIFY(QDeclarativeMetaType::qmlType(QVariant::Int) == 0);