summaryrefslogtreecommitdiffstats
path: root/tests/auto/exceptionsafety_objects/tst_exceptionsafety_objects.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/exceptionsafety_objects/tst_exceptionsafety_objects.cpp')
-rw-r--r--tests/auto/exceptionsafety_objects/tst_exceptionsafety_objects.cpp122
1 files changed, 84 insertions, 38 deletions
diff --git a/tests/auto/exceptionsafety_objects/tst_exceptionsafety_objects.cpp b/tests/auto/exceptionsafety_objects/tst_exceptionsafety_objects.cpp
index e7e516eddd..d167228b7b 100644
--- a/tests/auto/exceptionsafety_objects/tst_exceptionsafety_objects.cpp
+++ b/tests/auto/exceptionsafety_objects/tst_exceptionsafety_objects.cpp
@@ -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