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 }