File indexing completed on 2024-04-21 16:14:42

0001 /*
0002     KWin - the KDE window manager
0003     This file is part of the KDE project.
0004 
0005     SPDX-FileCopyrightText: 2015 Martin Gräßlin <mgraesslin@kde.org>
0006 
0007     SPDX-License-Identifier: GPL-2.0-or-later
0008 */
0009 #include "testutils.h"
0010 // KWin
0011 #include "utils/xcbutils.h"
0012 // Qt
0013 #include <QApplication>
0014 #include <QtTest>
0015 #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
0016 #include <private/qtx11extras_p.h>
0017 #else
0018 #include <QX11Info>
0019 #endif
0020 #include <netwm.h>
0021 // xcb
0022 #include <xcb/xcb.h>
0023 #include <xcb/xcb_icccm.h>
0024 
0025 using namespace KWin;
0026 
0027 class TestXcbSizeHints : public QObject
0028 {
0029     Q_OBJECT
0030 private Q_SLOTS:
0031     void initTestCase();
0032     void init();
0033     void cleanup();
0034     void testSizeHints_data();
0035     void testSizeHints();
0036     void testSizeHintsEmpty();
0037     void testSizeHintsNotSet();
0038     void geometryHintsBeforeInit();
0039     void geometryHintsBeforeRead();
0040 
0041 private:
0042     Xcb::Window m_testWindow;
0043 };
0044 
0045 void TestXcbSizeHints::initTestCase()
0046 {
0047     qApp->setProperty("x11RootWindow", QVariant::fromValue<quint32>(QX11Info::appRootWindow()));
0048     qApp->setProperty("x11Connection", QVariant::fromValue<void *>(QX11Info::connection()));
0049 }
0050 
0051 void TestXcbSizeHints::init()
0052 {
0053     const uint32_t values[] = {true};
0054     m_testWindow.create(QRect(0, 0, 10, 10), XCB_WINDOW_CLASS_INPUT_ONLY, XCB_CW_OVERRIDE_REDIRECT, values);
0055     QVERIFY(m_testWindow.isValid());
0056 }
0057 
0058 void TestXcbSizeHints::cleanup()
0059 {
0060     m_testWindow.reset();
0061 }
0062 
0063 void TestXcbSizeHints::testSizeHints_data()
0064 {
0065     // set
0066     QTest::addColumn<QPoint>("userPos");
0067     QTest::addColumn<QSize>("userSize");
0068     QTest::addColumn<QSize>("minSize");
0069     QTest::addColumn<QSize>("maxSize");
0070     QTest::addColumn<QSize>("resizeInc");
0071     QTest::addColumn<QSize>("minAspect");
0072     QTest::addColumn<QSize>("maxAspect");
0073     QTest::addColumn<QSize>("baseSize");
0074     QTest::addColumn<qint32>("gravity");
0075     // read for SizeHints
0076     QTest::addColumn<qint32>("expectedFlags");
0077     QTest::addColumn<qint32>("expectedPad0");
0078     QTest::addColumn<qint32>("expectedPad1");
0079     QTest::addColumn<qint32>("expectedPad2");
0080     QTest::addColumn<qint32>("expectedPad3");
0081     QTest::addColumn<qint32>("expectedMinWidth");
0082     QTest::addColumn<qint32>("expectedMinHeight");
0083     QTest::addColumn<qint32>("expectedMaxWidth");
0084     QTest::addColumn<qint32>("expectedMaxHeight");
0085     QTest::addColumn<qint32>("expectedWidthInc");
0086     QTest::addColumn<qint32>("expectedHeightInc");
0087     QTest::addColumn<qint32>("expectedMinAspectNum");
0088     QTest::addColumn<qint32>("expectedMinAspectDen");
0089     QTest::addColumn<qint32>("expectedMaxAspectNum");
0090     QTest::addColumn<qint32>("expectedMaxAspectDen");
0091     QTest::addColumn<qint32>("expectedBaseWidth");
0092     QTest::addColumn<qint32>("expectedBaseHeight");
0093     // read for GeometryHints
0094     QTest::addColumn<QSize>("expectedMinSize");
0095     QTest::addColumn<QSize>("expectedMaxSize");
0096     QTest::addColumn<QSize>("expectedResizeIncrements");
0097     QTest::addColumn<QSize>("expectedMinAspect");
0098     QTest::addColumn<QSize>("expectedMaxAspect");
0099     QTest::addColumn<QSize>("expectedBaseSize");
0100     QTest::addColumn<qint32>("expectedGravity");
0101 
0102     QTest::newRow("userPos") << QPoint(1, 2) << QSize() << QSize() << QSize() << QSize() << QSize() << QSize() << QSize() << 0
0103                              << 1 << 1 << 2 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0
0104                              << QSize(0, 0) << QSize(INT_MAX, INT_MAX) << QSize(1, 1) << QSize(1, INT_MAX) << QSize(INT_MAX, 1) << QSize(0, 0) << qint32(XCB_GRAVITY_NORTH_WEST);
0105     QTest::newRow("userSize") << QPoint() << QSize(1, 2) << QSize() << QSize() << QSize() << QSize() << QSize() << QSize() << 0
0106                               << 2 << 0 << 0 << 1 << 2 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0
0107                               << QSize(0, 0) << QSize(INT_MAX, INT_MAX) << QSize(1, 1) << QSize(1, INT_MAX) << QSize(INT_MAX, 1) << QSize(0, 0) << qint32(XCB_GRAVITY_NORTH_WEST);
0108     QTest::newRow("minSize") << QPoint() << QSize() << QSize(1, 2) << QSize() << QSize() << QSize() << QSize() << QSize() << 0
0109                              << 16 << 0 << 0 << 0 << 0 << 1 << 2 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0
0110                              << QSize(1, 2) << QSize(INT_MAX, INT_MAX) << QSize(1, 1) << QSize(1, INT_MAX) << QSize(INT_MAX, 1) << QSize(0, 0) << qint32(XCB_GRAVITY_NORTH_WEST);
0111     QTest::newRow("maxSize") << QPoint() << QSize() << QSize() << QSize(1, 2) << QSize() << QSize() << QSize() << QSize() << 0
0112                              << 32 << 0 << 0 << 0 << 0 << 0 << 0 << 1 << 2 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0
0113                              << QSize(0, 0) << QSize(1, 2) << QSize(1, 1) << QSize(1, INT_MAX) << QSize(INT_MAX, 1) << QSize(0, 0) << qint32(XCB_GRAVITY_NORTH_WEST);
0114     QTest::newRow("maxSize0") << QPoint() << QSize() << QSize() << QSize(0, 0) << QSize() << QSize() << QSize() << QSize() << 0
0115                               << 32 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0
0116                               << QSize(0, 0) << QSize(1, 1) << QSize(1, 1) << QSize(1, INT_MAX) << QSize(INT_MAX, 1) << QSize(0, 0) << qint32(XCB_GRAVITY_NORTH_WEST);
0117     QTest::newRow("min/maxSize") << QPoint() << QSize() << QSize(1, 2) << QSize(3, 4) << QSize() << QSize() << QSize() << QSize() << 0
0118                                  << 48 << 0 << 0 << 0 << 0 << 1 << 2 << 3 << 4 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0
0119                                  << QSize(1, 2) << QSize(3, 4) << QSize(1, 1) << QSize(1, INT_MAX) << QSize(INT_MAX, 1) << QSize(0, 0) << qint32(XCB_GRAVITY_NORTH_WEST);
0120     QTest::newRow("resizeInc") << QPoint() << QSize() << QSize() << QSize() << QSize(1, 2) << QSize() << QSize() << QSize() << 0
0121                                << 64 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 1 << 2 << 0 << 0 << 0 << 0 << 0 << 0
0122                                << QSize(0, 0) << QSize(INT_MAX, INT_MAX) << QSize(1, 2) << QSize(1, INT_MAX) << QSize(INT_MAX, 1) << QSize(0, 0) << qint32(XCB_GRAVITY_NORTH_WEST);
0123     QTest::newRow("resizeInc0") << QPoint() << QSize() << QSize() << QSize() << QSize(0, 0) << QSize() << QSize() << QSize() << 0
0124                                 << 64 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0
0125                                 << QSize(0, 0) << QSize(INT_MAX, INT_MAX) << QSize(1, 1) << QSize(1, INT_MAX) << QSize(INT_MAX, 1) << QSize(0, 0) << qint32(XCB_GRAVITY_NORTH_WEST);
0126     QTest::newRow("aspect") << QPoint() << QSize() << QSize() << QSize() << QSize() << QSize(1, 2) << QSize(3, 4) << QSize() << 0
0127                             << 128 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 1 << 2 << 3 << 4 << 0 << 0
0128                             << QSize(0, 0) << QSize(INT_MAX, INT_MAX) << QSize(1, 1) << QSize(1, 2) << QSize(3, 4) << QSize(0, 0) << qint32(XCB_GRAVITY_NORTH_WEST);
0129     QTest::newRow("aspectDivision0") << QPoint() << QSize() << QSize() << QSize() << QSize() << QSize(1, 0) << QSize(3, 0) << QSize() << 0
0130                                      << 128 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 1 << 0 << 3 << 0 << 0 << 0
0131                                      << QSize(0, 0) << QSize(INT_MAX, INT_MAX) << QSize(1, 1) << QSize(1, 1) << QSize(3, 1) << QSize(0, 0) << qint32(XCB_GRAVITY_NORTH_WEST);
0132     QTest::newRow("baseSize") << QPoint() << QSize() << QSize() << QSize() << QSize() << QSize() << QSize() << QSize(1, 2) << 0
0133                               << 256 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 1 << 2
0134                               << QSize(1, 2) << QSize(INT_MAX, INT_MAX) << QSize(1, 1) << QSize(1, INT_MAX) << QSize(INT_MAX, 1) << QSize(1, 2) << qint32(XCB_GRAVITY_NORTH_WEST);
0135     QTest::newRow("gravity") << QPoint() << QSize() << QSize() << QSize() << QSize() << QSize() << QSize() << QSize() << qint32(XCB_GRAVITY_STATIC)
0136                              << 512 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0
0137                              << QSize(0, 0) << QSize(INT_MAX, INT_MAX) << QSize(1, 1) << QSize(1, INT_MAX) << QSize(INT_MAX, 1) << QSize(0, 0) << qint32(XCB_GRAVITY_STATIC);
0138     QTest::newRow("all") << QPoint(1, 2) << QSize(3, 4) << QSize(5, 6) << QSize(7, 8) << QSize(9, 10) << QSize(11, 12) << QSize(13, 14) << QSize(15, 16) << 1
0139                          << 1011 << 1 << 2 << 3 << 4 << 5 << 6 << 7 << 8 << 9 << 10 << 11 << 12 << 13 << 14 << 15 << 16
0140                          << QSize(5, 6) << QSize(7, 8) << QSize(9, 10) << QSize(11, 12) << QSize(13, 14) << QSize(15, 16) << qint32(XCB_GRAVITY_NORTH_WEST);
0141 }
0142 
0143 void TestXcbSizeHints::testSizeHints()
0144 {
0145     xcb_size_hints_t hints;
0146     memset(&hints, 0, sizeof(hints));
0147     QFETCH(QPoint, userPos);
0148     if (!userPos.isNull()) {
0149         xcb_icccm_size_hints_set_position(&hints, 1, userPos.x(), userPos.y());
0150     }
0151     QFETCH(QSize, userSize);
0152     if (userSize.isValid()) {
0153         xcb_icccm_size_hints_set_size(&hints, 1, userSize.width(), userSize.height());
0154     }
0155     QFETCH(QSize, minSize);
0156     if (minSize.isValid()) {
0157         xcb_icccm_size_hints_set_min_size(&hints, minSize.width(), minSize.height());
0158     }
0159     QFETCH(QSize, maxSize);
0160     if (maxSize.isValid()) {
0161         xcb_icccm_size_hints_set_max_size(&hints, maxSize.width(), maxSize.height());
0162     }
0163     QFETCH(QSize, resizeInc);
0164     if (resizeInc.isValid()) {
0165         xcb_icccm_size_hints_set_resize_inc(&hints, resizeInc.width(), resizeInc.height());
0166     }
0167     QFETCH(QSize, minAspect);
0168     QFETCH(QSize, maxAspect);
0169     if (minAspect.isValid() && maxAspect.isValid()) {
0170         xcb_icccm_size_hints_set_aspect(&hints, minAspect.width(), minAspect.height(), maxAspect.width(), maxAspect.height());
0171     }
0172     QFETCH(QSize, baseSize);
0173     if (baseSize.isValid()) {
0174         xcb_icccm_size_hints_set_base_size(&hints, baseSize.width(), baseSize.height());
0175     }
0176     QFETCH(qint32, gravity);
0177     if (gravity != 0) {
0178         xcb_icccm_size_hints_set_win_gravity(&hints, (xcb_gravity_t)gravity);
0179     }
0180     xcb_icccm_set_wm_normal_hints(QX11Info::connection(), m_testWindow, &hints);
0181     xcb_flush(QX11Info::connection());
0182 
0183     Xcb::GeometryHints geoHints;
0184     geoHints.init(m_testWindow);
0185     geoHints.read();
0186     QCOMPARE(geoHints.hasAspect(), minAspect.isValid() && maxAspect.isValid());
0187     QCOMPARE(geoHints.hasBaseSize(), baseSize.isValid());
0188     QCOMPARE(geoHints.hasMaxSize(), maxSize.isValid());
0189     QCOMPARE(geoHints.hasMinSize(), minSize.isValid());
0190     QCOMPARE(geoHints.hasPosition(), !userPos.isNull());
0191     QCOMPARE(geoHints.hasResizeIncrements(), resizeInc.isValid());
0192     QCOMPARE(geoHints.hasSize(), userSize.isValid());
0193     QCOMPARE(geoHints.hasWindowGravity(), gravity != 0);
0194     QTEST(geoHints.baseSize().toSize(), "expectedBaseSize");
0195     QTEST(geoHints.maxAspect(), "expectedMaxAspect");
0196     QTEST(geoHints.maxSize().toSize(), "expectedMaxSize");
0197     QTEST(geoHints.minAspect(), "expectedMinAspect");
0198     QTEST(geoHints.minSize().toSize(), "expectedMinSize");
0199     QTEST(geoHints.resizeIncrements().toSize(), "expectedResizeIncrements");
0200     QTEST(qint32(geoHints.windowGravity()), "expectedGravity");
0201 
0202     auto sizeHints = geoHints.m_sizeHints;
0203     QVERIFY(sizeHints);
0204     QTEST(sizeHints->flags, "expectedFlags");
0205     QTEST(sizeHints->pad[0], "expectedPad0");
0206     QTEST(sizeHints->pad[1], "expectedPad1");
0207     QTEST(sizeHints->pad[2], "expectedPad2");
0208     QTEST(sizeHints->pad[3], "expectedPad3");
0209     QTEST(sizeHints->minWidth, "expectedMinWidth");
0210     QTEST(sizeHints->minHeight, "expectedMinHeight");
0211     QTEST(sizeHints->maxWidth, "expectedMaxWidth");
0212     QTEST(sizeHints->maxHeight, "expectedMaxHeight");
0213     QTEST(sizeHints->widthInc, "expectedWidthInc");
0214     QTEST(sizeHints->heightInc, "expectedHeightInc");
0215     QTEST(sizeHints->minAspect[0], "expectedMinAspectNum");
0216     QTEST(sizeHints->minAspect[1], "expectedMinAspectDen");
0217     QTEST(sizeHints->maxAspect[0], "expectedMaxAspectNum");
0218     QTEST(sizeHints->maxAspect[1], "expectedMaxAspectDen");
0219     QTEST(sizeHints->baseWidth, "expectedBaseWidth");
0220     QTEST(sizeHints->baseHeight, "expectedBaseHeight");
0221     QCOMPARE(sizeHints->winGravity, gravity);
0222 
0223     // copy
0224     Xcb::GeometryHints::NormalHints::SizeHints sizeHints2 = *sizeHints;
0225     QTEST(sizeHints2.flags, "expectedFlags");
0226     QTEST(sizeHints2.pad[0], "expectedPad0");
0227     QTEST(sizeHints2.pad[1], "expectedPad1");
0228     QTEST(sizeHints2.pad[2], "expectedPad2");
0229     QTEST(sizeHints2.pad[3], "expectedPad3");
0230     QTEST(sizeHints2.minWidth, "expectedMinWidth");
0231     QTEST(sizeHints2.minHeight, "expectedMinHeight");
0232     QTEST(sizeHints2.maxWidth, "expectedMaxWidth");
0233     QTEST(sizeHints2.maxHeight, "expectedMaxHeight");
0234     QTEST(sizeHints2.widthInc, "expectedWidthInc");
0235     QTEST(sizeHints2.heightInc, "expectedHeightInc");
0236     QTEST(sizeHints2.minAspect[0], "expectedMinAspectNum");
0237     QTEST(sizeHints2.minAspect[1], "expectedMinAspectDen");
0238     QTEST(sizeHints2.maxAspect[0], "expectedMaxAspectNum");
0239     QTEST(sizeHints2.maxAspect[1], "expectedMaxAspectDen");
0240     QTEST(sizeHints2.baseWidth, "expectedBaseWidth");
0241     QTEST(sizeHints2.baseHeight, "expectedBaseHeight");
0242     QCOMPARE(sizeHints2.winGravity, gravity);
0243 }
0244 
0245 void TestXcbSizeHints::testSizeHintsEmpty()
0246 {
0247     xcb_size_hints_t xcbHints;
0248     memset(&xcbHints, 0, sizeof(xcbHints));
0249     xcb_icccm_set_wm_normal_hints(QX11Info::connection(), m_testWindow, &xcbHints);
0250     xcb_flush(QX11Info::connection());
0251 
0252     Xcb::GeometryHints hints;
0253     hints.init(m_testWindow);
0254     hints.read();
0255     QVERIFY(!hints.hasAspect());
0256     QVERIFY(!hints.hasBaseSize());
0257     QVERIFY(!hints.hasMaxSize());
0258     QVERIFY(!hints.hasMinSize());
0259     QVERIFY(!hints.hasPosition());
0260     QVERIFY(!hints.hasResizeIncrements());
0261     QVERIFY(!hints.hasSize());
0262     QVERIFY(!hints.hasWindowGravity());
0263 
0264     QCOMPARE(hints.baseSize(), QSize(0, 0));
0265     QCOMPARE(hints.maxAspect(), QSize(INT_MAX, 1));
0266     QCOMPARE(hints.maxSize(), QSize(INT_MAX, INT_MAX));
0267     QCOMPARE(hints.minAspect(), QSize(1, INT_MAX));
0268     QCOMPARE(hints.minSize(), QSize(0, 0));
0269     QCOMPARE(hints.resizeIncrements(), QSize(1, 1));
0270     QCOMPARE(hints.windowGravity(), XCB_GRAVITY_NORTH_WEST);
0271 
0272     auto sizeHints = hints.m_sizeHints;
0273     QVERIFY(sizeHints);
0274     QCOMPARE(sizeHints->flags, 0);
0275     QCOMPARE(sizeHints->pad[0], 0);
0276     QCOMPARE(sizeHints->pad[1], 0);
0277     QCOMPARE(sizeHints->pad[2], 0);
0278     QCOMPARE(sizeHints->pad[3], 0);
0279     QCOMPARE(sizeHints->minWidth, 0);
0280     QCOMPARE(sizeHints->minHeight, 0);
0281     QCOMPARE(sizeHints->maxWidth, 0);
0282     QCOMPARE(sizeHints->maxHeight, 0);
0283     QCOMPARE(sizeHints->widthInc, 0);
0284     QCOMPARE(sizeHints->heightInc, 0);
0285     QCOMPARE(sizeHints->minAspect[0], 0);
0286     QCOMPARE(sizeHints->minAspect[1], 0);
0287     QCOMPARE(sizeHints->maxAspect[0], 0);
0288     QCOMPARE(sizeHints->maxAspect[1], 0);
0289     QCOMPARE(sizeHints->baseWidth, 0);
0290     QCOMPARE(sizeHints->baseHeight, 0);
0291     QCOMPARE(sizeHints->winGravity, 0);
0292 }
0293 
0294 void TestXcbSizeHints::testSizeHintsNotSet()
0295 {
0296     Xcb::GeometryHints hints;
0297     hints.init(m_testWindow);
0298     hints.read();
0299     QVERIFY(!hints.m_sizeHints);
0300     QVERIFY(!hints.hasAspect());
0301     QVERIFY(!hints.hasBaseSize());
0302     QVERIFY(!hints.hasMaxSize());
0303     QVERIFY(!hints.hasMinSize());
0304     QVERIFY(!hints.hasPosition());
0305     QVERIFY(!hints.hasResizeIncrements());
0306     QVERIFY(!hints.hasSize());
0307     QVERIFY(!hints.hasWindowGravity());
0308 
0309     QCOMPARE(hints.baseSize(), QSize(0, 0));
0310     QCOMPARE(hints.maxAspect(), QSize(INT_MAX, 1));
0311     QCOMPARE(hints.maxSize(), QSize(INT_MAX, INT_MAX));
0312     QCOMPARE(hints.minAspect(), QSize(1, INT_MAX));
0313     QCOMPARE(hints.minSize(), QSize(0, 0));
0314     QCOMPARE(hints.resizeIncrements(), QSize(1, 1));
0315     QCOMPARE(hints.windowGravity(), XCB_GRAVITY_NORTH_WEST);
0316 }
0317 
0318 void TestXcbSizeHints::geometryHintsBeforeInit()
0319 {
0320     Xcb::GeometryHints hints;
0321     QVERIFY(!hints.hasAspect());
0322     QVERIFY(!hints.hasBaseSize());
0323     QVERIFY(!hints.hasMaxSize());
0324     QVERIFY(!hints.hasMinSize());
0325     QVERIFY(!hints.hasPosition());
0326     QVERIFY(!hints.hasResizeIncrements());
0327     QVERIFY(!hints.hasSize());
0328     QVERIFY(!hints.hasWindowGravity());
0329 
0330     QCOMPARE(hints.baseSize(), QSize(0, 0));
0331     QCOMPARE(hints.maxAspect(), QSize(INT_MAX, 1));
0332     QCOMPARE(hints.maxSize(), QSize(INT_MAX, INT_MAX));
0333     QCOMPARE(hints.minAspect(), QSize(1, INT_MAX));
0334     QCOMPARE(hints.minSize(), QSize(0, 0));
0335     QCOMPARE(hints.resizeIncrements(), QSize(1, 1));
0336     QCOMPARE(hints.windowGravity(), XCB_GRAVITY_NORTH_WEST);
0337 }
0338 
0339 void TestXcbSizeHints::geometryHintsBeforeRead()
0340 {
0341     xcb_size_hints_t xcbHints;
0342     memset(&xcbHints, 0, sizeof(xcbHints));
0343     xcb_icccm_size_hints_set_position(&xcbHints, 1, 1, 2);
0344     xcb_icccm_set_wm_normal_hints(QX11Info::connection(), m_testWindow, &xcbHints);
0345     xcb_flush(QX11Info::connection());
0346 
0347     Xcb::GeometryHints hints;
0348     hints.init(m_testWindow);
0349     QVERIFY(!hints.hasAspect());
0350     QVERIFY(!hints.hasBaseSize());
0351     QVERIFY(!hints.hasMaxSize());
0352     QVERIFY(!hints.hasMinSize());
0353     QVERIFY(!hints.hasPosition());
0354     QVERIFY(!hints.hasResizeIncrements());
0355     QVERIFY(!hints.hasSize());
0356     QVERIFY(!hints.hasWindowGravity());
0357 
0358     QCOMPARE(hints.baseSize(), QSize(0, 0));
0359     QCOMPARE(hints.maxAspect(), QSize(INT_MAX, 1));
0360     QCOMPARE(hints.maxSize(), QSize(INT_MAX, INT_MAX));
0361     QCOMPARE(hints.minAspect(), QSize(1, INT_MAX));
0362     QCOMPARE(hints.minSize(), QSize(0, 0));
0363     QCOMPARE(hints.resizeIncrements(), QSize(1, 1));
0364     QCOMPARE(hints.windowGravity(), XCB_GRAVITY_NORTH_WEST);
0365 }
0366 
0367 Q_CONSTRUCTOR_FUNCTION(forceXcb)
0368 QTEST_MAIN(TestXcbSizeHints)
0369 #include "test_xcb_size_hints.moc"