void test4000SmallCells()
    {
        fillModel(40, 100, true /*small cells*/);
        Report report;
        report.setReportMode(Report::SpreadSheet);
        AutoTableElement tableElement(&m_model);
        tableElement.setVerticalHeaderVisible(false);
        tableElement.setPadding(3);
        report.mainTable()->setAutoTableElement(tableElement);
        QFont font(QLatin1String("Arial"));
        font.setPixelSize(19);
        report.setDefaultFont(font);
        report.scaleTo(2, 50);
        report.mainTable()->setTableBreakingPageOrder(Report::RightThenDown);
        QCOMPARE(report.numberOfPages(), 6);
        // With point size 10, initially I was getting 0.583037. With FontScaler: 0.524504.
        // With pixel sizes: 0.478, on both machines.
        // Autobuild on linux gets 37 rows instead of 43, though (taller font, by one pixel...)
        qDebug() << report.mainTable()->lastAutoFontScalingFactor();
#ifdef Q_OS_MAC
        // Bah, fonts change too much.
        return;
        QVERIFY(report.mainTable()->lastAutoFontScalingFactor() >= 0.37);
        QVERIFY(report.mainTable()->lastAutoFontScalingFactor() <= 0.39);
#else
        QVERIFY(report.mainTable()->lastAutoFontScalingFactor() >= 0.45);
        QVERIFY(report.mainTable()->lastAutoFontScalingFactor() <= 0.50);
#endif
        const int rows = report.mainTable()->pageRects()[0].height();
        qDebug() << rows << "rows";
        QVERIFY(rows >= 37);
        QVERIFY(rows <= 48);
        const int columns = report.mainTable()->pageRects()[0].width();
        QVERIFY(columns >= 20);
        QVERIFY(columns <= 21);

        //qDebug() << report.mainTable()->pageRects();
        QCOMPARE(report.mainTable()->pageRects()[0], QRect(0,0,columns,rows));
        QCOMPARE(report.mainTable()->pageRects()[1], QRect(columns,0,40-columns,rows));
        QCOMPARE(report.mainTable()->pageRects()[2], QRect(0,rows,columns,rows));
        QCOMPARE(report.mainTable()->pageRects()[3], QRect(columns,rows,40-columns,rows));
        QCOMPARE(report.mainTable()->pageRects()[4], QRect(0,2*rows,columns,100-2*rows));
        QCOMPARE(report.mainTable()->pageRects()[5], QRect(columns,2*rows,40-columns,100-2*rows));

        report.setTableBreakingPageOrder(Report::DownThenRight);
        //qDebug() << report.mainTable()->pageRects();
        QCOMPARE(report.mainTable()->pageRects(), QList<QRect>()
                  << QRect(0,0,columns,rows)
                  << QRect(0,rows,columns,rows)
                  << QRect(0,2*rows,columns,100-2*rows)
                  << QRect(columns,0,40-columns,rows)
                  << QRect(columns,rows,40-columns,rows)
                  << QRect(columns,2*rows,40-columns,100-2*rows));
    }
    void testMaxVerticPages()
    {
        QFETCH(int, numColumns);
        QFETCH(int, numRows);
        QFETCH(int, maxHorizPages);
        QFETCH(int, maxVerticPages);
        QFETCH(int, minVerticPages);
        QFETCH(int, verticalHeaderFontSize);
        QFETCH(int, horizontalHeaderFontSize);
        fillModel(numColumns, numRows, true /*small cells*/);
        for (int i = 0; i < numRows; ++i) {
            m_model.setVerticalHeaderItem(i, new QStandardItem(QString::fromLatin1("Row_%1").arg(i)));
        }
        Report report;
        report.setReportMode(Report::SpreadSheet);
        const QString fontName = QString::fromLatin1("Arial");
        QFont font(fontName);
        font.setPointSize(10);
        report.setDefaultFont(font);
        report.scaleTo(maxHorizPages, maxVerticPages);
        AutoTableElement tableElement(&m_model);
        tableElement.setHorizontalHeaderVisible(horizontalHeaderFontSize > 0);
        tableElement.setVerticalHeaderVisible(verticalHeaderFontSize > 0);
        tableElement.setPadding(3);
        report.mainTable()->setAutoTableElement(tableElement);
        if (horizontalHeaderFontSize > 0)
            report.mainTable()->setHorizontalHeaderFont(QFont(fontName, horizontalHeaderFontSize));
        if (verticalHeaderFontSize > 0) {
            QFont vHeaderFont(fontName, verticalHeaderFontSize);
            qDebug() << "vHeaderFont:" << vHeaderFont << QFontInfo( vHeaderFont ).family() << QFontMetricsF( vHeaderFont ).height();
            report.mainTable()->setVerticalHeaderFont(vHeaderFont);
        }
        report.setTableBreakingPageOrder(Report::RightThenDown);
        qDebug() << "numberOfPages=" << report.numberOfPages();
        // If this is >, then KDReports is not respecting the scaleTo API.
        QVERIFY(report.numberOfPages() <= maxHorizPages*maxVerticPages);

#ifndef Q_OS_WIN
        qDebug() << maxHorizPages << "*" << minVerticPages << "=" << maxHorizPages*minVerticPages;
        // If the DPI is known, we can even check that we're not down-scaling too much.
        QVERIFY(report.numberOfPages() >= maxHorizPages*minVerticPages);
#else
        Q_UNUSED(minVerticPages);
#endif
    }