summaryrefslogtreecommitdiffstats
path: root/tests/auto
diff options
context:
space:
mode:
authorA-Team <ateam@pad.test.qt.nokia.com>2010-10-07 22:00:16 (GMT)
committerA-Team <ateam@pad.test.qt.nokia.com>2010-10-07 22:00:16 (GMT)
commit8130fcbffe365c0e019f45baae7f1b273d8e17e7 (patch)
tree91cebf29af4336d2010fe66460d586f605a72ab0 /tests/auto
parent0f9d642e105da1644f4ed846a696510f9a9f1daf (diff)
parent161f15e1e79ec5f23244da68340ba1e78f3ac4bb (diff)
downloadQt-8130fcbffe365c0e019f45baae7f1b273d8e17e7.zip
Qt-8130fcbffe365c0e019f45baae7f1b273d8e17e7.tar.gz
Qt-8130fcbffe365c0e019f45baae7f1b273d8e17e7.tar.bz2
Merge branch '4.7-upstream' into 4.7-doc
Diffstat (limited to 'tests/auto')
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/aliasPropertyChangeSignals.qml16
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp14
-rw-r--r--tests/auto/declarative/qdeclarativeloader/data/CreationContextLoader.qml15
-rw-r--r--tests/auto/declarative/qdeclarativeloader/data/creationContext.qml8
-rw-r--r--tests/auto/declarative/qdeclarativeloader/tst_qdeclarativeloader.cpp14
-rw-r--r--tests/auto/declarative/qdeclarativepathview/data/pathUpdate.qml18
-rw-r--r--tests/auto/declarative/qdeclarativepathview/tst_qdeclarativepathview.cpp29
-rw-r--r--tests/auto/qstyle/tst_qstyle.cpp51
-rw-r--r--tests/auto/qtcpserver/tst_qtcpserver.cpp53
-rw-r--r--tests/auto/qtcpsocket/tst_qtcpsocket.cpp72
-rw-r--r--tests/auto/qthreadstorage/crashOnExit.cpp64
-rw-r--r--tests/auto/qthreadstorage/crashOnExit.pro4
-rw-r--r--tests/auto/qthreadstorage/qthreadstorage.pro8
-rw-r--r--tests/auto/qthreadstorage/tst_qthreadstorage.cpp17
-rw-r--r--tests/auto/qthreadstorage/tst_qthreadstorage.pro4
15 files changed, 382 insertions, 5 deletions
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/aliasPropertyChangeSignals.qml b/tests/auto/declarative/qdeclarativelanguage/data/aliasPropertyChangeSignals.qml
new file mode 100644
index 0000000..7944deb
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/aliasPropertyChangeSignals.qml
@@ -0,0 +1,16 @@
+import QtQuick 1.0
+
+QtObject {
+ id: root
+
+ property alias aliasProperty: root.realProperty
+ onAliasPropertyChanged: root.test = true
+
+ property int realProperty: 0
+
+ property bool test: false
+
+ Component.onCompleted: {
+ root.realProperty = 10;
+ }
+}
diff --git a/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp b/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp
index 8609a7e..9a8c944 100644
--- a/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp
+++ b/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp
@@ -119,6 +119,7 @@ private slots:
void cppnamespace();
void aliasProperties();
void aliasPropertiesAndSignals();
+ void aliasPropertyChangeSignals();
void componentCompositeType();
void i18n();
void i18n_data();
@@ -1816,6 +1817,19 @@ void tst_qdeclarativelanguage::initTestCase()
out.write(in.readAll());
}
+void tst_qdeclarativelanguage::aliasPropertyChangeSignals()
+{
+ QDeclarativeComponent component(&engine, TEST_FILE("aliasPropertyChangeSignals.qml"));
+
+ VERIFY_ERRORS(0);
+ QObject *o = component.create();
+ QVERIFY(o != 0);
+
+ QCOMPARE(o->property("test").toBool(), true);
+
+ delete o;
+}
+
QTEST_MAIN(tst_qdeclarativelanguage)
#include "tst_qdeclarativelanguage.moc"
diff --git a/tests/auto/declarative/qdeclarativeloader/data/CreationContextLoader.qml b/tests/auto/declarative/qdeclarativeloader/data/CreationContextLoader.qml
new file mode 100644
index 0000000..bfc9a8d
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativeloader/data/CreationContextLoader.qml
@@ -0,0 +1,15 @@
+import QtQuick 1.0
+
+Loader {
+ id: myLoader
+ property int testProperty: 1912
+ sourceComponent: loaderComponent
+ Component {
+ id: loaderComponent
+ Item {
+ Component.onCompleted: {
+ test = (myLoader.testProperty == 1912);
+ }
+ }
+ }
+}
diff --git a/tests/auto/declarative/qdeclarativeloader/data/creationContext.qml b/tests/auto/declarative/qdeclarativeloader/data/creationContext.qml
new file mode 100644
index 0000000..5297978
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativeloader/data/creationContext.qml
@@ -0,0 +1,8 @@
+import QtQuick 1.0
+
+Item {
+ property bool test: false
+
+ CreationContextLoader {
+ }
+}
diff --git a/tests/auto/declarative/qdeclarativeloader/tst_qdeclarativeloader.cpp b/tests/auto/declarative/qdeclarativeloader/tst_qdeclarativeloader.cpp
index 8d04616..1bde55b 100644
--- a/tests/auto/declarative/qdeclarativeloader/tst_qdeclarativeloader.cpp
+++ b/tests/auto/declarative/qdeclarativeloader/tst_qdeclarativeloader.cpp
@@ -89,6 +89,7 @@ private slots:
void deleteComponentCrash();
void nonItem();
void vmeErrors();
+ void creationContext();
private:
QDeclarativeEngine engine;
@@ -562,6 +563,19 @@ void tst_QDeclarativeLoader::vmeErrors()
delete loader;
}
+// QTBUG-13481
+void tst_QDeclarativeLoader::creationContext()
+{
+ QDeclarativeComponent component(&engine, TEST_FILE("creationContext.qml"));
+
+ QObject *o = component.create();
+ QVERIFY(o != 0);
+
+ QCOMPARE(o->property("test").toBool(), true);
+
+ delete o;
+}
+
QTEST_MAIN(tst_QDeclarativeLoader)
#include "tst_qdeclarativeloader.moc"
diff --git a/tests/auto/declarative/qdeclarativepathview/data/pathUpdate.qml b/tests/auto/declarative/qdeclarativepathview/data/pathUpdate.qml
new file mode 100644
index 0000000..0c2ac0c
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativepathview/data/pathUpdate.qml
@@ -0,0 +1,18 @@
+import QtQuick 1.0
+
+Rectangle {
+ width: 400
+ height: 400
+
+ PathView {
+ id: view
+ objectName: "pathView"
+ anchors.fill: parent
+ model: 10
+ delegate: Rectangle { objectName: "wrapper"; color: "green"; width: 100; height: 100 }
+ path: Path {
+ startX: view.width/2; startY: 0
+ PathLine { x: view.width/2; y: view.height }
+ }
+ }
+}
diff --git a/tests/auto/declarative/qdeclarativepathview/tst_qdeclarativepathview.cpp b/tests/auto/declarative/qdeclarativepathview/tst_qdeclarativepathview.cpp
index 65007a6..a2a5363 100644
--- a/tests/auto/declarative/qdeclarativepathview/tst_qdeclarativepathview.cpp
+++ b/tests/auto/declarative/qdeclarativepathview/tst_qdeclarativepathview.cpp
@@ -86,6 +86,7 @@ private slots:
void package();
void emptyModel();
void closed();
+ void pathUpdate();
private:
QDeclarativeView *createView();
@@ -350,6 +351,10 @@ void tst_QDeclarativePathView::dataModel()
model.addItem("yellow", "7");
model.addItem("thistle", "8");
model.addItem("cyan", "9");
+ model.addItem("peachpuff", "10");
+ model.addItem("powderblue", "11");
+ model.addItem("gold", "12");
+ model.addItem("sandybrown", "13");
ctxt->setContextProperty("testData", &model);
@@ -370,7 +375,7 @@ void tst_QDeclarativePathView::dataModel()
model.insertItem(4, "orange", "10");
QTest::qWait(100);
- QTRY_COMPARE(findItems<QDeclarativeItem>(pathview, "wrapper").count(), 10);
+ QTRY_COMPARE(findItems<QDeclarativeItem>(pathview, "wrapper").count(), 14);
QVERIFY(pathview->currentIndex() == 0);
@@ -419,6 +424,11 @@ void tst_QDeclarativePathView::dataModel()
QVERIFY(item->property("onPath").toBool());
}
+ // QTBUG-14199
+ pathview->setOffset(7);
+ pathview->setOffset(0);
+ QCOMPARE(findItems<QDeclarativeItem>(pathview, "wrapper").count(), 5);
+
delete canvas;
}
@@ -808,6 +818,23 @@ void tst_QDeclarativePathView::closed()
}
}
+// QTBUG-14239
+void tst_QDeclarativePathView::pathUpdate()
+{
+ QDeclarativeView *canvas = createView();
+ QVERIFY(canvas);
+ canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/pathUpdate.qml"));
+
+ QDeclarativePathView *pathView = canvas->rootObject()->findChild<QDeclarativePathView*>("pathView");
+ QVERIFY(pathView);
+
+ QDeclarativeItem *item = findItem<QDeclarativeItem>(pathView, "wrapper", 0);
+ QVERIFY(item);
+ QCOMPARE(item->x(), 150.0);
+
+ delete canvas;
+}
+
QDeclarativeView *tst_QDeclarativePathView::createView()
{
QDeclarativeView *canvas = new QDeclarativeView(0);
diff --git a/tests/auto/qstyle/tst_qstyle.cpp b/tests/auto/qstyle/tst_qstyle.cpp
index a76c82d..ba24225 100644
--- a/tests/auto/qstyle/tst_qstyle.cpp
+++ b/tests/auto/qstyle/tst_qstyle.cpp
@@ -53,6 +53,7 @@
#include <qscrollbar.h>
#include <qprogressbar.h>
#include <qtoolbutton.h>
+#include <qtoolbar.h>
#include <qplastiquestyle.h>
#include <qwindowsstyle.h>
@@ -146,6 +147,7 @@ private slots:
void pixelMetric();
void progressBarChangeStyle();
void defaultFont();
+ void testDrawingShortcuts();
private:
void lineUpLayoutTest(QStyle *);
QWidget *testWidget;
@@ -781,5 +783,54 @@ void tst_QStyle::defaultFont()
qApp->setFont(defaultFont);
}
+class DrawTextStyle : public QProxyStyle
+{
+ Q_OBJECT
+public:
+ DrawTextStyle(QStyle *base = 0) : QProxyStyle(), alignment(0) { setBaseStyle(base); }
+ void drawItemText(QPainter *painter, const QRect &rect,
+ int flags, const QPalette &pal, bool enabled,
+ const QString &text, QPalette::ColorRole textRole = QPalette::NoRole) const
+ {
+ DrawTextStyle *that = (DrawTextStyle *)this;
+ that->alignment = flags;
+ QProxyStyle::drawItemText(painter, rect, flags, pal, enabled, text, textRole);
+ }
+ int alignment;
+};
+
+void tst_QStyle::testDrawingShortcuts()
+{
+ {
+ QWidget w;
+ QToolButton *tb = new QToolButton(&w);
+ tb->setText("&abc");
+ DrawTextStyle *dts = new DrawTextStyle;
+ w.show();
+ tb->setStyle(dts);
+ QPixmap::grabWidget(tb);
+ QStyleOptionToolButton sotb;
+ sotb.initFrom(tb);
+ bool showMnemonic = dts->styleHint(QStyle::SH_UnderlineShortcut, &sotb, tb);
+ QVERIFY(dts->alignment & (showMnemonic ? Qt::TextShowMnemonic : Qt::TextHideMnemonic));
+ delete dts;
+ }
+ {
+ QToolBar w;
+ QToolButton *tb = new QToolButton(&w);
+ tb->setText("&abc");
+ DrawTextStyle *dts = new DrawTextStyle;
+ w.addWidget(tb);
+ w.show();
+ tb->setStyle(dts);
+ QPixmap::grabWidget(tb);
+ QStyleOptionToolButton sotb;
+ sotb.initFrom(tb);
+ bool showMnemonic = dts->styleHint(QStyle::SH_UnderlineShortcut, &sotb, tb);
+ QVERIFY(dts->alignment & (showMnemonic ? Qt::TextShowMnemonic : Qt::TextHideMnemonic));
+ delete dts;
+ }
+}
+
QTEST_MAIN(tst_QStyle)
#include "tst_qstyle.moc"
diff --git a/tests/auto/qtcpserver/tst_qtcpserver.cpp b/tests/auto/qtcpserver/tst_qtcpserver.cpp
index b2151b9..ab2a32d 100644
--- a/tests/auto/qtcpserver/tst_qtcpserver.cpp
+++ b/tests/auto/qtcpserver/tst_qtcpserver.cpp
@@ -105,6 +105,8 @@ private slots:
void invalidProxy();
void proxyFactory_data();
void proxyFactory();
+
+ void qtbug14268_peek();
};
// Testing get/set functions
@@ -662,5 +664,56 @@ void tst_QTcpServer::proxyFactory()
QTEST(int(server.serverError()), "expectedError");
}
+class Qtbug14268Helper : public QObject
+{
+ Q_OBJECT
+public:
+ QByteArray lastDataPeeked;
+public slots:
+ void newConnection() {
+ QTcpServer* server=static_cast<QTcpServer*>(sender());
+ QTcpSocket* s=server->nextPendingConnection();
+ connect(s,SIGNAL(readyRead()),this,SLOT(onServerReadyRead()));
+ }
+ void onServerReadyRead() {
+ QTcpSocket* clientSocket=static_cast<QTcpSocket*>(sender());
+ lastDataPeeked = clientSocket->peek(128*1024).toHex();
+ QTestEventLoop::instance().exitLoop();
+ }
+};
+
+// there is a similar test inside tst_qtcpsocket that uses the waitFor* functions instead
+void tst_QTcpServer::qtbug14268_peek()
+{
+ QFETCH_GLOBAL(bool, setProxy);
+ if (setProxy)
+ return;
+
+ QTcpServer server;
+ server.listen();
+
+ Qtbug14268Helper helper;
+ QObject::connect(&server, SIGNAL(newConnection()), &helper, SLOT(newConnection()));
+
+ QTcpSocket client;
+ client.connectToHost(QHostAddress::LocalHost, server.serverPort());
+ QVERIFY(client.waitForConnected(2000));
+
+ client.write("abc\n");
+ QTestEventLoop::instance().enterLoop(5);
+ QVERIFY(!QTestEventLoop::instance().timeout());
+ QVERIFY(helper.lastDataPeeked == QByteArray("6162630a"));
+
+ client.write("def\n");
+ QTestEventLoop::instance().enterLoop(5);
+ QVERIFY(!QTestEventLoop::instance().timeout());
+ QVERIFY(helper.lastDataPeeked == QByteArray("6162630a6465660a"));
+
+ client.write("ghi\n");
+ QTestEventLoop::instance().enterLoop(5);
+ QVERIFY(!QTestEventLoop::instance().timeout());
+ QVERIFY(helper.lastDataPeeked == QByteArray("6162630a6465660a6768690a"));
+}
+
QTEST_MAIN(tst_QTcpServer)
#include "tst_qtcpserver.moc"
diff --git a/tests/auto/qtcpsocket/tst_qtcpsocket.cpp b/tests/auto/qtcpsocket/tst_qtcpsocket.cpp
index 31cae40..2dbe5b7 100644
--- a/tests/auto/qtcpsocket/tst_qtcpsocket.cpp
+++ b/tests/auto/qtcpsocket/tst_qtcpsocket.cpp
@@ -201,6 +201,9 @@ private slots:
void proxyFactory_data();
void proxyFactory();
+ void qtbug14268_peek();
+
+
protected slots:
void nonBlockingIMAP_hostFound();
void nonBlockingIMAP_connected();
@@ -251,6 +254,41 @@ enum ProxyTests {
int tst_QTcpSocket::loopLevel = 0;
+class SocketPair: public QObject
+{
+ Q_OBJECT
+public:
+ QTcpSocket *endPoints[2];
+
+ SocketPair(QObject *parent = 0)
+ : QObject(parent)
+ {
+ endPoints[0] = endPoints[1] = 0;
+ }
+
+ bool create()
+ {
+ QTcpServer server;
+ server.listen();
+
+ QTcpSocket *active = new QTcpSocket(this);
+ active->connectToHost("127.0.0.1", server.serverPort());
+
+ if (!active->waitForConnected(1000))
+ return false;
+
+ if (!server.waitForNewConnection(1000))
+ return false;
+
+ QTcpSocket *passive = server.nextPendingConnection();
+ passive->setParent(this);
+
+ endPoints[0] = active;
+ endPoints[1] = passive;
+ return true;
+ }
+};
+
tst_QTcpSocket::tst_QTcpSocket()
{
Q_SET_DEFAULT_IAP
@@ -2467,6 +2505,40 @@ void tst_QTcpSocket::proxyFactory()
delete socket;
}
+// there is a similar test inside tst_qtcpserver that uses the event loop instead
+void tst_QTcpSocket::qtbug14268_peek()
+{
+ QFETCH_GLOBAL(bool, setProxy);
+ if (setProxy)
+ return;
+
+ SocketPair socketPair;
+ QVERIFY(socketPair.create());
+ QTcpSocket *outgoing = socketPair.endPoints[0];
+ QTcpSocket *incoming = socketPair.endPoints[1];
+
+ QVERIFY(incoming->state() == QTcpSocket::ConnectedState);
+ QVERIFY(outgoing->state() == QTcpSocket::ConnectedState);
+
+ outgoing->write("abc\n");
+ QVERIFY(outgoing->waitForBytesWritten(2000));
+ QVERIFY(incoming->waitForReadyRead(2000));
+ QVERIFY(incoming->peek(128*1024) == QByteArray("abc\n"));
+
+ outgoing->write("def\n");
+ QVERIFY(outgoing->waitForBytesWritten(2000));
+ QVERIFY(incoming->waitForReadyRead(2000));
+ QVERIFY(incoming->peek(128*1024) == QByteArray("abc\ndef\n"));
+
+ outgoing->write("ghi\n");
+ QVERIFY(outgoing->waitForBytesWritten(2000));
+ QVERIFY(incoming->waitForReadyRead(2000));
+ QVERIFY(incoming->peek(128*1024) == QByteArray("abc\ndef\nghi\n"));
+
+ QVERIFY(incoming->read(128*1024) == QByteArray("abc\ndef\nghi\n"));
+}
+
+
QTEST_MAIN(tst_QTcpSocket)
#include "tst_qtcpsocket.moc"
diff --git a/tests/auto/qthreadstorage/crashOnExit.cpp b/tests/auto/qthreadstorage/crashOnExit.cpp
new file mode 100644
index 0000000..96515a0
--- /dev/null
+++ b/tests/auto/qthreadstorage/crashOnExit.cpp
@@ -0,0 +1,64 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 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 <QtCore/QtCore>
+
+class Class
+{
+public:
+ ~Class()
+ {
+ // trigger creation of a new QThreadStorage, after the previous QThreadStorage from main() was destructed
+ static QThreadStorage<int *> threadstorage;
+ threadstorage.setLocalData(new int);
+ threadstorage.setLocalData(new int);
+ }
+};
+
+int main()
+{
+ // instantiate the class that will use QThreadStorage from its destructor, it's destructor will be run last
+ static Class instance;
+ // instantiate QThreadStorage, it's destructor (and the global destructors for QThreadStorages internals) will run first
+ static QThreadStorage<int *> threadstorage;
+ threadstorage.setLocalData(new int);
+ threadstorage.setLocalData(new int);
+}
diff --git a/tests/auto/qthreadstorage/crashOnExit.pro b/tests/auto/qthreadstorage/crashOnExit.pro
new file mode 100644
index 0000000..918ef39
--- /dev/null
+++ b/tests/auto/qthreadstorage/crashOnExit.pro
@@ -0,0 +1,4 @@
+SOURCES += crashOnExit.cpp
+QT = core
+CONFIG-=app_bundle
+CONFIG+=console
diff --git a/tests/auto/qthreadstorage/qthreadstorage.pro b/tests/auto/qthreadstorage/qthreadstorage.pro
index 3071098..a06f89c 100644
--- a/tests/auto/qthreadstorage/qthreadstorage.pro
+++ b/tests/auto/qthreadstorage/qthreadstorage.pro
@@ -1,4 +1,4 @@
-load(qttest_p4)
-SOURCES += tst_qthreadstorage.cpp
-QT = core
-symbian:LIBS += -llibpthread
+TEMPLATE = subdirs
+SUBDIRS = \
+ tst_qthreadstorage.pro \
+ crashOnExit.pro
diff --git a/tests/auto/qthreadstorage/tst_qthreadstorage.cpp b/tests/auto/qthreadstorage/tst_qthreadstorage.cpp
index d8b404f..ed86165 100644
--- a/tests/auto/qthreadstorage/tst_qthreadstorage.cpp
+++ b/tests/auto/qthreadstorage/tst_qthreadstorage.cpp
@@ -76,6 +76,7 @@ private slots:
void autoDelete();
void adoptedThreads();
void ensureCleanupOrder();
+ void QTBUG13877_crashOnExit();
};
class Pointer
@@ -293,5 +294,21 @@ void tst_QThreadStorage::ensureCleanupOrder()
QVERIFY(First::order < Second::order);
}
+void tst_QThreadStorage::QTBUG13877_crashOnExit()
+{
+ QProcess process;
+#ifdef Q_OS_WIN
+# ifdef QT_NO_DEBUG
+ process.start("release/crashOnExit");
+# else
+ process.start("debug/crashOnExit");
+# endif
+#else
+ process.start("./crashOnExit");
+#endif
+ QVERIFY(process.waitForFinished());
+ QVERIFY(process.exitStatus() != QProcess::CrashExit);
+}
+
QTEST_MAIN(tst_QThreadStorage)
#include "tst_qthreadstorage.moc"
diff --git a/tests/auto/qthreadstorage/tst_qthreadstorage.pro b/tests/auto/qthreadstorage/tst_qthreadstorage.pro
new file mode 100644
index 0000000..3071098
--- /dev/null
+++ b/tests/auto/qthreadstorage/tst_qthreadstorage.pro
@@ -0,0 +1,4 @@
+load(qttest_p4)
+SOURCES += tst_qthreadstorage.cpp
+QT = core
+symbian:LIBS += -llibpthread