summaryrefslogtreecommitdiffstats
path: root/tests/auto
diff options
context:
space:
mode:
authorJohn Layt <jlayt@kde.org>2014-01-05 18:51:32 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-03-17 13:45:52 +0100
commit9e29fab38df831f33385ee25bff235a620aa20d5 (patch)
tree0fc8f608aa5124a370561462ff0515d41c4e712a /tests/auto
parent0c04b31d2715f68aa883107b4aa593fd95aefdfe (diff)
QPdfWriter - Use QPageSize and QPageLayout
Add support to QPdfWriter for QPageSize, QPageLayout, and resolution. [ChangeLog][QtGui][QPdfWriter] The QPdfWriter now supports setting the PDF orientation, layout and resolution by using QPageSize and QPageLayout. Change-Id: I9c269f997ec540dac1989f355c6a2e7488947966 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Diffstat (limited to 'tests/auto')
-rw-r--r--tests/auto/gui/painting/painting.pro1
-rw-r--r--tests/auto/gui/painting/qpdfwriter/.gitignore1
-rw-r--r--tests/auto/gui/painting/qpdfwriter/qpdfwriter.pro9
-rw-r--r--tests/auto/gui/painting/qpdfwriter/tst_qpdfwriter.cpp265
4 files changed, 276 insertions, 0 deletions
diff --git a/tests/auto/gui/painting/painting.pro b/tests/auto/gui/painting/painting.pro
index f448419b7b..0f7595c871 100644
--- a/tests/auto/gui/painting/painting.pro
+++ b/tests/auto/gui/painting/painting.pro
@@ -9,6 +9,7 @@ SUBDIRS=\
qpagesize \
qpainter \
qpathclipper \
+ qpdfwriter \
qpen \
qpaintengine \
qtransform \
diff --git a/tests/auto/gui/painting/qpdfwriter/.gitignore b/tests/auto/gui/painting/qpdfwriter/.gitignore
new file mode 100644
index 0000000000..5307a5ed2a
--- /dev/null
+++ b/tests/auto/gui/painting/qpdfwriter/.gitignore
@@ -0,0 +1 @@
+tst_qpdfwriter
diff --git a/tests/auto/gui/painting/qpdfwriter/qpdfwriter.pro b/tests/auto/gui/painting/qpdfwriter/qpdfwriter.pro
new file mode 100644
index 0000000000..fda0fad3b5
--- /dev/null
+++ b/tests/auto/gui/painting/qpdfwriter/qpdfwriter.pro
@@ -0,0 +1,9 @@
+CONFIG += testcase
+CONFIG += parallel_test
+TARGET = tst_qpdfwriter
+SOURCES += tst_qpdfwriter.cpp
+
+QT += gui-private testlib
+
+DEFINES += QT_USE_USING_NAMESPACE
+DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0
diff --git a/tests/auto/gui/painting/qpdfwriter/tst_qpdfwriter.cpp b/tests/auto/gui/painting/qpdfwriter/tst_qpdfwriter.cpp
new file mode 100644
index 0000000000..f06351b7b7
--- /dev/null
+++ b/tests/auto/gui/painting/qpdfwriter/tst_qpdfwriter.cpp
@@ -0,0 +1,265 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtTest/QtTest>
+#include <QtGlobal>
+#include <QtAlgorithms>
+#include <QtGui/QPageLayout>
+#include <QtGui/QPdfWriter>
+
+class tst_QPdfWriter : public QObject
+{
+ Q_OBJECT
+
+private slots:
+ void basics();
+ void testPageMetrics_data();
+ void testPageMetrics();
+};
+
+void tst_QPdfWriter::basics()
+{
+ QTemporaryFile file;
+ if (!file.open())
+ QSKIP("Couldn't open temp file!");
+ QPdfWriter writer(file.fileName());
+
+ QCOMPARE(writer.title(), QString());
+ writer.setTitle(QString("Test Title"));
+ QCOMPARE(writer.title(), QString("Test Title"));
+
+ QCOMPARE(writer.creator(), QString());
+ writer.setCreator(QString("Test Creator"));
+ QCOMPARE(writer.creator(), QString("Test Creator"));
+
+ QCOMPARE(writer.resolution(), 1200);
+ writer.setResolution(600);
+ QCOMPARE(writer.resolution(), 600);
+
+ QCOMPARE(writer.pageLayout().pageSize().id(), QPageSize::A4);
+ QCOMPARE(writer.pageSize(), QPdfWriter::A4);
+ QCOMPARE(writer.pageSizeMM(), QSizeF(210, 297));
+
+ writer.setPageSize(QPageSize(QPageSize::A5));
+ QCOMPARE(writer.pageLayout().pageSize().id(), QPageSize::A5);
+ QCOMPARE(writer.pageSize(), QPdfWriter::A5);
+ QCOMPARE(writer.pageSizeMM(), QSizeF(148, 210));
+
+ writer.setPageSize(QPdfWriter::A3);
+ QCOMPARE(writer.pageLayout().pageSize().id(), QPageSize::A3);
+ QCOMPARE(writer.pageSize(), QPdfWriter::A3);
+ QCOMPARE(writer.pageSizeMM(), QSizeF(297, 420));
+
+ writer.setPageSizeMM(QSize(210, 297));
+ QCOMPARE(writer.pageLayout().pageSize().id(), QPageSize::A4);
+ QCOMPARE(writer.pageSize(), QPdfWriter::A4);
+ QCOMPARE(writer.pageSizeMM(), QSizeF(210, 297));
+
+ QCOMPARE(writer.pageLayout().orientation(), QPageLayout::Portrait);
+ writer.setPageOrientation(QPageLayout::Landscape);
+ QCOMPARE(writer.pageLayout().orientation(), QPageLayout::Landscape);
+ QCOMPARE(writer.pageSizeMM(), QSizeF(210, 297));
+
+ QCOMPARE(writer.pageLayout().margins(), QMarginsF(10, 10, 10, 10));
+ QCOMPARE(writer.pageLayout().units(), QPageLayout::Point);
+ QCOMPARE(writer.margins().left, 3.53); // mm
+ QCOMPARE(writer.margins().right, 3.53);
+ QCOMPARE(writer.margins().top, 3.53);
+ QCOMPARE(writer.margins().bottom, 3.53);
+ writer.setPageMargins(QMarginsF(20, 20, 20, 20), QPageLayout::Millimeter);
+ QCOMPARE(writer.pageLayout().margins(), QMarginsF(20, 20, 20, 20));
+ QCOMPARE(writer.pageLayout().units(), QPageLayout::Millimeter);
+ QCOMPARE(writer.margins().left, 20.0);
+ QCOMPARE(writer.margins().right, 20.0);
+ QCOMPARE(writer.margins().top, 20.0);
+ QCOMPARE(writer.margins().bottom, 20.0);
+ QPdfWriter::Margins margins = {50, 50, 50, 50};
+ writer.setMargins(margins);
+ QCOMPARE(writer.pageLayout().margins(), QMarginsF(50, 50, 50, 50));
+ QCOMPARE(writer.pageLayout().units(), QPageLayout::Millimeter);
+ QCOMPARE(writer.margins().left, 50.0);
+ QCOMPARE(writer.margins().right, 50.0);
+ QCOMPARE(writer.margins().top, 50.0);
+ QCOMPARE(writer.margins().bottom, 50.0);
+
+ QCOMPARE(writer.pageLayout().fullRect(QPageLayout::Millimeter), QRectF(0, 0, 297, 210));
+ QCOMPARE(writer.pageLayout().paintRect(QPageLayout::Millimeter), QRectF(50, 50, 197, 110));
+}
+
+// Test the old page metrics methods, see also QPrinter tests for the same.
+void tst_QPdfWriter::testPageMetrics_data()
+{
+ QTest::addColumn<int>("pageSize");
+ QTest::addColumn<qreal>("widthMMf");
+ QTest::addColumn<qreal>("heightMMf");
+ QTest::addColumn<bool>("setMargins");
+ QTest::addColumn<qreal>("leftMMf");
+ QTest::addColumn<qreal>("rightMMf");
+ QTest::addColumn<qreal>("topMMf");
+ QTest::addColumn<qreal>("bottomMMf");
+
+ QTest::newRow("A4") << int(QPdfWriter::A4) << 210.0 << 297.0 << false << 3.53 << 3.53 << 3.53 << 3.53;
+ QTest::newRow("A4 Margins") << int(QPdfWriter::A4) << 210.0 << 297.0 << true << 20.0 << 30.0 << 40.0 << 50.0;
+ QTest::newRow("Portrait") << -1 << 345.0 << 678.0 << false << 3.53 << 3.53 << 3.53 << 3.53;
+ QTest::newRow("Portrait Margins") << -1 << 345.0 << 678.0 << true << 20.0 << 30.0 << 40.0 << 50.0;
+ QTest::newRow("Landscape") << -1 << 678.0 << 345.0 << false << 3.53 << 3.53 << 3.53 << 3.53;
+ QTest::newRow("Landscape Margins") << -1 << 678.0 << 345.0 << true << 20.0 << 30.0 << 40.0 << 50.0;
+}
+
+void tst_QPdfWriter::testPageMetrics()
+{
+ QFETCH(int, pageSize);
+ QFETCH(qreal, widthMMf);
+ QFETCH(qreal, heightMMf);
+ QFETCH(bool, setMargins);
+ QFETCH(qreal, leftMMf);
+ QFETCH(qreal, rightMMf);
+ QFETCH(qreal, topMMf);
+ QFETCH(qreal, bottomMMf);
+
+ QSizeF sizeMMf = QSizeF(widthMMf, heightMMf);
+
+ QTemporaryFile file;
+ if (!file.open())
+ QSKIP("Couldn't open temp file!");
+ QPdfWriter writer(file.fileName());
+ QCOMPARE(writer.pageLayout().orientation(), QPageLayout::Portrait);
+
+ if (setMargins) {
+ // Setup the given margins
+ QPdfWriter::Margins margins;
+ margins.left = leftMMf;
+ margins.right = rightMMf;
+ margins.top = topMMf;
+ margins.bottom = bottomMMf;
+ writer.setMargins(margins);
+ QCOMPARE(writer.margins().left, leftMMf);
+ QCOMPARE(writer.margins().right, rightMMf);
+ QCOMPARE(writer.margins().top, topMMf);
+ QCOMPARE(writer.margins().bottom, bottomMMf);
+ }
+
+
+ // Set the given size, in Portrait mode
+ if (pageSize < 0) {
+ writer.setPageSizeMM(sizeMMf);
+ QCOMPARE(writer.pageSize(), QPdfWriter::Custom);
+ QCOMPARE(writer.pageLayout().pageSize().id(), QPageSize::Custom);
+ } else {
+ writer.setPageSize(QPdfWriter::PageSize(pageSize));
+ QCOMPARE(writer.pageSize(), QPdfWriter::PageSize(pageSize));
+ QCOMPARE(writer.pageLayout().pageSize().id(), QPageSize::PageSizeId(pageSize));
+ }
+ QCOMPARE(writer.pageLayout().orientation(), QPageLayout::Portrait);
+ QCOMPARE(writer.margins().left, leftMMf);
+ QCOMPARE(writer.margins().right, rightMMf);
+ QCOMPARE(writer.margins().top, topMMf);
+ QCOMPARE(writer.margins().bottom, bottomMMf);
+
+ // QPagedPaintDevice::pageSizeMM() always returns Portrait
+ QCOMPARE(writer.pageSizeMM(), sizeMMf);
+
+ // QPagedPaintDevice::widthMM() and heightMM() are paint metrics and always return set orientation
+ QCOMPARE(writer.widthMM(), qRound(widthMMf - leftMMf - rightMMf));
+ QCOMPARE(writer.heightMM(), qRound(heightMMf - topMMf - bottomMMf));
+
+ // Now switch to Landscape mode, size should be unchanged, but rect and metrics should change
+ writer.setPageOrientation(QPageLayout::Landscape);
+ if (pageSize < 0) {
+ QCOMPARE(writer.pageSize(), QPdfWriter::Custom);
+ QCOMPARE(writer.pageLayout().pageSize().id(), QPageSize::Custom);
+ } else {
+ QCOMPARE(writer.pageSize(), QPdfWriter::PageSize(pageSize));
+ QCOMPARE(writer.pageLayout().pageSize().id(), QPageSize::PageSizeId(pageSize));
+ }
+ QCOMPARE(writer.pageLayout().orientation(), QPageLayout::Landscape);
+ QCOMPARE(writer.margins().left, leftMMf);
+ QCOMPARE(writer.margins().right, rightMMf);
+ QCOMPARE(writer.margins().top, topMMf);
+ QCOMPARE(writer.margins().bottom, bottomMMf);
+
+ // QPagedPaintDevice::pageSizeMM() always returns Portrait
+ QCOMPARE(writer.pageSizeMM(), sizeMMf);
+
+ // QPagedPaintDevice::widthMM() and heightMM() are paint metrics and always return set orientation
+ QCOMPARE(writer.widthMM(), qRound(heightMMf - leftMMf - rightMMf));
+ QCOMPARE(writer.heightMM(), qRound(widthMMf - topMMf - bottomMMf));
+
+ // QPdfWriter::fullRect() always returns set orientation
+ QCOMPARE(writer.pageLayout().fullRect(QPageLayout::Millimeter), QRectF(0, 0, heightMMf, widthMMf));
+
+ // QPdfWriter::paintRect() always returns set orientation
+ QCOMPARE(writer.pageLayout().paintRect(QPageLayout::Millimeter), QRectF(leftMMf, topMMf, heightMMf - leftMMf - rightMMf, widthMMf - topMMf - bottomMMf));
+
+
+ // Now while in Landscape mode, set the size again, results should be the same
+ if (pageSize < 0) {
+ writer.setPageSizeMM(sizeMMf);
+ QCOMPARE(writer.pageSize(), QPdfWriter::Custom);
+ QCOMPARE(writer.pageLayout().pageSize().id(), QPageSize::Custom);
+ } else {
+ writer.setPageSize(QPdfWriter::PageSize(pageSize));
+ QCOMPARE(writer.pageSize(), QPdfWriter::PageSize(pageSize));
+ QCOMPARE(writer.pageLayout().pageSize().id(), QPageSize::PageSizeId(pageSize));
+ }
+ QCOMPARE(writer.pageLayout().orientation(), QPageLayout::Landscape);
+ QCOMPARE(writer.margins().left, leftMMf);
+ QCOMPARE(writer.margins().right, rightMMf);
+ QCOMPARE(writer.margins().top, topMMf);
+ QCOMPARE(writer.margins().bottom, bottomMMf);
+
+ // QPagedPaintDevice::pageSizeMM() always returns Portrait
+ QCOMPARE(writer.pageSizeMM(), sizeMMf);
+
+ // QPagedPaintDevice::widthMM() and heightMM() are paint metrics and always return set orientation
+ QCOMPARE(writer.widthMM(), qRound(heightMMf - leftMMf - rightMMf));
+ QCOMPARE(writer.heightMM(), qRound(widthMMf - topMMf - bottomMMf));
+
+ // QPdfWriter::fullRect() always returns set orientation
+ QCOMPARE(writer.pageLayout().fullRect(QPageLayout::Millimeter), QRectF(0, 0, heightMMf, widthMMf));
+
+ // QPdfWriter::paintRect() always returns set orientation
+ QCOMPARE(writer.pageLayout().paintRect(QPageLayout::Millimeter), QRectF(leftMMf, topMMf, heightMMf - leftMMf - rightMMf, widthMMf - topMMf - bottomMMf));
+}
+
+QTEST_MAIN(tst_QPdfWriter)
+
+#include "tst_qpdfwriter.moc"