summaryrefslogtreecommitdiffstats
path: root/tests/auto/widgets
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@qt.io>2016-06-13 09:01:02 +0200
committerLiang Qi <liang.qi@qt.io>2016-06-13 12:46:46 +0200
commit511790fd1af1e2886a0e2e8dd4308099705cd815 (patch)
treeb42aee537a6103cd064f9f41ae2889b09b79fd23 /tests/auto/widgets
parent1542d8881fc5ccbc5918cd4acbe4091ebbd24508 (diff)
parentcbe332405aa22257d432f1797b325f5e57007c20 (diff)
Merge remote-tracking branch 'origin/5.7' into dev
Conflicts: config_help.txt configure mkspecs/features/uikit/sdk.prf src/corelib/global/qhooks.cpp src/corelib/io/qfilesystemwatcher.cpp src/corelib/io/qlockfile_unix.cpp src/corelib/tools/qalgorithms.h src/gui/kernel/qwindowsysteminterface.h src/gui/text/qtextdocument_p.cpp src/network/access/access.pri src/network/access/qnetworkaccessmanager.cpp src/network/access/qnetworkreplynsurlconnectionimpl.mm src/src.pro src/testlib/qtestcase.cpp src/widgets/kernel/qwidgetbackingstore_p.h src/widgets/styles/qwindowscestyle.cpp src/widgets/styles/qwindowsmobilestyle.cpp tests/auto/corelib/io/qdiriterator/qdiriterator.pro tests/auto/corelib/io/qfileinfo/qfileinfo.pro tests/auto/gui/kernel/qwindow/BLACKLIST tests/auto/widgets/dialogs/qfilesystemmodel/tst_qfilesystemmodel.cpp tools/configure/configureapp.cpp Change-Id: Ibf7fb9c8cf263a810ade82f821345d0725c57c67
Diffstat (limited to 'tests/auto/widgets')
-rw-r--r--tests/auto/widgets/dialogs/qfilesystemmodel/tst_qfilesystemmodel.cpp18
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp45
-rw-r--r--tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp20
-rw-r--r--tests/auto/widgets/kernel/qwidget_window/tst_qwidget_window.cpp24
-rw-r--r--tests/auto/widgets/styles/qstyle/tst_qstyle.cpp9
-rw-r--r--tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp46
-rw-r--r--tests/auto/widgets/widgets/qopenglwidget/BLACKLIST3
-rw-r--r--tests/auto/widgets/widgets/qopenglwidget/tst_qopenglwidget.cpp133
-rw-r--r--tests/auto/widgets/widgets/qplaintextedit/tst_qplaintextedit.cpp19
-rw-r--r--tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp19
10 files changed, 280 insertions, 56 deletions
diff --git a/tests/auto/widgets/dialogs/qfilesystemmodel/tst_qfilesystemmodel.cpp b/tests/auto/widgets/dialogs/qfilesystemmodel/tst_qfilesystemmodel.cpp
index 5f314cddc4..00693ba6f7 100644
--- a/tests/auto/widgets/dialogs/qfilesystemmodel/tst_qfilesystemmodel.cpp
+++ b/tests/auto/widgets/dialogs/qfilesystemmodel/tst_qfilesystemmodel.cpp
@@ -104,10 +104,6 @@ private slots:
void caseSensitivity();
-#if defined(Q_OS_WIN)
- void Win32LongFileName();
-#endif
-
void drives_data();
void drives();
void dirsBeforeFiles();
@@ -892,20 +888,6 @@ void tst_QFileSystemModel::caseSensitivity()
}
}
-#if defined(Q_OS_WIN)
-void tst_QFileSystemModel::Win32LongFileName()
-{
- QString tmp = flatDirTestPath;
- QStringList files;
- files << "aaaaaaaaaa" << "bbbbbbbbbb" << "cccccccccc";
- QVERIFY(createFiles(tmp, files));
- QModelIndex root = model->setRootPath(tmp);
- QTRY_VERIFY(model->index(tmp + QLatin1String("/aaaaaa~1")).isValid());
- QTRY_VERIFY(model->index(tmp + QLatin1String("/bbbbbb~1")).isValid());
- QTRY_VERIFY(model->index(tmp + QLatin1String("/cccccc~1")).isValid());
-}
-#endif
-
void tst_QFileSystemModel::drives_data()
{
QTest::addColumn<QString>("path");
diff --git a/tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp b/tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp
index 2329db55e9..2ecc1120b9 100644
--- a/tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp
+++ b/tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp
@@ -49,6 +49,9 @@
#include <QtWidgets/QStyle>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QDesktopWidget>
+#ifndef QT_NO_OPENGL
+#include <QtWidgets/QOpenGLWidget>
+#endif
#include <private/qgraphicsscene_p.h>
#include <private/qgraphicsview_p.h>
#include "../../../shared/platforminputcontext.h"
@@ -154,6 +157,9 @@ private slots:
void sceneRect_growing();
void setSceneRect();
void viewport();
+#ifndef QT_NO_OPENGL
+ void openGLViewport();
+#endif
void dragMode_scrollHand();
void dragMode_rubberBand();
void rubberBandSelectionMode();
@@ -655,6 +661,45 @@ void tst_QGraphicsView::viewport()
QTest::qWait(25);
}
+#ifndef QT_NO_OPENGL
+void tst_QGraphicsView::openGLViewport()
+{
+ QGraphicsScene scene;
+ scene.setBackgroundBrush(Qt::white);
+ scene.addText("GraphicsView");
+ scene.addEllipse(QRectF(400, 50, 50, 50));
+ scene.addEllipse(QRectF(-100, -400, 50, 50));
+ scene.addEllipse(QRectF(50, -100, 50, 50));
+ scene.addEllipse(QRectF(-100, 50, 50, 50));
+
+ QGraphicsView view(&scene);
+ view.setSceneRect(-400, -400, 800, 800);
+ view.resize(400, 400);
+
+ QOpenGLWidget *glw = new QOpenGLWidget;
+ QSignalSpy spy1(glw, SIGNAL(resized()));
+ QSignalSpy spy2(glw, SIGNAL(frameSwapped()));
+
+ view.setViewport(glw);
+
+ view.show();
+ QTest::qWaitForWindowExposed(&view);
+ QTRY_VERIFY(spy1.count() > 0);
+ QTRY_VERIFY(spy2.count() >= spy1.count());
+ spy1.clear();
+ spy2.clear();
+
+ // Now test for resize (QTBUG-52419). This is special when the viewport is
+ // a QOpenGLWidget since the underlying FBO must also be maintained.
+ view.resize(300, 300);
+ QTRY_VERIFY(spy1.count() > 0);
+ QTRY_VERIFY(spy2.count() >= spy1.count());
+ // There is no sane way to check if the framebuffer contents got updated
+ // (grabFramebuffer is no good for the viewport case as that does not go
+ // through paintGL). So skip the actual verification.
+}
+#endif
+
void tst_QGraphicsView::dragMode_scrollHand()
{
for (int j = 0; j < 2; ++j) {
diff --git a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
index 3253d09bb8..e19e9e5bf1 100644
--- a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
+++ b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
@@ -326,7 +326,6 @@ private slots:
void setMaskInResizeEvent();
void moveInResizeEvent();
- void immediateRepaintAfterShow();
void immediateRepaintAfterInvalidateBuffer();
void effectiveWinId();
@@ -7988,25 +7987,6 @@ void tst_QWidget::moveInResizeEvent()
QTRY_COMPARE(testWidget.geometry(), expectedGeometry);
}
-void tst_QWidget::immediateRepaintAfterShow()
-{
- if (m_platform == QStringLiteral("xcb"))
- QSKIP("QTBUG-26424");
- if (m_platform != QStringLiteral("xcb") && m_platform != QStringLiteral("windows"))
- QSKIP("We don't support immediate repaint right after show on other platforms.");
-
- UpdateWidget widget;
- centerOnScreen(&widget);
- widget.show();
- qApp->processEvents();
- // On X11 in particular, we are now waiting for a MapNotify event before
- // syncing the backing store. However, if someone request a repaint()
- // we must repaint immediately regardless of the current state.
- widget.numPaintEvents = 0;
- widget.repaint();
- QCOMPARE(widget.numPaintEvents, 1);
-}
-
void tst_QWidget::immediateRepaintAfterInvalidateBuffer()
{
if (m_platform != QStringLiteral("xcb") && m_platform != QStringLiteral("windows"))
diff --git a/tests/auto/widgets/kernel/qwidget_window/tst_qwidget_window.cpp b/tests/auto/widgets/kernel/qwidget_window/tst_qwidget_window.cpp
index 301ddf441e..a59dd8c80e 100644
--- a/tests/auto/widgets/kernel/qwidget_window/tst_qwidget_window.cpp
+++ b/tests/auto/widgets/kernel/qwidget_window/tst_qwidget_window.cpp
@@ -83,6 +83,7 @@ private slots:
void tst_showWithoutActivating();
void tst_paintEventOnSecondShow();
+ void tst_paintEventOnResize_QTBUG50796();
#ifndef QT_NO_DRAGANDDROP
void tst_dnd();
@@ -365,6 +366,29 @@ void tst_QWidget_window::tst_paintEventOnSecondShow()
QTRY_VERIFY(w.paintEventCount > 0);
}
+void tst_QWidget_window::tst_paintEventOnResize_QTBUG50796()
+{
+ const QRect availableGeo = QGuiApplication::primaryScreen()->availableGeometry();
+
+ QWidget root;
+ root.setGeometry(availableGeo.width()/2 - 100, availableGeo.height()/2 - 100,
+ 200, 200);
+
+ PaintTestWidget *native = new PaintTestWidget(&root);
+ native->winId(); // We're testing native widgets
+ native->setGeometry(10, 10, 50, 50);
+
+ root.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&root));
+ QVERIFY(QTest::qWaitForWindowActive(&root));
+ QVERIFY(native->isVisible());
+
+ native->paintEventCount = 0;
+ native->resize(native->width() + 10, native->height() + 10);
+ QTest::qWait(50); // Wait for paint events
+ QTRY_COMPARE(native->paintEventCount, 1); // Only one paint event must occur
+}
+
#ifndef QT_NO_DRAGANDDROP
/* DnD test for QWidgetWindow (handleDrag*Event() functions).
diff --git a/tests/auto/widgets/styles/qstyle/tst_qstyle.cpp b/tests/auto/widgets/styles/qstyle/tst_qstyle.cpp
index bafebc0dc6..5925b764dd 100644
--- a/tests/auto/widgets/styles/qstyle/tst_qstyle.cpp
+++ b/tests/auto/widgets/styles/qstyle/tst_qstyle.cpp
@@ -882,17 +882,14 @@ private:
void tst_QStyle::testStyleOptionInit()
{
QStringList keys = QStyleFactory::keys();
- QVector<QStyle*> styles;
- styles.reserve(keys.size() + 1);
-
- styles << new QCommonStyle();
+ keys.prepend(QString()); // QCommonStyle marker
- Q_FOREACH (QStyle *style, styles) {
+ Q_FOREACH (const QString &key, keys) {
+ QStyle* style = key.isEmpty() ? new QCommonStyle : QStyleFactory::create(key);
TestStyleOptionInitProxy testStyle;
testStyle.setBaseStyle(style);
testAllFunctions(style);
QVERIFY(!testStyle.invalidOptionsDetected);
- delete style;
}
}
diff --git a/tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp b/tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp
index 654e1899f0..cb7643d1ac 100644
--- a/tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp
+++ b/tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp
@@ -83,6 +83,7 @@ private slots:
void widgetActionFocus();
void mouseActivation();
void tearOff();
+ void submenuTearOffDontClose();
void layoutDirection();
void task208001_stylesheet();
@@ -648,6 +649,51 @@ void tst_QMenu::tearOff()
#endif // QT_NO_CURSOR
}
+void tst_QMenu::submenuTearOffDontClose()
+{
+ QWidget widget;
+ QMenu *menu = new QMenu(&widget);
+ QVERIFY(!menu->isTearOffEnabled()); //default value
+ menu->setTearOffEnabled(true);
+ QVERIFY(menu->isTearOffEnabled());
+ QMenu *submenu = new QMenu(&widget);
+ submenu->addAction("aaa");
+ submenu->addAction("bbb");
+ QVERIFY(!submenu->isTearOffEnabled()); //default value
+ submenu->setTearOffEnabled(true);
+ QVERIFY(submenu->isTearOffEnabled());
+ menu->addMenu(submenu);
+
+ widget.resize(300, 200);
+ centerOnScreen(&widget);
+ widget.show();
+ widget.activateWindow();
+ QVERIFY(QTest::qWaitForWindowActive(&widget));
+ // Show parent menu
+ menu->popup(widget.geometry().topRight() + QPoint(50, 0));
+ QVERIFY(QTest::qWaitForWindowActive(menu));
+ // Then its submenu
+ const QRect submenuRect = menu->actionGeometry(menu->actions().at(0));
+ const QPoint submenuPos(submenuRect.topLeft() + QPoint(3, 3));
+ // Move then click to avoid the submenu moves from causing it to close
+ QTest::mouseMove(menu, submenuPos, 100);
+ QTest::mouseClick(menu, Qt::LeftButton, 0, submenuPos, 100);
+ QTRY_VERIFY(QTest::qWaitForWindowActive(submenu));
+ // Make sure we enter the submenu frame directly on the tear-off area
+ QTest::mouseMove(submenu, QPoint(10, 3), 100);
+ if (submenu->style()->styleHint(QStyle::SH_Menu_SubMenuDontStartSloppyOnLeave)) {
+ qWarning("Sloppy menu timer disabled by the style: %s", qPrintable(QApplication::style()->objectName()));
+ // Submenu must get the enter event
+ QTRY_VERIFY(submenu->underMouse());
+ } else {
+ const int closeTimeout = submenu->style()->styleHint(QStyle::SH_Menu_SubMenuSloppyCloseTimeout);
+ QTest::qWait(closeTimeout + 100);
+ // Menu must not disappear and it must get the enter event
+ QVERIFY(submenu->isVisible());
+ QVERIFY(submenu->underMouse());
+ }
+}
+
void tst_QMenu::layoutDirection()
{
QMainWindow win;
diff --git a/tests/auto/widgets/widgets/qopenglwidget/BLACKLIST b/tests/auto/widgets/widgets/qopenglwidget/BLACKLIST
index 86c7141268..fa326a6ea5 100644
--- a/tests/auto/widgets/widgets/qopenglwidget/BLACKLIST
+++ b/tests/auto/widgets/widgets/qopenglwidget/BLACKLIST
@@ -12,3 +12,6 @@ windows msvc-2010 32bit developer-build
#QTBUG-31611
[reparentToNotYetCreated]
windows msvc-2010 32bit developer-build
+
+[stackWidgetOpaqueChildIsVisible]
+windows
diff --git a/tests/auto/widgets/widgets/qopenglwidget/tst_qopenglwidget.cpp b/tests/auto/widgets/widgets/qopenglwidget/tst_qopenglwidget.cpp
index c76c4d927b..e3e26d612f 100644
--- a/tests/auto/widgets/widgets/qopenglwidget/tst_qopenglwidget.cpp
+++ b/tests/auto/widgets/widgets/qopenglwidget/tst_qopenglwidget.cpp
@@ -29,11 +29,14 @@
#include <QtWidgets/QOpenGLWidget>
#include <QtGui/QOpenGLFunctions>
#include <QtGui/QPainter>
+#include <QtGui/QScreen>
+#include <QtWidgets/QDesktopWidget>
#include <QtWidgets/QGraphicsView>
#include <QtWidgets/QGraphicsScene>
#include <QtWidgets/QGraphicsRectItem>
#include <QtWidgets/QVBoxLayout>
#include <QtWidgets/QPushButton>
+#include <QtWidgets/QStackedWidget>
#include <QtTest/QtTest>
#include <QSignalSpy>
@@ -54,6 +57,7 @@ private slots:
void fboRedirect();
void showHide();
void nativeWindow();
+ void stackWidgetOpaqueChildIsVisible();
};
void tst_QOpenGLWidget::create()
@@ -420,6 +424,135 @@ void tst_QOpenGLWidget::nativeWindow()
QVERIFY(image.pixel(30, 40) == qRgb(0, 255, 0));
}
+static inline QString msgRgbMismatch(unsigned actual, unsigned expected)
+{
+ return QString::asprintf("Color mismatch, %#010x != %#010x", actual, expected);
+}
+
+static QPixmap grabWidgetWithoutRepaint(const QWidget *widget, QRect clipArea)
+{
+ const QWidget *targetWidget = widget;
+#ifdef Q_OS_WIN
+ // OpenGL content is not properly grabbed on Windows when passing a top level widget window,
+ // because GDI functions can't grab OpenGL layer content.
+ // Instead the whole screen should be captured, with an adjusted clip area, which contains
+ // the final composited content.
+ QDesktopWidget *desktopWidget = QApplication::desktop();
+ const QWidget *mainScreenWidget = desktopWidget->screen();
+ targetWidget = mainScreenWidget;
+ clipArea = QRect(widget->mapToGlobal(clipArea.topLeft()),
+ widget->mapToGlobal(clipArea.bottomRight()));
+#endif
+
+ const QWindow *window = targetWidget->window()->windowHandle();
+ Q_ASSERT(window);
+ WId windowId = window->winId();
+
+ QScreen *screen = window->screen();
+ Q_ASSERT(screen);
+
+ const QSize size = clipArea.size();
+ const QPixmap result = screen->grabWindow(windowId,
+ clipArea.x(),
+ clipArea.y(),
+ size.width(),
+ size.height());
+ return result;
+}
+
+#define VERIFY_COLOR(child, region, color) verifyColor(child, region, color, __LINE__)
+
+bool verifyColor(const QWidget *widget, const QRect &clipArea, const QColor &color, int callerLine)
+{
+ for (int t = 0; t < 6; t++) {
+ const QPixmap pixmap = grabWidgetWithoutRepaint(widget, clipArea);
+ if (!QTest::qCompare(pixmap.size(),
+ clipArea.size(),
+ "pixmap.size()",
+ "rect.size()",
+ __FILE__,
+ callerLine))
+ return false;
+
+
+ const QImage image = pixmap.toImage();
+ QPixmap expectedPixmap(pixmap); /* ensure equal formats */
+ expectedPixmap.detach();
+ expectedPixmap.fill(color);
+
+ uint alphaCorrection = image.format() == QImage::Format_RGB32 ? 0xff000000 : 0;
+ uint firstPixel = image.pixel(0,0) | alphaCorrection;
+
+ // Retry a couple of times. Some window managers have transparency animation, or are
+ // just slow to render.
+ if (t < 5) {
+ if (firstPixel == QColor(color).rgb()
+ && image == expectedPixmap.toImage())
+ return true;
+ else
+ QTest::qWait(200);
+ } else {
+ if (!QTest::qVerify(firstPixel == QColor(color).rgb(),
+ "firstPixel == QColor(color).rgb()",
+ qPrintable(msgRgbMismatch(firstPixel, QColor(color).rgb())),
+ __FILE__, callerLine)) {
+ return false;
+ }
+ if (!QTest::qVerify(image == expectedPixmap.toImage(),
+ "image == expectedPixmap.toImage()",
+ "grabbed pixmap differs from expected pixmap",
+ __FILE__, callerLine)) {
+ return false;
+ }
+ }
+ }
+
+ return false;
+}
+
+void tst_QOpenGLWidget::stackWidgetOpaqueChildIsVisible()
+{
+#ifdef Q_OS_OSX
+ QSKIP("QScreen::grabWindow() doesn't work properly on OSX HighDPI screen: QTBUG-46803");
+ return;
+#endif
+
+ QStackedWidget stack;
+
+ QWidget* emptyWidget = new QWidget(&stack);
+ stack.addWidget(emptyWidget);
+
+ // Create an opaque red QOpenGLWidget.
+ const int dimensionSize = 400;
+ ClearWidget* clearWidget = new ClearWidget(&stack, dimensionSize, dimensionSize);
+ clearWidget->setAttribute(Qt::WA_OpaquePaintEvent);
+ stack.addWidget(clearWidget);
+
+ // Show initial QWidget.
+ stack.setCurrentIndex(0);
+ stack.resize(dimensionSize, dimensionSize);
+ stack.show();
+ QTest::qWaitForWindowExposed(&stack);
+ QTest::qWaitForWindowActive(&stack);
+
+ // Switch to the QOpenGLWidget.
+ stack.setCurrentIndex(1);
+ QTRY_COMPARE(clearWidget->m_paintCalled, true);
+
+ // Resize the tested region to be half size in the middle, because some OSes make the widget
+ // have rounded corners (e.g. OSX), and the grabbed window pixmap will not coincide perfectly
+ // with what was actually painted.
+ QRect clipArea = stack.rect();
+ clipArea.setSize(clipArea.size() / 2);
+ const int translationOffsetToMiddle = dimensionSize / 4;
+ clipArea.translate(translationOffsetToMiddle, translationOffsetToMiddle);
+
+ // Verify that the QOpenGLWidget was actually painted AND displayed.
+ const QColor red(255, 0, 0, 255);
+ VERIFY_COLOR(&stack, clipArea, red);
+ #undef VERIFY_COLOR
+}
+
QTEST_MAIN(tst_QOpenGLWidget)
#include "tst_qopenglwidget.moc"
diff --git a/tests/auto/widgets/widgets/qplaintextedit/tst_qplaintextedit.cpp b/tests/auto/widgets/widgets/qplaintextedit/tst_qplaintextedit.cpp
index a6d3a84495..31bbcf9c7f 100644
--- a/tests/auto/widgets/widgets/qplaintextedit/tst_qplaintextedit.cpp
+++ b/tests/auto/widgets/widgets/qplaintextedit/tst_qplaintextedit.cpp
@@ -1161,12 +1161,19 @@ void tst_QPlainTextEdit::selectWordsFromStringsContainingSeparators_data()
QTest::addColumn<QString>("testString");
QTest::addColumn<QString>("selectedWord");
- QStringList wordSeparators;
- wordSeparators << "." << "," << "?" << "!" << ":" << ";" << "-" << "<" << ">" << "["
- << "]" << "(" << ")" << "{" << "}" << "=" << "\t"<< QString(QChar::Nbsp);
-
- foreach (QString s, wordSeparators)
- QTest::newRow(QString("separator: " + s).toLocal8Bit()) << QString("foo") + s + QString("bar") << QString("foo");
+ const ushort wordSeparators[] =
+ {'.', ',', '?', '!', ':', ';', '-', '<', '>', '[', ']', '(', ')', '{', '}',
+ '=', '\t', ushort(QChar::Nbsp)};
+
+ for (size_t i = 0, count = sizeof(wordSeparators) / sizeof(wordSeparators[0]); i < count; ++i) {
+ const ushort u = wordSeparators[i];
+ QByteArray rowName = QByteArrayLiteral("separator: ");
+ if (u >= 32 && u < 128)
+ rowName += char(u);
+ else
+ rowName += QByteArrayLiteral("0x") + QByteArray::number(u, 16);
+ QTest::newRow(rowName.constData()) << QString("foo") + QChar(u) + QString("bar") << QString("foo");
+ }
}
void tst_QPlainTextEdit::selectWordsFromStringsContainingSeparators()
diff --git a/tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp b/tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp
index 7b26489b39..cecec48113 100644
--- a/tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp
+++ b/tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp
@@ -1512,12 +1512,19 @@ void tst_QTextEdit::selectWordsFromStringsContainingSeparators_data()
QTest::addColumn<QString>("testString");
QTest::addColumn<QString>("selectedWord");
- QStringList wordSeparators;
- wordSeparators << "." << "," << "?" << "!" << ":" << ";" << "-" << "<" << ">" << "["
- << "]" << "(" << ")" << "{" << "}" << "=" << "\t"<< QString(QChar::Nbsp);
-
- foreach (QString s, wordSeparators)
- QTest::newRow(QString("separator: " + s).toLocal8Bit()) << QString("foo") + s + QString("bar") << QString("foo");
+ const ushort wordSeparators[] =
+ {'.', ',', '?', '!', ':', ';', '-', '<', '>', '[', ']', '(', ')', '{', '}',
+ '=', '\t', ushort(QChar::Nbsp)};
+
+ for (size_t i = 0, count = sizeof(wordSeparators) / sizeof(wordSeparators[0]); i < count; ++i) {
+ const ushort u = wordSeparators[i];
+ QByteArray rowName = QByteArrayLiteral("separator: ");
+ if (u >= 32 && u < 128)
+ rowName += char(u);
+ else
+ rowName += QByteArrayLiteral("0x") + QByteArray::number(u, 16);
+ QTest::newRow(rowName.constData()) << QString("foo") + QChar(u) + QString("bar") << QString("foo");
+ }
}
void tst_QTextEdit::selectWordsFromStringsContainingSeparators()