summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/corelib/io/qfile/BLACKLIST6
-rw-r--r--tests/auto/corelib/io/qfilesystemwatcher/tst_qfilesystemwatcher.cpp4
-rw-r--r--tests/auto/corelib/io/qprocess/BLACKLIST3
-rw-r--r--tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp8
-rw-r--r--tests/auto/corelib/tools/qlocale/tst_qlocale.cpp19
-rw-r--r--tests/auto/corelib/tools/qtime/tst_qtime.cpp15
-rw-r--r--tests/auto/dbus/qdbusabstractadaptor/tst_qdbusabstractadaptor.cpp5
-rw-r--r--tests/auto/gui/painting/qpainter/tst_qpainter.cpp108
-rw-r--r--tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp83
-rw-r--r--tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp11
-rw-r--r--tests/manual/qtabbar/main.cpp74
-rw-r--r--tests/manual/qtabbar/qtabbar.pro4
-rw-r--r--tests/manual/qtabbar/tabbarform.cpp13
-rw-r--r--tests/manual/qtabbar/tabbarform.h22
-rw-r--r--tests/manual/qtabbar/tabbarform.ui182
15 files changed, 521 insertions, 36 deletions
diff --git a/tests/auto/corelib/io/qfile/BLACKLIST b/tests/auto/corelib/io/qfile/BLACKLIST
index e3bc093c83..8d636d40b8 100644
--- a/tests/auto/corelib/io/qfile/BLACKLIST
+++ b/tests/auto/corelib/io/qfile/BLACKLIST
@@ -1,8 +1,10 @@
# QTBUG-48455
[readLineStdin]
-msvc-2015
+msvc-2015 ci
+msvc-2017 ci
[readLineStdin_lineByLine]
-msvc-2015
+msvc-2015 ci
+msvc-2017 ci
[openStandardStreamsFileDescriptors]
osx
[openStandardStreamsBufferedStreams]
diff --git a/tests/auto/corelib/io/qfilesystemwatcher/tst_qfilesystemwatcher.cpp b/tests/auto/corelib/io/qfilesystemwatcher/tst_qfilesystemwatcher.cpp
index 0ee7599b2c..154c7ec5bf 100644
--- a/tests/auto/corelib/io/qfilesystemwatcher/tst_qfilesystemwatcher.cpp
+++ b/tests/auto/corelib/io/qfilesystemwatcher/tst_qfilesystemwatcher.cpp
@@ -568,6 +568,10 @@ void tst_QFileSystemWatcher::watchFileAndItsDirectory()
QCOMPARE(fileChangedSpy.count(), 0);
QCOMPARE(dirChangedSpy.count(), 1);
+ // QTBUG-61792, removal should succeed (bug on Windows which uses one change
+ // notification per directory).
+ QVERIFY(watcher.removePath(testDir.absolutePath()));
+
QVERIFY(temporaryDir.rmdir(testDirName));
}
diff --git a/tests/auto/corelib/io/qprocess/BLACKLIST b/tests/auto/corelib/io/qprocess/BLACKLIST
index 216faa7fb4..a278af12d3 100644
--- a/tests/auto/corelib/io/qprocess/BLACKLIST
+++ b/tests/auto/corelib/io/qprocess/BLACKLIST
@@ -2,4 +2,5 @@
redhatenterpriselinuxworkstation-6.6
# QTBUG-48455
[fileWriterProcess]
-msvc-2015
+msvc-2015 ci
+msvc-2017 ci
diff --git a/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp b/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp
index 97fce88f19..bddc1cd2b2 100644
--- a/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp
+++ b/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp
@@ -2558,6 +2558,8 @@ void tst_QVariant::variantMap()
QVariant v3 = QVariant(QMetaType::type("QMap<QString, QVariant>"), &map);
QCOMPARE(qvariant_cast<QVariantMap>(v3).value("test").toInt(), 42);
+ QCOMPARE(v, QVariant(v.toHash()));
+
// multi-keys
map.insertMulti("test", 47);
v = map;
@@ -2565,6 +2567,8 @@ void tst_QVariant::variantMap()
QCOMPARE(map2, map);
map2 = v.toMap();
QCOMPARE(map2, map);
+
+ QCOMPARE(v, QVariant(v.toHash()));
}
void tst_QVariant::variantHash()
@@ -2587,6 +2591,8 @@ void tst_QVariant::variantHash()
QVariant v3 = QVariant(QMetaType::type("QHash<QString, QVariant>"), &hash);
QCOMPARE(qvariant_cast<QVariantHash>(v3).value("test").toInt(), 42);
+ QCOMPARE(v, QVariant(v.toMap()));
+
// multi-keys
hash.insertMulti("test", 47);
v = hash;
@@ -2594,6 +2600,8 @@ void tst_QVariant::variantHash()
QCOMPARE(hash2, hash);
hash2 = v.toHash();
QCOMPARE(hash2, hash);
+
+ QCOMPARE(v, QVariant(v.toMap()));
}
class CustomQObject : public QObject {
diff --git a/tests/auto/corelib/tools/qlocale/tst_qlocale.cpp b/tests/auto/corelib/tools/qlocale/tst_qlocale.cpp
index 661074ac16..88984feff7 100644
--- a/tests/auto/corelib/tools/qlocale/tst_qlocale.cpp
+++ b/tests/auto/corelib/tools/qlocale/tst_qlocale.cpp
@@ -1309,10 +1309,11 @@ void tst_QLocale::formatTime_data()
QTest::newRow("28") << QTime(1, 2, 3, 456) << "H:m:s.z" << "1:2:3.456";
QTest::newRow("29") << QTime(1, 2, 3, 456) << "H:m:s.zz" << "1:2:3.456456";
QTest::newRow("30") << QTime(1, 2, 3, 456) << "H:m:s.zzz" << "1:2:3.456";
- QTest::newRow("31") << QTime(1, 2, 3, 4) << "H:m:s.z" << "1:2:3.4";
- QTest::newRow("32") << QTime(1, 2, 3, 4) << "H:m:s.zzz" << "1:2:3.004";
- QTest::newRow("33") << QTime() << "H:m:s.zzz" << "";
- QTest::newRow("34") << QTime(1, 2, 3, 4) << "dd MM yyyy H:m:s.zzz" << "dd MM yyyy 1:2:3.004";
+ QTest::newRow("31") << QTime(1, 2, 3, 400) << "H:m:s.z" << "1:2:3.4";
+ QTest::newRow("32") << QTime(1, 2, 3, 4) << "H:m:s.z" << "1:2:3.004";
+ QTest::newRow("33") << QTime(1, 2, 3, 4) << "H:m:s.zzz" << "1:2:3.004";
+ QTest::newRow("34") << QTime() << "H:m:s.zzz" << "";
+ QTest::newRow("35") << QTime(1, 2, 3, 4) << "dd MM yyyy H:m:s.zzz" << "dd MM yyyy 1:2:3.004";
}
void tst_QLocale::formatTime()
@@ -1551,10 +1552,12 @@ void tst_QLocale::toDateTime_data()
<< "d/M/yyyy hh:h:mm" << "1/12/1974 05:5:14";
QTest::newRow("2C") << "C" << QDateTime(QDate(1974, 12, 1), QTime(15, 0, 0))
<< "d/M/yyyyy h" << "1/12/1974y 15";
- QTest::newRow("4C") << "C" << QDateTime(QDate(1974, 1, 1), QTime(0, 0, 0))
- << "d/M/yyyy zzz" << "1/1/1974 000";
- QTest::newRow("5C") << "C" << QDateTime(QDate(1974, 1, 1), QTime(0, 0, 0))
- << "dd/MM/yyy z" << "01/01/74y 0";
+ QTest::newRow("4C") << "C" << QDateTime(QDate(1974, 1, 1), QTime(0, 0, 0, 1))
+ << "d/M/yyyy zzz" << "1/1/1974 001";
+ QTest::newRow("5C") << "C" << QDateTime(QDate(1974, 1, 1), QTime(0, 0, 0, 1))
+ << "dd/MM/yyy z" << "01/01/74y 001";
+ QTest::newRow("5Cbis") << "C" << QDateTime(QDate(1974, 1, 1), QTime(0, 0, 0, 100))
+ << "dd/MM/yyy z" << "01/01/74y 1";
QTest::newRow("8C") << "C" << QDateTime(QDate(1974, 12, 2), QTime(0, 0, 13))
<< "ddddd/MMMMM/yy ss" << "Monday2/December12/74 13";
QTest::newRow("9C") << "C" << QDateTime(QDate(1974, 12, 1), QTime(0, 0, 13))
diff --git a/tests/auto/corelib/tools/qtime/tst_qtime.cpp b/tests/auto/corelib/tools/qtime/tst_qtime.cpp
index 71bf39fc4e..162047b537 100644
--- a/tests/auto/corelib/tools/qtime/tst_qtime.cpp
+++ b/tests/auto/corelib/tools/qtime/tst_qtime.cpp
@@ -560,6 +560,8 @@ void tst_QTime::fromStringFormat_data()
QTest::newRow("data9") << QString("2221") << QString("hhhh") << invalidTime();
QTest::newRow("data10") << QString("02:23PM") << QString("hh:mmAP") << QTime(14,23,0,0);
QTest::newRow("data11") << QString("02:23pm") << QString("hh:mmap") << QTime(14,23,0,0);
+ QTest::newRow("short-msecs-lt100") << QString("10:12:34:045") << QString("hh:m:ss:z") << QTime(10,12,34,45);
+ QTest::newRow("short-msecs-gt100") << QString("10:12:34:45") << QString("hh:m:ss:z") << QTime(10,12,34,450);
}
void tst_QTime::fromStringFormat()
@@ -711,12 +713,13 @@ void tst_QTime::toStringFormat_data()
QTest::addColumn<QString>("format");
QTest::addColumn<QString>("str");
- QTest::newRow( "data0" ) << QTime(0,0,0,0) << QString("h:m:s:z") << QString("0:0:0:0");
- QTest::newRow( "data1" ) << QTime(10,12,34,53) << QString("hh:mm:ss:zzz") << QString("10:12:34:053");
- QTest::newRow( "data2" ) << QTime(10,12,34,45) << QString("hh:m:ss:z") << QString("10:12:34:45");
- QTest::newRow( "data3" ) << QTime(10,12,34,45) << QString("hh:ss ap") << QString("10:34 am");
- QTest::newRow( "data4" ) << QTime(22,12,34,45) << QString("hh:zzz AP") << QString("10:045 PM");
- QTest::newRow( "data5" ) << QTime(230,230,230,230) << QString("hh:mm:ss") << QString();
+ QTest::newRow( "midnight" ) << QTime(0,0,0,0) << QString("h:m:s:z") << QString("0:0:0:0");
+ QTest::newRow( "full" ) << QTime(10,12,34,53) << QString("hh:mm:ss:zzz") << QString("10:12:34:053");
+ QTest::newRow( "short-msecs-lt100" ) << QTime(10,12,34,45) << QString("hh:m:ss:z") << QString("10:12:34:045");
+ QTest::newRow( "short-msecs-gt100" ) << QTime(10,12,34,450) << QString("hh:m:ss:z") << QString("10:12:34:45");
+ QTest::newRow( "am-pm" ) << QTime(10,12,34,45) << QString("hh:ss ap") << QString("10:34 am");
+ QTest::newRow( "AM-PM" ) << QTime(22,12,34,45) << QString("hh:zzz AP") << QString("10:045 PM");
+ QTest::newRow( "invalid" ) << QTime(230,230,230,230) << QString("hh:mm:ss") << QString();
}
void tst_QTime::toStringFormat()
diff --git a/tests/auto/dbus/qdbusabstractadaptor/tst_qdbusabstractadaptor.cpp b/tests/auto/dbus/qdbusabstractadaptor/tst_qdbusabstractadaptor.cpp
index 0edc5a92ea..20cd8caad3 100644
--- a/tests/auto/dbus/qdbusabstractadaptor/tst_qdbusabstractadaptor.cpp
+++ b/tests/auto/dbus/qdbusabstractadaptor/tst_qdbusabstractadaptor.cpp
@@ -1083,6 +1083,11 @@ void tst_QDBusAbstractAdaptor::methodCallsPeer_data()
void tst_QDBusAbstractAdaptor::methodCallsPeer()
{
+ if (QSysInfo::productType().compare("opensuse", Qt::CaseInsensitive) == 0
+ && QSysInfo::productVersion() == QLatin1String("42.1")
+ && qgetenv("QTEST_ENVIRONMENT").split(' ').contains("ci")) {
+ QSKIP("This test is occasionally hanging in the CI");
+ }
QDBusConnection con("peer");
QVERIFY(con.isConnected());
diff --git a/tests/auto/gui/painting/qpainter/tst_qpainter.cpp b/tests/auto/gui/painting/qpainter/tst_qpainter.cpp
index ed5b9fabb6..779783d5ec 100644
--- a/tests/auto/gui/painting/qpainter/tst_qpainter.cpp
+++ b/tests/auto/gui/painting/qpainter/tst_qpainter.cpp
@@ -303,6 +303,8 @@ private slots:
void blendNullRGB32();
void toRGB64();
+ void fillPolygon();
+
private:
void fillData();
void setPenColor(QPainter& p);
@@ -5144,6 +5146,112 @@ void tst_QPainter::toRGB64()
}
}
+void tst_QPainter::fillPolygon()
+{
+ QImage image(50, 50, QImage::Format_RGB32);
+ image.fill(Qt::white);
+
+ QPainter painter(&image);
+ QBrush brush(Qt::black, Qt::SolidPattern);
+ painter.setBrush(brush);
+
+ QPen pen(Qt::red, 0, Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin);
+ painter.setPen(pen);
+
+ const QPoint diamondpoints[5] = {
+ QPoint(-15, 0),
+ QPoint(0, -15),
+ QPoint(15, 0),
+ QPoint(0, 15),
+ QPoint(-15, 0)
+ };
+ enum { Outside1, Border1, Inside, Border2, Outside2 } state;
+
+ for (int i = 0; i < 16 ; i++)
+ {
+ for (int j = 0; j < 16 ; j++)
+ {
+ image.fill(Qt::white);
+ painter.resetTransform();
+ painter.translate(25 + i/16., 25 + j/16.);
+ painter.drawPolygon(diamondpoints, 5);
+
+ for (int x = 0; x < 50; x++) {
+ state = Outside1;
+ for (int y = 0; y < 50; y++) {
+ QRgb c = image.pixel(x, y);
+ switch (state) {
+ case Outside1:
+ if (c == QColor(Qt::red).rgb())
+ state = Border1;
+ else
+ QCOMPARE(c, QColor(Qt::white).rgb());
+ break;
+ case Border1:
+ if (c == QColor(Qt::black).rgb())
+ state = Inside;
+ else if (c == QColor(Qt::white).rgb())
+ state = Outside2;
+ else
+ QCOMPARE(c, QColor(Qt::red).rgb());
+ break;
+ case Inside:
+ if (c == QColor(Qt::red).rgb())
+ state = Border2;
+ else
+ QCOMPARE(c, QColor(Qt::black).rgb());
+ break;
+ case Border2:
+ if (c == QColor(Qt::white).rgb())
+ state = Outside2;
+ else
+ QCOMPARE(c, QColor(Qt::red).rgb());
+ break;
+ case Outside2:
+ QCOMPARE(c, QColor(Qt::white).rgb());
+ }
+ }
+ }
+ for (int y = 0; y < 50; y++) {
+ state = Outside1;
+ for (int x = 0; x < 50; x++) {
+ QRgb c = image.pixel(x, y);
+ switch (state) {
+ case Outside1:
+ if (c == QColor(Qt::red).rgb())
+ state = Border1;
+ else
+ QCOMPARE(c, QColor(Qt::white).rgb());
+ break;
+ case Border1:
+ if (c == QColor(Qt::black).rgb())
+ state = Inside;
+ else if (c == QColor(Qt::white).rgb())
+ state = Outside2;
+ else
+ QCOMPARE(c, QColor(Qt::red).rgb());
+ break;
+ case Inside:
+ if (c == QColor(Qt::red).rgb())
+ state = Border2;
+ else
+ QCOMPARE(c, QColor(Qt::black).rgb());
+ break;
+ case Border2:
+ if (c == QColor(Qt::white).rgb())
+ state = Outside2;
+ else
+ QCOMPARE(c, QColor(Qt::red).rgb());
+ break;
+ case Outside2:
+ QCOMPARE(c, QColor(Qt::white).rgb());
+ }
+ }
+ }
+ }
+ }
+}
+
QTEST_MAIN(tst_QPainter)
#include "tst_qpainter.moc"
diff --git a/tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp b/tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp
index a89f8f3c8a..b9785c35ac 100644
--- a/tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp
+++ b/tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp
@@ -60,6 +60,10 @@ static inline HWND getHWNDForWidget(const QWidget *widget)
}
#endif // Q_OS_WIN
+Q_DECLARE_METATYPE(QAbstractItemView::ScrollMode)
+Q_DECLARE_METATYPE(QMargins)
+Q_DECLARE_METATYPE(QSize)
+
// Make a widget frameless to prevent size constraints of title bars
// from interfering (Windows).
static inline void setFrameless(QWidget *w)
@@ -902,10 +906,11 @@ class PublicListView : public QListView
class TestDelegate : public QItemDelegate
{
public:
- TestDelegate(QObject *parent) : QItemDelegate(parent), m_sizeHint(50,50) {}
+ explicit TestDelegate(QObject *parent, const QSize &sizeHint = QSize(50,50))
+ : QItemDelegate(parent), m_sizeHint(sizeHint) {}
QSize sizeHint(const QStyleOptionViewItem &, const QModelIndex &) const { return m_sizeHint; }
- QSize m_sizeHint;
+ const QSize m_sizeHint;
};
typedef QList<int> IntList;
@@ -1250,9 +1255,7 @@ void tst_QListView::scrollBarRanges()
lv.setModel(&model);
lv.resize(250, 130);
- TestDelegate *delegate = new TestDelegate(&lv);
- delegate->m_sizeHint = QSize(100, rowHeight);
- lv.setItemDelegate(delegate);
+ lv.setItemDelegate(new TestDelegate(&lv, QSize(100, rowHeight)));
topLevel.show();
for (int h = 30; h <= 210; ++h) {
@@ -1268,14 +1271,18 @@ void tst_QListView::scrollBarAsNeeded_data()
{
QTest::addColumn<QSize>("size");
QTest::addColumn<int>("itemCount");
+ QTest::addColumn<QAbstractItemView::ScrollMode>("verticalScrollMode");
+ QTest::addColumn<QMargins>("viewportMargins");
+ QTest::addColumn<QSize>("delegateSize");
QTest::addColumn<int>("flow");
QTest::addColumn<bool>("horizontalScrollBarVisible");
QTest::addColumn<bool>("verticalScrollBarVisible");
-
QTest::newRow("TopToBottom, count:0")
<< QSize(200, 100)
<< 0
+ << QListView::ScrollPerItem
+ << QMargins() << QSize()
<< int(QListView::TopToBottom)
<< false
<< false;
@@ -1283,6 +1290,8 @@ void tst_QListView::scrollBarAsNeeded_data()
QTest::newRow("TopToBottom, count:1")
<< QSize(200, 100)
<< 1
+ << QListView::ScrollPerItem
+ << QMargins() << QSize()
<< int(QListView::TopToBottom)
<< false
<< false;
@@ -1290,13 +1299,46 @@ void tst_QListView::scrollBarAsNeeded_data()
QTest::newRow("TopToBottom, count:20")
<< QSize(200, 100)
<< 20
+ << QListView::ScrollPerItem
+ << QMargins() << QSize()
+ << int(QListView::TopToBottom)
+ << false
+ << true;
+
+ QTest::newRow("TopToBottom, fixed size, count:4")
+ << QSize(200, 200)
+ << 4
+ << QListView::ScrollPerPixel
+ << QMargins() << QSize(40, 40)
+ << int(QListView::TopToBottom)
+ << false
+ << false;
+
+ // QTBUG-61383, vertical case: take viewport margins into account
+ QTest::newRow("TopToBottom, fixed size, vertical margins, count:4")
+ << QSize(200, 200)
+ << 4
+ << QListView::ScrollPerPixel
+ << QMargins(0, 50, 0, 50) << QSize(40, 40)
<< int(QListView::TopToBottom)
<< false
<< true;
+ // QTBUG-61383, horizontal case: take viewport margins into account
+ QTest::newRow("TopToBottom, fixed size, horizontal margins, count:4")
+ << QSize(200, 200)
+ << 4
+ << QListView::ScrollPerPixel
+ << QMargins(50, 0, 50, 0) << QSize(120, 40)
+ << int(QListView::TopToBottom)
+ << true
+ << false;
+
QTest::newRow("LeftToRight, count:0")
<< QSize(200, 100)
<< 0
+ << QListView::ScrollPerItem
+ << QMargins() << QSize()
<< int(QListView::LeftToRight)
<< false
<< false;
@@ -1304,6 +1346,8 @@ void tst_QListView::scrollBarAsNeeded_data()
QTest::newRow("LeftToRight, count:1")
<< QSize(200, 100)
<< 1
+ << QListView::ScrollPerItem
+ << QMargins() << QSize()
<< int(QListView::LeftToRight)
<< false
<< false;
@@ -1311,17 +1355,31 @@ void tst_QListView::scrollBarAsNeeded_data()
QTest::newRow("LeftToRight, count:20")
<< QSize(200, 100)
<< 20
+ << QListView::ScrollPerItem
+ << QMargins() << QSize()
<< int(QListView::LeftToRight)
<< true
<< false;
}
+
+class ScrollBarTestListView : public QListView
+{
+ public:
+ explicit ScrollBarTestListView(QWidget *p) : QListView(p) {}
+
+ using QAbstractScrollArea::setViewportMargins;
+};
+
void tst_QListView::scrollBarAsNeeded()
{
QFETCH(QSize, size);
QFETCH(int, itemCount);
+ QFETCH(QAbstractItemView::ScrollMode, verticalScrollMode);
+ QFETCH(QMargins, viewportMargins);
+ QFETCH(QSize, delegateSize);
QFETCH(int, flow);
QFETCH(bool, horizontalScrollBarVisible);
QFETCH(bool, verticalScrollBarVisible);
@@ -1330,10 +1388,17 @@ void tst_QListView::scrollBarAsNeeded()
const int rowCounts[3] = {0, 1, 20};
QWidget topLevel;
- QListView lv(&topLevel);
+ topLevel.setWindowTitle(QLatin1String(QTest::currentTestFunction()) + QStringLiteral("::")
+ + QLatin1String(QTest::currentDataTag()));
+ ScrollBarTestListView lv(&topLevel);
lv.setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
lv.setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
+ lv.setVerticalScrollMode(verticalScrollMode);
+ lv.setViewportMargins(viewportMargins);
lv.setFlow((QListView::Flow)flow);
+ if (!delegateSize.isEmpty())
+ lv.setItemDelegate(new TestDelegate(&lv, delegateSize));
+
QStringListModel model(&lv);
lv.setModel(&model);
lv.resize(size);
@@ -2380,9 +2445,7 @@ void tst_QListView::horizontalScrollingByVerticalWheelEvents()
QListView lv;
lv.setWrapping(true);
- TestDelegate *delegate = new TestDelegate(&lv);
- delegate->m_sizeHint = QSize(100, 100);
- lv.setItemDelegate(delegate);
+ lv.setItemDelegate(new TestDelegate(&lv, QSize(100, 100)));
QtTestModel model;
model.colCount = 1;
diff --git a/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp b/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp
index a0ba91ba4a..3f7fdd6f6f 100644
--- a/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp
+++ b/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp
@@ -3106,7 +3106,6 @@ void tst_QLineEdit::inputMaskAndValidator()
void tst_QLineEdit::maxLengthAndInputMask()
{
- // Really a test for #30447
QLineEdit *testWidget = ensureTestWidget();
QVERIFY(testWidget->inputMask().isNull());
testWidget->setMaxLength(10);
@@ -3114,6 +3113,16 @@ void tst_QLineEdit::maxLengthAndInputMask()
testWidget->setInputMask(QString());
QVERIFY(testWidget->inputMask().isNull());
QCOMPARE(testWidget->maxLength(), 10);
+
+ testWidget->setInputMask("XXXX");
+ QCOMPARE(testWidget->maxLength(), 4);
+
+ testWidget->setMaxLength(15);
+ QCOMPARE(testWidget->maxLength(), 4);
+
+ // 8 \ => raw string with 4 \ => input mask with 2 \ => maxLength = 2
+ testWidget->setInputMask("\\\\\\\\");
+ QCOMPARE(testWidget->maxLength(), 2);
}
diff --git a/tests/manual/qtabbar/main.cpp b/tests/manual/qtabbar/main.cpp
index 5a1a558c10..466a7e20fc 100644
--- a/tests/manual/qtabbar/main.cpp
+++ b/tests/manual/qtabbar/main.cpp
@@ -57,19 +57,25 @@
#include <QDesktopWidget>
#include <QTabWidget>
#include <QProxyStyle>
+#include <qdebug.h>
+#include "tabbarform.h"
-class MyProxyStyle : public QProxyStyle
+class TabBarProxyStyle : public QProxyStyle
{
public:
+ TabBarProxyStyle() : QProxyStyle(), alignment(Qt::AlignLeft)
+ { }
+
int styleHint(StyleHint hint, const QStyleOption *option = 0,
const QWidget *widget = 0, QStyleHintReturn *returnData = 0) const
{
if (hint == QStyle::SH_TabBar_Alignment)
- return Qt::AlignLeft;
-// return Qt::AlignRight;
-// return Qt::AlignCenter;
+ return alignment;
+
return QProxyStyle::styleHint(hint, option, widget, returnData);
}
+
+ Qt::Alignment alignment;
};
const int TabCount = 5;
@@ -77,7 +83,8 @@ const int TabCount = 5;
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
- app.setStyle(new MyProxyStyle);
+ auto *proxyStyle = new TabBarProxyStyle;
+ app.setStyle(proxyStyle);
QWidget widget;
QStackedWidget stackedWidget;
@@ -161,8 +168,61 @@ int main(int argc, char *argv[])
break;
}
- layout->setMargin(0);
- widget.resize(QApplication::desktop()->screenGeometry(&widget).size() * 0.5);
+ TabBarForm form;
+ layout->addWidget(&form);
+ layout->setAlignment(&form, Qt::AlignHCenter);
+
+ form.ui->documentModeButton->setChecked(tabBar.documentMode());
+ QObject::connect(form.ui->documentModeButton, &QCheckBox::toggled, [&] {
+ tabBar.setDocumentMode(form.ui->documentModeButton->isChecked());
+ // QMacStyle (and maybe other styles) requires a re-polish to get the right font
+ QApplication::sendEvent(&tabBar, new QEvent(QEvent::ThemeChange));
+ });
+
+ form.ui->movableTabsButton->setChecked(tabBar.isMovable());
+ QObject::connect(form.ui->movableTabsButton, &QCheckBox::toggled, [&] {
+ tabBar.setMovable(form.ui->movableTabsButton->isChecked());
+ tabBar.update();
+ });
+
+ form.ui->closableTabsButton->setChecked(tabBar.tabsClosable());
+ QObject::connect(form.ui->closableTabsButton, &QCheckBox::toggled, [&] {
+ tabBar.setTabsClosable(form.ui->closableTabsButton->isChecked());
+ tabBar.update();
+ });
+
+ form.ui->expandingTabsButton->setChecked(tabBar.expanding());
+ QObject::connect(form.ui->expandingTabsButton, &QCheckBox::toggled, [&] {
+ tabBar.setExpanding(form.ui->expandingTabsButton->isChecked());
+ tabBar.update();
+ });
+
+ form.ui->displayIconButton->setChecked(!tabBar.tabIcon(0).isNull());
+ QObject::connect(form.ui->displayIconButton, &QCheckBox::toggled, [&] {
+ const auto icon = form.ui->displayIconButton->isChecked() ?
+ tabBar.style()->standardIcon(QStyle::SP_ComputerIcon) : QIcon();
+ for (int i = 0; i < tabBar.count(); i++)
+ tabBar.setTabIcon(i, icon);
+ });
+
+ QObject::connect(form.ui->shapeComboBox, QOverload<int>::of(&QComboBox::currentIndexChanged), [&](int index) {
+ Q_UNUSED(index);
+ // TODO
+ });
+
+ if (proxyStyle->alignment == Qt::AlignLeft)
+ form.ui->leftAlignedButton->setChecked(true);
+ else if (proxyStyle->alignment == Qt::AlignRight)
+ form.ui->rightAlignedButton->setChecked(true);
+ else
+ form.ui->centeredButton->setChecked(true);
+ QObject::connect(form.ui->textAlignmentGroup, QOverload<QAbstractButton *>::of(&QButtonGroup::buttonClicked), [&](QAbstractButton *b) {
+ proxyStyle->alignment = b == form.ui->leftAlignedButton ? Qt::AlignLeft :
+ b == form.ui->rightAlignedButton ? Qt::AlignRight : Qt::AlignCenter;
+ QApplication::sendEvent(&tabBar, new QEvent(QEvent::StyleChange));
+ });
+
+ layout->setMargin(12);
widget.show();
return app.exec();
diff --git a/tests/manual/qtabbar/qtabbar.pro b/tests/manual/qtabbar/qtabbar.pro
index a63da72158..867e06735e 100644
--- a/tests/manual/qtabbar/qtabbar.pro
+++ b/tests/manual/qtabbar/qtabbar.pro
@@ -1,4 +1,6 @@
TARGET = qtabbar
TEMPLATE = app
QT = core gui widgets
-SOURCES = main.cpp
+SOURCES = main.cpp tabbarform.cpp
+HEADERS = tabbarform.h
+FORMS = tabbarform.ui
diff --git a/tests/manual/qtabbar/tabbarform.cpp b/tests/manual/qtabbar/tabbarform.cpp
new file mode 100644
index 0000000000..51271f7373
--- /dev/null
+++ b/tests/manual/qtabbar/tabbarform.cpp
@@ -0,0 +1,13 @@
+#include "tabbarform.h"
+
+TabBarForm::TabBarForm(QWidget *parent) :
+ QWidget(parent),
+ ui(new Ui::TabBarForm)
+{
+ ui->setupUi(this);
+}
+
+TabBarForm::~TabBarForm()
+{
+ delete ui;
+}
diff --git a/tests/manual/qtabbar/tabbarform.h b/tests/manual/qtabbar/tabbarform.h
new file mode 100644
index 0000000000..7db3f71fa5
--- /dev/null
+++ b/tests/manual/qtabbar/tabbarform.h
@@ -0,0 +1,22 @@
+#ifndef TABBARFORM_H
+#define TABBARFORM_H
+
+#include <QWidget>
+#include "ui_tabbarform.h"
+
+namespace Ui {
+class TabBarForm;
+}
+
+class TabBarForm : public QWidget
+{
+ Q_OBJECT
+
+public:
+ explicit TabBarForm(QWidget *parent = 0);
+ ~TabBarForm();
+
+ Ui::TabBarForm *ui;
+};
+
+#endif // TABBARFORM_H
diff --git a/tests/manual/qtabbar/tabbarform.ui b/tests/manual/qtabbar/tabbarform.ui
new file mode 100644
index 0000000000..17100b3b62
--- /dev/null
+++ b/tests/manual/qtabbar/tabbarform.ui
@@ -0,0 +1,182 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>TabBarForm</class>
+ <widget class="QWidget" name="TabBarForm">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>308</width>
+ <height>260</height>
+ </rect>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="windowTitle">
+ <string>Form</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout_2">
+ <item row="0" column="0">
+ <layout class="QGridLayout" name="gridLayout">
+ <item row="10" column="1">
+ <widget class="QRadioButton" name="rightAlignedButton">
+ <property name="text">
+ <string>Right aligned</string>
+ </property>
+ <attribute name="buttonGroup">
+ <string notr="true">textAlignmentGroup</string>
+ </attribute>
+ </widget>
+ </item>
+ <item row="8" column="1">
+ <widget class="QRadioButton" name="leftAlignedButton">
+ <property name="text">
+ <string>Left aligned</string>
+ </property>
+ <attribute name="buttonGroup">
+ <string notr="true">textAlignmentGroup</string>
+ </attribute>
+ </widget>
+ </item>
+ <item row="2" column="1">
+ <widget class="QCheckBox" name="closableTabsButton">
+ <property name="text">
+ <string>Closable tabs</string>
+ </property>
+ </widget>
+ </item>
+ <item row="8" column="0">
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>Tabs alignment:</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QCheckBox" name="movableTabsButton">
+ <property name="text">
+ <string>Movable tabs</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QCheckBox" name="documentModeButton">
+ <property name="text">
+ <string>Document mode</string>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="1">
+ <widget class="QCheckBox" name="expandingTabsButton">
+ <property name="text">
+ <string>Expanding</string>
+ </property>
+ </widget>
+ </item>
+ <item row="6" column="1">
+ <widget class="QComboBox" name="shapeComboBox">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <item>
+ <property name="text">
+ <string>North</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>South</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>West</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>East</string>
+ </property>
+ </item>
+ </widget>
+ </item>
+ <item row="7" column="0">
+ <spacer name="verticalSpacer">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>12</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item row="5" column="1">
+ <spacer name="verticalSpacer_2">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>12</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item row="0" column="0">
+ <widget class="QLabel" name="label_2">
+ <property name="text">
+ <string>Tab bar options:</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="9" column="1">
+ <widget class="QRadioButton" name="centeredButton">
+ <property name="text">
+ <string>Centered</string>
+ </property>
+ <attribute name="buttonGroup">
+ <string notr="true">textAlignmentGroup</string>
+ </attribute>
+ </widget>
+ </item>
+ <item row="6" column="0">
+ <widget class="QLabel" name="label_3">
+ <property name="text">
+ <string>Tab shape (TODO):</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="4" column="1">
+ <widget class="QCheckBox" name="displayIconButton">
+ <property name="text">
+ <string>Display icon</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections/>
+ <buttongroups>
+ <buttongroup name="textAlignmentGroup"/>
+ </buttongroups>
+</ui>