summaryrefslogtreecommitdiffstats
path: root/tests/auto/exceptionsafety_objects
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/exceptionsafety_objects')
-rw-r--r--tests/auto/exceptionsafety_objects/oomsimulator.h34
-rw-r--r--tests/auto/exceptionsafety_objects/tst_exceptionsafety_objects.cpp156
2 files changed, 118 insertions, 72 deletions
diff --git a/tests/auto/exceptionsafety_objects/oomsimulator.h b/tests/auto/exceptionsafety_objects/oomsimulator.h
index 8f023e5..a85a65e 100644
--- a/tests/auto/exceptionsafety_objects/oomsimulator.h
+++ b/tests/auto/exceptionsafety_objects/oomsimulator.h
@@ -7,29 +7,29 @@
** 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.
+** 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
+** 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.
-**
-**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
**
**
**
diff --git a/tests/auto/exceptionsafety_objects/tst_exceptionsafety_objects.cpp b/tests/auto/exceptionsafety_objects/tst_exceptionsafety_objects.cpp
index e7e516e..3cfcc49 100644
--- a/tests/auto/exceptionsafety_objects/tst_exceptionsafety_objects.cpp
+++ b/tests/auto/exceptionsafety_objects/tst_exceptionsafety_objects.cpp
@@ -7,29 +7,29 @@
** 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.
+** 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
+** 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.
-**
-**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
**
**
**
@@ -60,7 +60,7 @@ QT_USE_NAMESPACE
#include "3rdparty/memcheck.h"
#endif
-class tst_ExceptionSafetyObjects: public QObject
+class tst_ExceptionSafety_Objects: public QObject
{
Q_OBJECT
@@ -156,7 +156,7 @@ struct DirCreator : public AbstractTester
}
};
-void tst_ExceptionSafetyObjects::objects_data()
+void tst_ExceptionSafety_Objects::objects_data()
{
QTest::addColumn<AbstractTester *>("objectCreator");
@@ -164,12 +164,12 @@ void tst_ExceptionSafetyObjects::objects_data()
NEWROW(QObject);
NEWROW(QBuffer);
NEWROW(QFile);
+ NEWROW(QFSFileEngine);
NEWROW(QProcess);
NEWROW(QSettings);
NEWROW(QThread);
NEWROW(QThreadPool);
NEWROW(QTranslator);
- NEWROW(QFSFileEngine);
#define NEWROW2(T, CREATOR) QTest::newRow(#T) << static_cast<AbstractTester *>(new CREATOR)
NEWROW2(QBitArray, BitArrayCreator);
@@ -177,7 +177,6 @@ void tst_ExceptionSafetyObjects::objects_data()
NEWROW2(QCryptographicHash, CryptographicHashCreator);
NEWROW2(QDataStream, DataStreamCreator);
NEWROW2(QDir, DirCreator);
-
}
// create and destructs an object, and lets each and every allocation
@@ -274,9 +273,9 @@ public:
}
};
-QtMsgHandler tst_ExceptionSafetyObjects::testMessageHandler;
+QtMsgHandler tst_ExceptionSafety_Objects::testMessageHandler;
-void tst_ExceptionSafetyObjects::safeMessageHandler(QtMsgType type, const char *msg)
+void tst_ExceptionSafety_Objects::safeMessageHandler(QtMsgType type, const char *msg)
{
// this temporarily suspends OOM testing while handling a message
int currentIndex = mallocFailIndex;
@@ -301,7 +300,7 @@ void debugUnexpected()
(*defaultUnexpected)();
}
-void tst_ExceptionSafetyObjects::initTestCase()
+void tst_ExceptionSafety_Objects::initTestCase()
{
// set handlers for bad exception cases, you might want to step in and breakpoint the default handlers too
defaultTerminate = std::set_terminate(&debugTerminate);
@@ -345,17 +344,25 @@ void tst_ExceptionSafetyObjects::initTestCase()
QCOMPARE(malloc2Failed, 1);
}
-void tst_ExceptionSafetyObjects::cleanupTestCase()
+void tst_ExceptionSafety_Objects::cleanupTestCase()
{
qInstallMsgHandler(testMessageHandler);
}
-void tst_ExceptionSafetyObjects::objects()
+void tst_ExceptionSafety_Objects::objects()
{
+ QLatin1String tag = QLatin1String(QTest::currentDataTag());
+ if (tag == QLatin1String("QFile")
+ || tag == QLatin1String("QProcess")
+ || tag == QLatin1String("QSettings")
+ || tag == QLatin1String("QThread")
+ || tag == QLatin1String("QThreadPool"))
+ QSKIP("This type of object is not currently strongly exception safe", SkipSingle);
+
QFETCH(AbstractTester *, objectCreator);
doOOMTest(*objectCreator, 0);
-
+
delete objectCreator;
}
@@ -364,7 +371,8 @@ struct WidgetCreator : public AbstractTester
{
void operator()(QObject *parent)
{
- Q_ASSERT(!parent || parent->isWidgetType());
+ if (parent && !parent->isWidgetType())
+ qFatal("%s: parent must be either null or a widget type", Q_FUNC_INFO);
QScopedPointer<T> ptr(parent ? new T(static_cast<QWidget *>(parent)) : new T);
}
};
@@ -374,7 +382,8 @@ template <> struct WidgetCreator<QSizeGrip> : public AbstractTester
{
void operator()(QObject *parent)
{
- Q_ASSERT(!parent || parent->isWidgetType());
+ if (parent && !parent->isWidgetType())
+ qFatal("%s: parent must be either null or a widget type", Q_FUNC_INFO);
QScopedPointer<QSizeGrip> ptr(new QSizeGrip(static_cast<QWidget *>(parent)));
}
};
@@ -384,17 +393,18 @@ template <> struct WidgetCreator<QDesktopWidget> : public AbstractTester
{
void operator()(QObject *parent)
{
- Q_ASSERT(!parent || parent->isWidgetType());
+ if (parent && !parent->isWidgetType())
+ qFatal("%s: parent must be either null or a widget type", Q_FUNC_INFO);
QScopedPointer<QDesktopWidget> ptr(new QDesktopWidget());
}
};
-void tst_ExceptionSafetyObjects::widgets_data()
+void tst_ExceptionSafety_Objects::widgets_data()
{
#ifdef Q_OS_SYMBIAN
// Initialise the S60 rasteriser, which crashes if started while out of memory
- QImage image(20, 20, QImage::Format_RGB32);
- QPainter p(&image);
- p.drawText(0, 15, "foo");
+ QImage image(20, 20, QImage::Format_RGB32);
+ QPainter p(&image);
+ p.drawText(0, 15, "foo");
#endif
QTest::addColumn<AbstractTester *>("widgetCreator");
@@ -405,23 +415,27 @@ void tst_ExceptionSafetyObjects::widgets_data()
NEWROW(QWidget);
NEWROW(QButtonGroup);
- NEWROW(QDesktopWidget);
NEWROW(QCheckBox);
+ NEWROW(QColumnView);
NEWROW(QComboBox);
NEWROW(QCommandLinkButton);
NEWROW(QDateEdit);
NEWROW(QDateTimeEdit);
+ NEWROW(QDesktopWidget);
NEWROW(QDial);
NEWROW(QDoubleSpinBox);
NEWROW(QFocusFrame);
NEWROW(QFontComboBox);
NEWROW(QFrame);
NEWROW(QGroupBox);
- NEWROW(QLCDNumber);
NEWROW(QLabel);
NEWROW(QLCDNumber);
NEWROW(QLineEdit);
+ NEWROW(QListView);
+ NEWROW(QListWidget);
+ NEWROW(QMainWindow);
NEWROW(QMenu);
+ NEWROW(QMenuBar);
NEWROW(QPlainTextEdit);
NEWROW(QProgressBar);
NEWROW(QPushButton);
@@ -435,28 +449,58 @@ void tst_ExceptionSafetyObjects::widgets_data()
NEWROW(QStackedWidget);
NEWROW(QStatusBar);
NEWROW(QTabBar);
+ NEWROW(QTableView);
+ NEWROW(QTableWidget);
NEWROW(QTabWidget);
NEWROW(QTextBrowser);
NEWROW(QTextEdit);
NEWROW(QTimeEdit);
+ NEWROW(QToolBar);
NEWROW(QToolBox);
NEWROW(QToolButton);
- NEWROW(QStatusBar);
- NEWROW(QToolBar);
- NEWROW(QMenuBar);
- NEWROW(QMainWindow);
- NEWROW(QWorkspace);
- NEWROW(QColumnView);
- NEWROW(QListView);
- NEWROW(QListWidget);
- NEWROW(QTableView);
- NEWROW(QTableWidget);
NEWROW(QTreeView);
NEWROW(QTreeWidget);
+ NEWROW(QWorkspace);
}
-void tst_ExceptionSafetyObjects::widgets()
-{
+void tst_ExceptionSafety_Objects::widgets()
+{
+ QLatin1String tag = QLatin1String(QTest::currentDataTag());
+ if (tag == QLatin1String("QColumnView")
+ || tag == QLatin1String("QComboBox")
+ || tag == QLatin1String("QCommandLinkButton")
+ || tag == QLatin1String("QDateEdit")
+ || tag == QLatin1String("QDateTimeEdit")
+ || tag == QLatin1String("QDesktopWidget")
+ || tag == QLatin1String("QDoubleSpinBox")
+ || tag == QLatin1String("QFontComboBox")
+ || tag == QLatin1String("QGroupBox")
+ || tag == QLatin1String("QLineEdit")
+ || tag == QLatin1String("QListView")
+ || tag == QLatin1String("QListWidget")
+ || tag == QLatin1String("QMainWindow")
+ || tag == QLatin1String("QMenu")
+ || tag == QLatin1String("QMenuBar")
+ || tag == QLatin1String("QPlainTextEdit")
+ || tag == QLatin1String("QProgressBar")
+ || tag == QLatin1String("QPushButton")
+ || tag == QLatin1String("QScrollArea")
+ || tag == QLatin1String("QSpinBox")
+ || tag == QLatin1String("QStackedWidget")
+ || tag == QLatin1String("QStatusBar")
+ || tag == QLatin1String("QTableView")
+ || tag == QLatin1String("QTableWidget")
+ || tag == QLatin1String("QTabWidget")
+ || tag == QLatin1String("QTextBrowser")
+ || tag == QLatin1String("QTextEdit")
+ || tag == QLatin1String("QTimeEdit")
+ || tag == QLatin1String("QToolBar")
+ || tag == QLatin1String("QToolBox")
+ || tag == QLatin1String("QTreeView")
+ || tag == QLatin1String("QTreeWidget")
+ || tag == QLatin1String("QWorkspace"))
+ QSKIP("This type of widget is not currently strongly exception safe", SkipSingle);
+
QFETCH(AbstractTester *, widgetCreator);
doOOMTest(*widgetCreator, 0, 00000);
@@ -547,7 +591,9 @@ struct IntegerMoveable
};
int IntegerMoveable::instanceCount = 0;
+QT_BEGIN_NAMESPACE
Q_DECLARE_TYPEINFO(IntegerMoveable, Q_MOVABLE_TYPE);
+QT_END_NAMESPACE
template <typename T, template<typename> class Container>
void containerInsertTest(QObject*)
@@ -720,12 +766,12 @@ static void containerData()
QTest::newRow("erase moveable") << static_cast<TestFunction>(containerEraseTest<IntegerMoveable, Container>);
}
-void tst_ExceptionSafetyObjects::vector_data()
+void tst_ExceptionSafety_Objects::vector_data()
{
containerData<QVector>();
}
-void tst_ExceptionSafetyObjects::vector()
+void tst_ExceptionSafety_Objects::vector()
{
QFETCH(TestFunction, testFunction);
@@ -736,30 +782,30 @@ void tst_ExceptionSafetyObjects::vector()
doOOMTest(testFunction, 0);
}
-void tst_ExceptionSafetyObjects::list_data()
+void tst_ExceptionSafety_Objects::list_data()
{
containerData<QList>();
}
-void tst_ExceptionSafetyObjects::list()
+void tst_ExceptionSafety_Objects::list()
{
QFETCH(TestFunction, testFunction);
doOOMTest(testFunction, 0);
}
-void tst_ExceptionSafetyObjects::linkedList_data()
+void tst_ExceptionSafety_Objects::linkedList_data()
{
containerData<QLinkedList>();
}
-void tst_ExceptionSafetyObjects::linkedList()
+void tst_ExceptionSafety_Objects::linkedList()
{
QFETCH(TestFunction, testFunction);
doOOMTest(testFunction, 0);
}
-QTEST_MAIN(tst_ExceptionSafetyObjects)
+QTEST_MAIN(tst_ExceptionSafety_Objects)
#include "tst_exceptionsafety_objects.moc"
#endif // QT_NO_EXCEPTIONS