diff options
Diffstat (limited to 'tests')
19 files changed, 1489 insertions, 217 deletions
diff --git a/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp b/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp index 0e3ea86165..959c79ed60 100644 --- a/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp +++ b/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp @@ -278,15 +278,21 @@ void tst_QMetaType::threadSafety() namespace TestSpace { struct Foo { double d; }; - + struct QungTfu {}; } Q_DECLARE_METATYPE(TestSpace::Foo) +#define ADD_TESTSPACE(F) TestSpace::F +Q_DECLARE_METATYPE(ADD_TESTSPACE(QungTfu)) + void tst_QMetaType::namespaces() { TestSpace::Foo nf = { 11.12 }; QVariant v = QVariant::fromValue(nf); QCOMPARE(qvariant_cast<TestSpace::Foo>(v).d, 11.12); + + int qungTfuId = qRegisterMetaType<ADD_TESTSPACE(QungTfu)>(); + QCOMPARE(QMetaType::typeName(qungTfuId), "TestSpace::QungTfu"); } void tst_QMetaType::qMetaTypeId() diff --git a/tests/auto/gui/painting/painting.pro b/tests/auto/gui/painting/painting.pro index 8f018fd921..0f7595c871 100644 --- a/tests/auto/gui/painting/painting.pro +++ b/tests/auto/gui/painting/painting.pro @@ -5,8 +5,11 @@ SUBDIRS=\ qcolor \ qbrush \ qregion \ + qpagelayout \ + qpagesize \ qpainter \ qpathclipper \ + qpdfwriter \ qpen \ qpaintengine \ qtransform \ diff --git a/tests/auto/gui/painting/qpagelayout/.gitignore b/tests/auto/gui/painting/qpagelayout/.gitignore new file mode 100644 index 0000000000..7c7dcd262b --- /dev/null +++ b/tests/auto/gui/painting/qpagelayout/.gitignore @@ -0,0 +1 @@ +tst_qpagelayout diff --git a/tests/auto/gui/painting/qpagelayout/qpagelayout.pro b/tests/auto/gui/painting/qpagelayout/qpagelayout.pro new file mode 100644 index 0000000000..38a1064357 --- /dev/null +++ b/tests/auto/gui/painting/qpagelayout/qpagelayout.pro @@ -0,0 +1,9 @@ +CONFIG += testcase +CONFIG += parallel_test +TARGET = tst_qpagelayout +SOURCES += tst_qpagelayout.cpp + +QT += gui-private testlib + +DEFINES += QT_USE_USING_NAMESPACE +DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0 diff --git a/tests/auto/gui/painting/qpagelayout/tst_qpagelayout.cpp b/tests/auto/gui/painting/qpagelayout/tst_qpagelayout.cpp new file mode 100644 index 0000000000..30d25f00d2 --- /dev/null +++ b/tests/auto/gui/painting/qpagelayout/tst_qpagelayout.cpp @@ -0,0 +1,277 @@ +/**************************************************************************** +** +** Copyright (C) 2014 John Layt <jlayt@kde.org> +** 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 <QtGui/qpagelayout.h> + +class tst_QPageLayout : public QObject +{ + Q_OBJECT + +private slots: + void invalid(); + void basics(); + void setGetMargins(); +}; + +void tst_QPageLayout::invalid() +{ + // Invalid + QPageLayout invalid = QPageLayout(); + QCOMPARE(invalid.isValid(), false); + invalid = QPageLayout(QPageSize(), QPageLayout::Portrait, QMarginsF()); + QCOMPARE(invalid.isValid(), false); +} + +void tst_QPageLayout::basics() +{ + // Simple A4, no margins + QPageLayout simple = QPageLayout(QPageSize(QPageSize::A4), QPageLayout::Portrait, QMarginsF(0, 0, 0, 0)); + QCOMPARE(simple.isValid(), true); + QCOMPARE(simple.pageSize().id(), QPageSize::A4); + QCOMPARE(simple.orientation(), QPageLayout::Portrait); + QCOMPARE(simple.margins(), QMarginsF(0, 0, 0, 0)); + QCOMPARE(simple.margins(QPageLayout::Millimeter), QMarginsF(0, 0, 0, 0)); + QCOMPARE(simple.marginsPoints(), QMargins(0, 0, 0, 0)); + QCOMPARE(simple.marginsPixels(72), QMargins(0, 0, 0, 0)); + QCOMPARE(simple.minimumMargins(), QMarginsF(0, 0, 0, 0)); + QCOMPARE(simple.maximumMargins(), QMarginsF(595, 842, 595, 842)); + QCOMPARE(simple.fullRect(), QRectF(0, 0, 595, 842)); + QCOMPARE(simple.fullRect(QPageLayout::Millimeter), QRectF(0, 0, 210, 297)); + QCOMPARE(simple.fullRectPoints(), QRect(0, 0, 595, 842)); + QCOMPARE(simple.fullRectPixels(72), QRect(0, 0, 595, 842)); + QCOMPARE(simple.paintRect(), QRectF(0, 0, 595, 842)); + QCOMPARE(simple.paintRect(QPageLayout::Millimeter), QRectF(0, 0, 210, 297)); + QCOMPARE(simple.paintRectPoints(), QRect(0, 0, 595, 842)); + QCOMPARE(simple.paintRectPixels(72), QRect(0, 0, 595, 842)); + + // Change orientation + simple.setOrientation(QPageLayout::Landscape); + QCOMPARE(simple.orientation(), QPageLayout::Landscape); + QCOMPARE(simple.margins(), QMarginsF(0, 0, 0, 0)); + QCOMPARE(simple.minimumMargins(), QMarginsF(0, 0, 0, 0)); + QCOMPARE(simple.maximumMargins(), QMarginsF(842, 595, 842, 595)); + QCOMPARE(simple.fullRect(), QRectF(0, 0, 842, 595)); + QCOMPARE(simple.fullRect(QPageLayout::Millimeter), QRectF(0, 0, 297, 210)); + QCOMPARE(simple.fullRectPoints(), QRect(0, 0, 842, 595)); + QCOMPARE(simple.fullRectPixels(72), QRect(0, 0, 842, 595)); + QCOMPARE(simple.paintRect(), QRectF(0, 0, 842, 595)); + QCOMPARE(simple.paintRect(QPageLayout::Millimeter), QRectF(0, 0, 297, 210)); + QCOMPARE(simple.paintRectPoints(), QRect(0, 0, 842, 595)); + QCOMPARE(simple.paintRectPixels(72), QRect(0, 0, 842, 595)); + + // Change mode + QCOMPARE(simple.mode(), QPageLayout::StandardMode); + simple.setMode(QPageLayout::FullPageMode); + QCOMPARE(simple.mode(), QPageLayout::FullPageMode); + QCOMPARE(simple.orientation(), QPageLayout::Landscape); + QCOMPARE(simple.margins(), QMarginsF(0, 0, 0, 0)); + QCOMPARE(simple.minimumMargins(), QMarginsF(0, 0, 0, 0)); + QCOMPARE(simple.maximumMargins(), QMarginsF(842, 595, 842, 595)); + QCOMPARE(simple.fullRect(), QRectF(0, 0, 842, 595)); + QCOMPARE(simple.fullRect(QPageLayout::Millimeter), QRectF(0, 0, 297, 210)); + QCOMPARE(simple.fullRectPoints(), QRect(0, 0, 842, 595)); + QCOMPARE(simple.fullRectPixels(72), QRect(0, 0, 842, 595)); + QCOMPARE(simple.paintRect(), QRectF(0, 0, 842, 595)); + QCOMPARE(simple.paintRect(QPageLayout::Millimeter), QRectF(0, 0, 297, 210)); + QCOMPARE(simple.paintRectPoints(), QRect(0, 0, 842, 595)); + QCOMPARE(simple.paintRectPixels(72), QRect(0, 0, 842, 595)); + + // A4, 10pt margins + QPageLayout tenpoint = QPageLayout(QPageSize(QPageSize::A4), QPageLayout::Portrait, QMarginsF(10, 10, 10, 10)); + QCOMPARE(tenpoint.isValid(), true); + QCOMPARE(tenpoint.margins(), QMarginsF(10, 10, 10, 10)); + QCOMPARE(tenpoint.margins(QPageLayout::Millimeter), QMarginsF(3.53, 3.53, 3.53, 3.53)); + QCOMPARE(tenpoint.marginsPoints(), QMargins(10, 10, 10, 10)); + QCOMPARE(tenpoint.marginsPixels(72), QMargins(10, 10, 10, 10)); + QCOMPARE(tenpoint.minimumMargins(), QMarginsF(0, 0, 0, 0)); + QCOMPARE(tenpoint.maximumMargins(), QMarginsF(595, 842, 595, 842)); + QCOMPARE(tenpoint.fullRect(), QRectF(0, 0, 595, 842)); + QCOMPARE(tenpoint.fullRect(QPageLayout::Millimeter), QRectF(0, 0, 210, 297)); + QCOMPARE(tenpoint.fullRectPoints(), QRect(0, 0, 595, 842)); + QCOMPARE(tenpoint.fullRectPixels(72), QRect(0, 0, 595, 842)); + QCOMPARE(tenpoint.paintRect(), QRectF(10, 10, 575, 822)); + QCOMPARE(tenpoint.paintRect(QPageLayout::Millimeter), QRectF(3.53, 3.53, 202.94, 289.94)); + QCOMPARE(tenpoint.paintRect(QPageLayout::Millimeter).x(), 3.53); + QCOMPARE(tenpoint.paintRect(QPageLayout::Millimeter).y(), 3.53); + QCOMPARE(tenpoint.paintRect(QPageLayout::Millimeter).width(), 202.94); + QCOMPARE(tenpoint.paintRect(QPageLayout::Millimeter).height(), 289.94); + QCOMPARE(tenpoint.paintRect(QPageLayout::Millimeter).left(), 3.53); + QCOMPARE(tenpoint.paintRect(QPageLayout::Millimeter).right(), 206.47); + QCOMPARE(tenpoint.paintRect(QPageLayout::Millimeter).top(), 3.53); + QCOMPARE(tenpoint.paintRect(QPageLayout::Millimeter).bottom(), 293.47); + QCOMPARE(tenpoint.paintRectPoints(), QRect(10, 10, 575, 822)); + QCOMPARE(tenpoint.paintRectPixels(72), QRect(10, 10, 575, 822)); + + // Change orientation + tenpoint.setOrientation(QPageLayout::Landscape); + QCOMPARE(tenpoint.orientation(), QPageLayout::Landscape); + QCOMPARE(tenpoint.margins(), QMarginsF(10, 10, 10, 10)); + QCOMPARE(tenpoint.minimumMargins(), QMarginsF(0, 0, 0, 0)); + QCOMPARE(tenpoint.maximumMargins(), QMarginsF(842, 595, 842, 595)); + QCOMPARE(tenpoint.fullRect(), QRectF(0, 0, 842, 595)); + QCOMPARE(tenpoint.fullRect(QPageLayout::Millimeter), QRectF(0, 0, 297, 210)); + QCOMPARE(tenpoint.fullRectPoints(), QRect(0, 0, 842, 595)); + QCOMPARE(tenpoint.fullRectPixels(72), QRect(0, 0, 842, 595)); + QCOMPARE(tenpoint.paintRect(), QRectF(10, 10, 822, 575)); + QCOMPARE(tenpoint.paintRect(QPageLayout::Millimeter), QRectF(3.53, 3.53, 289.94, 202.94)); + QCOMPARE(tenpoint.paintRectPoints(), QRect(10, 10, 822, 575)); + QCOMPARE(tenpoint.paintRectPixels(72), QRect(10, 10, 822, 575)); + + // Change mode + QCOMPARE(tenpoint.mode(), QPageLayout::StandardMode); + tenpoint.setMode(QPageLayout::FullPageMode); + QCOMPARE(tenpoint.mode(), QPageLayout::FullPageMode); + QCOMPARE(tenpoint.orientation(), QPageLayout::Landscape); + QCOMPARE(tenpoint.margins(), QMarginsF(10, 10, 10, 10)); + QCOMPARE(tenpoint.minimumMargins(), QMarginsF(0, 0, 0, 0)); + QCOMPARE(tenpoint.maximumMargins(), QMarginsF(842, 595, 842, 595)); + QCOMPARE(tenpoint.fullRect(), QRectF(0, 0, 842, 595)); + QCOMPARE(tenpoint.fullRect(QPageLayout::Millimeter), QRectF(0, 0, 297, 210)); + QCOMPARE(tenpoint.fullRectPoints(), QRect(0, 0, 842, 595)); + QCOMPARE(tenpoint.fullRectPixels(72), QRect(0, 0, 842, 595)); + QCOMPARE(tenpoint.paintRect(), QRectF(0, 0, 842, 595)); + QCOMPARE(tenpoint.paintRect(QPageLayout::Millimeter), QRectF(0, 0, 297, 210)); + QCOMPARE(tenpoint.paintRectPoints(), QRect(0, 0, 842, 595)); + QCOMPARE(tenpoint.paintRectPixels(72), QRect(0, 0, 842, 595)); +} + +void tst_QPageLayout::setGetMargins() +{ + // A4, 20pt margins + QMarginsF margins = QMarginsF(10, 10, 10, 10); + QMarginsF min = QMarginsF(10, 10, 10, 10); + QMarginsF max = QMarginsF(585, 832, 585, 832); + QPageLayout change = QPageLayout(QPageSize(QPageSize::A4), QPageLayout::Portrait, margins, QPageLayout::Point, min); + QCOMPARE(change.isValid(), true); + QCOMPARE(change.margins(), margins); + QCOMPARE(change.margins(QPageLayout::Millimeter), QMarginsF(3.53, 3.53, 3.53, 3.53)); + QCOMPARE(change.marginsPoints(), QMargins(10, 10, 10, 10)); + QCOMPARE(change.marginsPixels(72), QMargins(10, 10, 10, 10)); + QCOMPARE(change.minimumMargins(), min); + QCOMPARE(change.maximumMargins(), max); + + // Set magins within min/max ok + margins = QMarginsF(20, 20, 20, 20); + change.setMargins(margins); + QCOMPARE(change.margins(QPageLayout::Millimeter), QMarginsF(7.06, 7.06, 7.06, 7.06)); + QCOMPARE(change.marginsPoints(), QMargins(20, 20, 20, 20)); + QCOMPARE(change.marginsPixels(72), QMargins(20, 20, 20, 20)); + QCOMPARE(change.margins(), margins); + + // Set margins all below min is rejected + change.setMargins(QMarginsF(0, 0, 0, 0)); + QCOMPARE(change.margins(), margins); + + // Set margins all above max is rejected + change.setMargins(QMarginsF(1000, 1000, 1000, 1000)); + QCOMPARE(change.margins(), margins); + + // Only 1 wrong, set still rejects + change.setMargins(QMarginsF(50, 50, 50, 0)); + QCOMPARE(change.margins(), margins); + + // Set page size resets min/max, clamps existing margins + change.setMargins(change.maximumMargins()); + change.setPageSize(QPageSize(QPageSize::A5)); + QCOMPARE(change.margins(), QMarginsF(420, 595, 420, 595)); + QCOMPARE(change.minimumMargins(), QMarginsF(0, 0, 0, 0)); + QCOMPARE(change.maximumMargins(), QMarginsF(420, 595, 420, 595)); + + // Set page size, sets min/max, clamps existing margins + margins = QMarginsF(20, 500, 20, 500); + change.setMargins(margins); + QCOMPARE(change.margins(), margins); + min = QMarginsF(30, 30, 30, 30); + max = QMarginsF(267, 390, 267, 390); + change.setPageSize(QPageSize(QPageSize::A6)); + change.setMinimumMargins(min); + QCOMPARE(change.margins(), QMarginsF(30, 390, 30, 390)); + QCOMPARE(change.minimumMargins(), min); + QCOMPARE(change.maximumMargins(), max); + + // A4, 20pt margins + margins = QMarginsF(20, 20, 20, 20); + min = QMarginsF(10, 10, 10, 10); + max = QMarginsF(585, 832, 585, 832); + QPageLayout fullPage = QPageLayout(QPageSize(QPageSize::A4), QPageLayout::Portrait, margins, QPageLayout::Point, min); + fullPage.setMode(QPageLayout::FullPageMode); + QCOMPARE(fullPage.isValid(), true); + QCOMPARE(fullPage.margins(), margins); + QCOMPARE(fullPage.minimumMargins(), min); + QCOMPARE(fullPage.maximumMargins(), max); + + // Set margins within min/max ok + margins = QMarginsF(50, 50, 50, 50); + fullPage.setMargins(margins); + QCOMPARE(fullPage.margins(), margins); + + // Set margins all below min is accepted + margins = QMarginsF(0, 0, 0, 0); + fullPage.setMargins(margins); + QCOMPARE(fullPage.margins(), margins); + + // Set margins all above max is rejected + margins = QMarginsF(1000, 1000, 1000, 1000); + fullPage.setMargins(margins); + QCOMPARE(fullPage.margins(), margins); + + // Only 1 wrong, set still accepts + margins = QMarginsF(50, 50, 50, 0); + fullPage.setMargins(margins); + QCOMPARE(fullPage.margins(), margins); + + // Set page size, sets min/max, clamps existing margins + margins = QMarginsF(20, 500, 20, 500); + fullPage.setMargins(margins); + QCOMPARE(fullPage.margins(), margins); + min = QMarginsF(30, 30, 30, 30); + max = QMarginsF(267, 390, 267, 390); + fullPage.setPageSize(QPageSize(QPageSize::A6)); + fullPage.setMinimumMargins(min); + QCOMPARE(fullPage.margins(), margins); + QCOMPARE(fullPage.minimumMargins(), min); + QCOMPARE(fullPage.maximumMargins(), max); +} + +QTEST_APPLESS_MAIN(tst_QPageLayout) + +#include "tst_qpagelayout.moc" diff --git a/tests/auto/gui/painting/qpagesize/.gitignore b/tests/auto/gui/painting/qpagesize/.gitignore new file mode 100644 index 0000000000..773a466f6d --- /dev/null +++ b/tests/auto/gui/painting/qpagesize/.gitignore @@ -0,0 +1 @@ +tst_qpagesize diff --git a/tests/auto/gui/painting/qpagesize/qpagesize.pro b/tests/auto/gui/painting/qpagesize/qpagesize.pro new file mode 100644 index 0000000000..5836dc9ba0 --- /dev/null +++ b/tests/auto/gui/painting/qpagesize/qpagesize.pro @@ -0,0 +1,9 @@ +CONFIG += testcase +CONFIG += parallel_test +TARGET = tst_qpagesize +SOURCES += tst_qpagesize.cpp + +QT += testlib + +DEFINES += QT_USE_USING_NAMESPACE +DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0 diff --git a/tests/auto/gui/painting/qpagesize/tst_qpagesize.cpp b/tests/auto/gui/painting/qpagesize/tst_qpagesize.cpp new file mode 100644 index 0000000000..968c5ff617 --- /dev/null +++ b/tests/auto/gui/painting/qpagesize/tst_qpagesize.cpp @@ -0,0 +1,258 @@ +/**************************************************************************** +** +** Copyright (C) 2013 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/QPageSize> + +#ifdef Q_OS_WIN +#include <QtCore/qt_windows.h> +#endif // Q_OS_WIN + +class tst_QPageSize : public QObject +{ + Q_OBJECT + +private slots: + void basics(); + void fuzzy(); + void custom(); + void statics(); +}; + +void tst_QPageSize::basics() +{ + // Invalid + QPageSize invalid = QPageSize(QPageSize::Custom); + QCOMPARE(invalid.isValid(), false); + invalid = QPageSize(QSize()); + QCOMPARE(invalid.isValid(), false); + invalid = QPageSize(QSizeF(), QPageSize::Millimeter); + QCOMPARE(invalid.isValid(), false); + + // Simple QPageSize::PaperSizeId + QPageSize a4 = QPageSize(QPageSize::A4); + QCOMPARE(a4.isValid(), true); + QCOMPARE(a4.key(), QString("A4")); + QCOMPARE(a4.name(), QString("A4")); + QCOMPARE(a4.id(), QPageSize::A4); +#ifdef Q_OS_WIN + QCOMPARE(a4.windowsId(), DMPAPER_A4); +#else + QCOMPARE(a4.windowsId(), 9); // DMPAPER_A4 +#endif + QCOMPARE(a4.definitionSize(), QSizeF(210, 297)); + QCOMPARE(a4.definitionUnits(), QPageSize::Millimeter); + QCOMPARE(a4.size(QPageSize::Millimeter), QSizeF(210, 297)); + QCOMPARE(a4.size(QPageSize::Inch), QSizeF(8.27, 11.69)); + QCOMPARE(a4.size(QPageSize::Pica), QSizeF(49.58, 70.17)); + QCOMPARE(a4.sizePoints(), QSize(595, 842)); + QCOMPARE(a4.sizePixels(72), QSize(595, 842)); + QCOMPARE(a4.rect(QPageSize::Millimeter), QRectF(0, 0, 210, 297)); + QCOMPARE(a4.rect(QPageSize::Inch), QRectF(0, 0, 8.27, 11.69)); + QCOMPARE(a4.rect(QPageSize::Pica), QRectF(0, 0, 49.58, 70.17)); + QCOMPARE(a4.rectPoints(), QRect(0, 0, 595, 842)); + QCOMPARE(a4.rectPixels(72), QRect(0, 0, 595, 842)); + + // Simple QPageSize::PaperSizeId later in list + QPageSize folio = QPageSize(QPageSize::Folio); + QCOMPARE(folio.isValid(), true); + QCOMPARE(folio.key(), QString("Folio")); + QCOMPARE(folio.name(), QString("Folio (8.27 x 13 in)")); + QCOMPARE(folio.id(), QPageSize::Folio); + QCOMPARE(folio.definitionSize(), QSizeF(210, 330)); + QCOMPARE(folio.definitionUnits(), QPageSize::Millimeter); + QCOMPARE(folio.size(QPageSize::Millimeter), QSizeF(210, 330)); + QCOMPARE(folio.sizePoints(), QSize(595, 935)); + QCOMPARE(folio.sizePixels(72), QSize(595, 935)); + QCOMPARE(folio.size(QPageSize::Inch), QSizeF(8.27, 13)); + + // Simple QPageSize::PaperSizeId last in list + QPageSize you4 = QPageSize(QPageSize::EnvelopeYou4); + QCOMPARE(you4.isValid(), true); + QCOMPARE(you4.key(), QString("EnvYou4")); + QCOMPARE(you4.name(), QString("Envelope You 4")); + QCOMPARE(you4.id(), QPageSize::EnvelopeYou4); +#ifdef Q_OS_WIN + QCOMPARE(you4.windowsId(), DMPAPER_JENV_YOU4); +#else + QCOMPARE(you4.windowsId(), 91); +#endif + QCOMPARE(you4.size(QPageSize::Millimeter), QSizeF(105, 235)); + QCOMPARE(you4.size(QPageSize::Inch), QSizeF(4.13, 9.25)); + QCOMPARE(you4.sizePoints(), QSize(298, 666)); + QCOMPARE(you4.sizePixels(72), QSize(298, 666)); + + // Simple QSize in Points + QPageSize a4b = QPageSize(QSize(595, 842)); + QCOMPARE(a4b.isValid(), true); + QCOMPARE(a4b.id(), QPageSize::A4); + QCOMPARE(a4b.sizePoints(), QSize(595, 842)); + + // Simple QSize in Points later in list, custom name + QPageSize folio2 = QPageSize(QSize(595, 935), QStringLiteral("Folio2")); + QCOMPARE(folio2.isValid(), true); + QCOMPARE(folio2.name(), QString("Folio2")); + QCOMPARE(folio2.id(), QPageSize::Folio); + QCOMPARE(folio2.sizePoints(), QSize(595, 935)); + + // Comparisons + QCOMPARE((a4 == folio), false); + QCOMPARE((a4.isEquivalentTo(folio)), false); + QCOMPARE((a4 == a4b), true); + QCOMPARE((a4.isEquivalentTo(a4b)), true); + QCOMPARE((folio == folio2), false); // Name different + QCOMPARE((folio.isEquivalentTo(folio2)), true); + + // Simple QSize in Millimeters + QPageSize folio3 = QPageSize(QSizeF(210, 330), QPageSize::Millimeter); + QCOMPARE(folio3.isValid(), true); + QCOMPARE(folio3.id(), QPageSize::Folio); + QCOMPARE(folio3.sizePoints(), QSize(595, 935)); +} + +void tst_QPageSize::fuzzy() +{ + // Using FuzzyMatch by default + + // Simple QSize within 3 Points + QPageSize a4a = QPageSize(QSize(592, 845)); + QCOMPARE(a4a.isValid(), true); + QCOMPARE(a4a.id(), QPageSize::A4); + QCOMPARE(a4a.sizePoints(), QSize(595, 842)); + + // Simple QSizeF within 1mm + QPageSize a4b = QPageSize(QSizeF(211, 298), QPageSize::Millimeter); + QCOMPARE(a4b.isValid(), true); + QCOMPARE(a4b.id(), QPageSize::A4); + QCOMPARE(a4b.size(QPageSize::Millimeter), QSizeF(210, 297)); + QCOMPARE(a4b.sizePoints(), QSize(595, 842)); + + // Using FuzzyOrientationMatch + + // Exact A4 in landscape mode + QPageSize a4l = QPageSize(QSize(842, 595)); + QCOMPARE(a4l.isValid(), true); + QCOMPARE(a4l.id(), QPageSize::Custom); + QCOMPARE(a4l.sizePoints(), QSize(842, 595)); + + a4l = QPageSize(QSize(842, 595), QString(), QPageSize::FuzzyOrientationMatch); + QCOMPARE(a4l.isValid(), true); + QCOMPARE(a4l.id(), QPageSize::A4); + QCOMPARE(a4l.sizePoints(), QSize(595, 842)); + + // Using ExactMatch + + // Simple QSize within 3 Points + QPageSize a4d = QPageSize(QSize(592, 845), QString(), QPageSize::ExactMatch); + QCOMPARE(a4d.isValid(), true); + QCOMPARE(a4d.id(), QPageSize::Custom); + QCOMPARE(a4d.sizePoints(), QSize(592, 845)); + + // Simple QSizeF within 1mm + QPageSize a4e = QPageSize(QSizeF(211, 298), QPageSize::Millimeter, QString(), QPageSize::ExactMatch); + QCOMPARE(a4e.isValid(), true); + QCOMPARE(a4e.id(), QPageSize::Custom); + QCOMPARE(a4e.size(QPageSize::Millimeter), QSizeF(211, 298)); + QCOMPARE(a4e.sizePoints(), QSize(598, 845)); +} + +void tst_QPageSize::custom() +{ + // Simple non-standard Points QSize + QPageSize custom1 = QPageSize(QSize(500, 600)); + QCOMPARE(custom1.isValid(), true); + QCOMPARE(custom1.key(), QString("Custom.500x600")); + QCOMPARE(custom1.name(), QString("Custom (500pt x 600pt)")); + QCOMPARE(custom1.id(), QPageSize::Custom); + QCOMPARE(custom1.definitionSize(), QSizeF(500, 600)); + QCOMPARE(custom1.definitionUnits(), QPageSize::Point); + QCOMPARE(custom1.size(QPageSize::Millimeter), QSizeF(176.39, 211.67)); + QCOMPARE(custom1.size(QPageSize::Pica), QSizeF(41.67, 50)); + QCOMPARE(custom1.sizePoints(), QSize(500, 600)); + QCOMPARE(custom1.sizePixels(72), QSize(500, 600)); + + // Simple non-standard MM QSizeF + QPageSize custom2 = QPageSize(QSizeF(500.3, 600.57), QPageSize::Millimeter); + QCOMPARE(custom2.isValid(), true); + QCOMPARE(custom2.key(), QString("Custom.500.3x600.57mm")); + QCOMPARE(custom2.name(), QString("Custom (500.3mm x 600.57mm)")); + QCOMPARE(custom2.id(), QPageSize::Custom); + QCOMPARE(custom2.definitionSize(), QSizeF(500.3, 600.57)); + QCOMPARE(custom2.definitionUnits(), QPageSize::Millimeter); + QCOMPARE(custom2.size(QPageSize::Millimeter), QSizeF(500.3, 600.57)); + QCOMPARE(custom2.size(QPageSize::Pica), QSizeF(118.18, 141.87)); + QCOMPARE(custom2.sizePoints(), QSize(1418, 1702)); + QCOMPARE(custom2.sizePixels(72), QSize(1418, 1702)); +} + +void tst_QPageSize::statics() +{ + QCOMPARE(QPageSize::key(QPageSize::EnvelopeYou4), QString("EnvYou4")); + QCOMPARE(QPageSize::name(QPageSize::EnvelopeYou4), QString("Envelope You 4")); + +#ifdef Q_OS_WIN + QCOMPARE(QPageSize::windowsId(QPageSize::EnvelopeYou4), DMPAPER_JENV_YOU4); + QCOMPARE(QPageSize::id(DMPAPER_JENV_YOU4), QPageSize::EnvelopeYou4); + QCOMPARE(QPageSize::id(DMPAPER_A4_ROTATED), QPageSize::A4); +#else + QCOMPARE(QPageSize::windowsId(QPageSize::EnvelopeYou4), 91); + QCOMPARE(QPageSize::id(91), QPageSize::EnvelopeYou4); + QCOMPARE(QPageSize::id(77), QPageSize::A4); +#endif + + QCOMPARE(QPageSize::id(QSize(298, 666)), QPageSize::EnvelopeYou4); + QCOMPARE(QPageSize::id(QSizeF(105, 235), QPageSize::Millimeter), QPageSize::EnvelopeYou4); + + QCOMPARE(QPageSize::definitionSize(QPageSize::Letter), QSizeF(8.5, 11)); + QCOMPARE(QPageSize::definitionUnits(QPageSize::Letter), QPageSize::Inch); + QCOMPARE(QPageSize::definitionSize(QPageSize::EnvelopeYou4), QSizeF(105, 235)); + QCOMPARE(QPageSize::definitionUnits(QPageSize::EnvelopeYou4), QPageSize::Millimeter); + + QCOMPARE(QPageSize::size(QPageSize::EnvelopeYou4, QPageSize::Millimeter), QSizeF(105, 235)); + QCOMPARE(QPageSize::sizePoints(QPageSize::EnvelopeYou4), QSize(298, 666)); + QCOMPARE(QPageSize::sizePixels(QPageSize::EnvelopeYou4, 72), QSize(298, 666)); +} + +QTEST_APPLESS_MAIN(tst_QPageSize) + +#include "tst_qpagesize.moc" 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" diff --git a/tests/auto/printsupport/kernel/kernel.pro b/tests/auto/printsupport/kernel/kernel.pro index 6f5802bf3e..0566556e01 100644 --- a/tests/auto/printsupport/kernel/kernel.pro +++ b/tests/auto/printsupport/kernel/kernel.pro @@ -1,4 +1,5 @@ TEMPLATE=subdirs SUBDIRS=\ + qprintdevice \ qprinter \ qprinterinfo \ diff --git a/tests/auto/printsupport/kernel/qprintdevice/.gitignore b/tests/auto/printsupport/kernel/qprintdevice/.gitignore new file mode 100644 index 0000000000..fcef7c1997 --- /dev/null +++ b/tests/auto/printsupport/kernel/qprintdevice/.gitignore @@ -0,0 +1 @@ +tst_qprinterinfo diff --git a/tests/auto/printsupport/kernel/qprintdevice/qprintdevice.pro b/tests/auto/printsupport/kernel/qprintdevice/qprintdevice.pro new file mode 100644 index 0000000000..fb11b0361e --- /dev/null +++ b/tests/auto/printsupport/kernel/qprintdevice/qprintdevice.pro @@ -0,0 +1,9 @@ +CONFIG += testcase +CONFIG += parallel_test +TARGET = tst_qprintdevice +SOURCES += tst_qprintdevice.cpp + +QT += printsupport-private network testlib + +DEFINES += QT_USE_USING_NAMESPACE +DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0 diff --git a/tests/auto/printsupport/kernel/qprintdevice/tst_qprintdevice.cpp b/tests/auto/printsupport/kernel/qprintdevice/tst_qprintdevice.cpp new file mode 100644 index 0000000000..1064b18168 --- /dev/null +++ b/tests/auto/printsupport/kernel/qprintdevice/tst_qprintdevice.cpp @@ -0,0 +1,111 @@ +/**************************************************************************** +** +** Copyright (C) 2014 John Layt <jlayt@kde.org> +** 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 <qpa/qplatformprintplugin.h> +#include <qpa/qplatformprintersupport.h> + +#include <private/qprintdevice_p.h> + +class tst_QPrintDevice : public QObject +{ + Q_OBJECT + +private slots: + void basics(); +}; + +void tst_QPrintDevice::basics() +{ +#ifndef QT_NO_PRINTER + QPlatformPrinterSupport *ps = QPlatformPrinterSupportPlugin::get(); + if (!ps) + QSKIP("Could not load platform plugin"); + + QString defaultId = ps->defaultPrintDeviceId(); + if (defaultId.isEmpty()) { + qDebug() << "No default printer found"; + } else { + qDebug() << "Default Printer ID :" << defaultId; + QVERIFY(ps->availablePrintDeviceIds().contains(defaultId)); + } + + qDebug() << "Available Printer IDs :" << ps->availablePrintDeviceIds(); + + // Just exercise the api for now as we don't know what is installed + foreach (const QString id, ps->availablePrintDeviceIds()) { + QPrintDevice printDevice = ps->createPrintDevice(id); + qDebug() << "Created printer" << id; + QCOMPARE(printDevice.isValid(), true); + printDevice.id(); + printDevice.name(); + printDevice.location(); + printDevice.makeAndModel(); + printDevice.isValid(); + printDevice.isDefault(); + printDevice.isRemote(); + printDevice.state(); + printDevice.supportsMultipleCopies(); + printDevice.supportsCollateCopies(); + printDevice.defaultPageSize(); + printDevice.supportedPageSizes(); + printDevice.supportsCustomPageSizes(); + printDevice.minimumPhysicalPageSize(); + printDevice.maximumPhysicalPageSize(); + printDevice.defaultResolution(); + printDevice.supportedResolutions(); + printDevice.defaultInputSlot(); + printDevice.supportedInputSlots(); + printDevice.defaultOutputBin(); + printDevice.supportedOutputBins(); + printDevice.defaultDuplexMode(); + printDevice.supportedDuplexModes(); + printDevice.defaultColorMode(); + printDevice.supportedColorModes(); + printDevice.supportedMimeTypes(); + } +#endif // QT_NO_PRINTER +} + +QTEST_MAIN(tst_QPrintDevice) + +#include "tst_qprintdevice.moc" diff --git a/tests/auto/printsupport/kernel/qprinter/tst_qprinter.cpp b/tests/auto/printsupport/kernel/qprinter/tst_qprinter.cpp index b138f34967..5d99cca8d9 100644 --- a/tests/auto/printsupport/kernel/qprinter/tst_qprinter.cpp +++ b/tests/auto/printsupport/kernel/qprinter/tst_qprinter.cpp @@ -51,6 +51,7 @@ #include <qvariant.h> #include <qpainter.h> #include <qprintengine.h> +#include <qpagelayout.h> #include <math.h> @@ -88,9 +89,6 @@ public slots: void cleanupTestCase(); #else private slots: -#ifdef Q_OS_WIN - void testNonExistentPrinter(); -#endif void testPageRectAndPaperRect(); void testPageRectAndPaperRect_data(); void testSetOptions(); @@ -103,7 +101,6 @@ private slots: void testPageMargins_data(); void testPageMargins(); void outputFormatFromSuffix(); - void setGetPaperSize(); void errorReporting(); void testCustomPageSizes(); void customPaperSizeAndMargins_data(); @@ -116,8 +113,6 @@ private slots: void testCurrentPage(); void taskQTBUG4497_reusePrinterOnDifferentFiles(); void testPdfTitle(); - void testPageMetrics_data(); - void testPageMetrics(); // Test QPrintEngine keys and their QPrinter setters/getters void testMultipleKeys(); @@ -148,6 +143,9 @@ private slots: // Test QPrinter setters/getters for non-QPrintEngine options void outputFormat(); void fromToPage(); + + void testPageMetrics_data(); + void testPageMetrics(); #endif }; @@ -356,40 +354,6 @@ void tst_QPrinter::testMargins() QFile::remove("silly"); } -#ifdef Q_OS_WIN -// QPrinter::testNonExistentPrinter() is not relevant for this platform -void tst_QPrinter::testNonExistentPrinter() -{ - QPrinter printer; - QPainter painter; - - // Make sure it doesn't crash on setting or getting properties - printer.printEngine()->setProperty(QPrintEngine::PPK_PrinterName, "some non existing printer"); - printer.setPageSize(QPrinter::A4); - printer.setOrientation(QPrinter::Portrait); - printer.setFullPage(true); - printer.pageSize(); - printer.orientation(); - printer.fullPage(); - printer.setCopyCount(1); - printer.printerName(); - - // nor metrics - QCOMPARE(printer.printEngine()->metric(QPaintDevice::PdmWidth), 0); - QCOMPARE(printer.printEngine()->metric(QPaintDevice::PdmHeight), 0); - QCOMPARE(printer.printEngine()->metric(QPaintDevice::PdmWidthMM), 0); - QCOMPARE(printer.printEngine()->metric(QPaintDevice::PdmHeightMM), 0); - QCOMPARE(printer.printEngine()->metric(QPaintDevice::PdmNumColors), 0); - QCOMPARE(printer.printEngine()->metric(QPaintDevice::PdmDepth), 0); - QCOMPARE(printer.printEngine()->metric(QPaintDevice::PdmDpiX), 0); - QCOMPARE(printer.printEngine()->metric(QPaintDevice::PdmDpiY), 0); - QCOMPARE(printer.printEngine()->metric(QPaintDevice::PdmPhysicalDpiX), 0); - QCOMPARE(printer.printEngine()->metric(QPaintDevice::PdmPhysicalDpiY), 0); - - QVERIFY(!painter.begin(&printer)); -} -#endif - void tst_QPrinter::testMulitpleSets_data() { QTest::addColumn<int>("resolution"); @@ -477,20 +441,6 @@ void tst_QPrinter::outputFormatFromSuffix() QVERIFY(p.outputFormat() == QPrinter::NativeFormat); } -void tst_QPrinter::setGetPaperSize() -{ - QPrinter p; - p.setOutputFormat(QPrinter::PdfFormat); - QSizeF size(500, 10); - p.setPaperSize(size, QPrinter::Millimeter); - QCOMPARE(p.paperSize(QPrinter::Millimeter), size); - QCOMPARE(p.pageSizeMM(), size); - QSizeF ptSize = p.paperSize(QPrinter::Point); - //qDebug() << ptSize; - QVERIFY(qAbs(ptSize.width() - size.width() * (72/25.4)) < 1E-4); - QVERIFY(qAbs(ptSize.height() - size.height() * (72/25.4)) < 1E-4); -} - void tst_QPrinter::testPageMargins_data() { QTest::addColumn<qreal>("left"); @@ -499,11 +449,12 @@ void tst_QPrinter::testPageMargins_data() QTest::addColumn<qreal>("bottom"); QTest::addColumn<int>("unit"); - QTest::newRow("data0") << qreal(5.5) << qreal(6.5) << qreal(7.5) << qreal(8.5) << static_cast<int>(QPrinter::Millimeter); - QTest::newRow("data1") << qreal(5.5) << qreal(6.5) << qreal(7.5) << qreal(8.5) << static_cast<int>(QPrinter::Point); + // Use custom margins that will exceed most printers minimum allowed + QTest::newRow("data0") << qreal(25.5) << qreal(26.5) << qreal(27.5) << qreal(28.5) << static_cast<int>(QPrinter::Millimeter); + QTest::newRow("data1") << qreal(55.5) << qreal(56.5) << qreal(57.5) << qreal(58.5) << static_cast<int>(QPrinter::Point); QTest::newRow("data2") << qreal(5.5) << qreal(6.5) << qreal(7.5) << qreal(8.5) << static_cast<int>(QPrinter::Inch); QTest::newRow("data3") << qreal(5.5) << qreal(6.5) << qreal(7.5) << qreal(8.5) << static_cast<int>(QPrinter::Pica); - QTest::newRow("data4") << qreal(5.5) << qreal(6.5) << qreal(7.5) << qreal(8.5) << static_cast<int>(QPrinter::Didot); + QTest::newRow("data4") << qreal(55.5) << qreal(56.5) << qreal(57.5) << qreal(58.5) << static_cast<int>(QPrinter::Didot); QTest::newRow("data5") << qreal(5.5) << qreal(6.5) << qreal(7.5) << qreal(8.5) << static_cast<int>(QPrinter::Cicero); } @@ -511,61 +462,54 @@ void tst_QPrinter::testPageMargins() { QPrinter obj1; - qreal toMillimeters[6]; - toMillimeters[QPrinter::Millimeter] = 1; - toMillimeters[QPrinter::Point] = 0.352777778; - toMillimeters[QPrinter::Inch] = 25.4; - toMillimeters[QPrinter::Pica] = 4.23333333; - toMillimeters[QPrinter::Didot] = 0.376; - toMillimeters[QPrinter::Cicero] = 4.51166667; - QFETCH(qreal, left); QFETCH(qreal, top); QFETCH(qreal, right); QFETCH(qreal, bottom); QFETCH(int, unit); - qreal nLeft, nTop, nRight, nBottom; + QPageLayout layout = QPageLayout(QPageSize(QPageSize::A0), QPageLayout::Portrait, + QMarginsF(left, top, right, bottom), QPageLayout::Unit(unit)); - obj1.setPageMargins(left, top, right, bottom, static_cast<QPrinter::Unit>(unit)); + qreal nLeft, nTop, nRight, nBottom; - qreal tolerance = 0.05; + obj1.setPageMargins(left, top, right, bottom, QPrinter::Unit(unit)); obj1.getPageMargins(&nLeft, &nTop, &nRight, &nBottom, QPrinter::Millimeter); - QVERIFY(fabs(left*toMillimeters[unit] - nLeft*toMillimeters[QPrinter::Millimeter]) < tolerance); - QVERIFY(fabs(top*toMillimeters[unit] - nTop*toMillimeters[QPrinter::Millimeter]) < tolerance); - QVERIFY(fabs(right*toMillimeters[unit] - nRight*toMillimeters[QPrinter::Millimeter]) < tolerance); - QVERIFY(fabs(bottom*toMillimeters[unit] - nBottom*toMillimeters[QPrinter::Millimeter]) < tolerance); + QCOMPARE(nLeft, layout.margins(QPageLayout::Millimeter).left()); + QCOMPARE(nRight, layout.margins(QPageLayout::Millimeter).right()); + QCOMPARE(nTop, layout.margins(QPageLayout::Millimeter).top()); + QCOMPARE(nBottom, layout.margins(QPageLayout::Millimeter).bottom()); obj1.getPageMargins(&nLeft, &nTop, &nRight, &nBottom, QPrinter::Point); - QVERIFY(fabs(left*toMillimeters[unit] - nLeft*toMillimeters[QPrinter::Point]) < tolerance); - QVERIFY(fabs(top*toMillimeters[unit] - nTop*toMillimeters[QPrinter::Point]) < tolerance); - QVERIFY(fabs(right*toMillimeters[unit] - nRight*toMillimeters[QPrinter::Point]) < tolerance); - QVERIFY(fabs(bottom*toMillimeters[unit] - nBottom*toMillimeters[QPrinter::Point]) < tolerance); + QCOMPARE(nLeft, layout.margins(QPageLayout::Point).left()); + QCOMPARE(nRight, layout.margins(QPageLayout::Point).right()); + QCOMPARE(nTop, layout.margins(QPageLayout::Point).top()); + QCOMPARE(nBottom, layout.margins(QPageLayout::Point).bottom()); obj1.getPageMargins(&nLeft, &nTop, &nRight, &nBottom, QPrinter::Inch); - QVERIFY(fabs(left*toMillimeters[unit] - nLeft*toMillimeters[QPrinter::Inch]) < tolerance); - QVERIFY(fabs(top*toMillimeters[unit] - nTop*toMillimeters[QPrinter::Inch]) < tolerance); - QVERIFY(fabs(right*toMillimeters[unit] - nRight*toMillimeters[QPrinter::Inch]) < tolerance); - QVERIFY(fabs(bottom*toMillimeters[unit] - nBottom*toMillimeters[QPrinter::Inch]) < tolerance); + QCOMPARE(nLeft, layout.margins(QPageLayout::Inch).left()); + QCOMPARE(nRight, layout.margins(QPageLayout::Inch).right()); + QCOMPARE(nTop, layout.margins(QPageLayout::Inch).top()); + QCOMPARE(nBottom, layout.margins(QPageLayout::Inch).bottom()); obj1.getPageMargins(&nLeft, &nTop, &nRight, &nBottom, QPrinter::Pica); - QVERIFY(fabs(left*toMillimeters[unit] - nLeft*toMillimeters[QPrinter::Pica]) < tolerance); - QVERIFY(fabs(top*toMillimeters[unit] - nTop*toMillimeters[QPrinter::Pica]) < tolerance); - QVERIFY(fabs(right*toMillimeters[unit] - nRight*toMillimeters[QPrinter::Pica]) < tolerance); - QVERIFY(fabs(bottom*toMillimeters[unit] - nBottom*toMillimeters[QPrinter::Pica]) < tolerance); + QCOMPARE(nLeft, layout.margins(QPageLayout::Pica).left()); + QCOMPARE(nRight, layout.margins(QPageLayout::Pica).right()); + QCOMPARE(nTop, layout.margins(QPageLayout::Pica).top()); + QCOMPARE(nBottom, layout.margins(QPageLayout::Pica).bottom()); obj1.getPageMargins(&nLeft, &nTop, &nRight, &nBottom, QPrinter::Didot); - QVERIFY(fabs(left*toMillimeters[unit] - nLeft*toMillimeters[QPrinter::Didot]) < tolerance); - QVERIFY(fabs(top*toMillimeters[unit] - nTop*toMillimeters[QPrinter::Didot]) < tolerance); - QVERIFY(fabs(right*toMillimeters[unit] - nRight*toMillimeters[QPrinter::Didot]) < tolerance); - QVERIFY(fabs(bottom*toMillimeters[unit] - nBottom*toMillimeters[QPrinter::Didot]) < tolerance); + QCOMPARE(nLeft, layout.margins(QPageLayout::Didot).left()); + QCOMPARE(nRight, layout.margins(QPageLayout::Didot).right()); + QCOMPARE(nTop, layout.margins(QPageLayout::Didot).top()); + QCOMPARE(nBottom, layout.margins(QPageLayout::Didot).bottom()); obj1.getPageMargins(&nLeft, &nTop, &nRight, &nBottom, QPrinter::Cicero); - QVERIFY(fabs(left*toMillimeters[unit] - nLeft*toMillimeters[QPrinter::Cicero]) < tolerance); - QVERIFY(fabs(top*toMillimeters[unit] - nTop*toMillimeters[QPrinter::Cicero]) < tolerance); - QVERIFY(fabs(right*toMillimeters[unit] - nRight*toMillimeters[QPrinter::Cicero]) < tolerance); - QVERIFY(fabs(bottom*toMillimeters[unit] - nBottom*toMillimeters[QPrinter::Cicero]) < tolerance); + QCOMPARE(nLeft, layout.margins(QPageLayout::Cicero).left()); + QCOMPARE(nRight, layout.margins(QPageLayout::Cicero).right()); + QCOMPARE(nTop, layout.margins(QPageLayout::Cicero).top()); + QCOMPARE(nBottom, layout.margins(QPageLayout::Cicero).bottom()); } void tst_QPrinter::errorReporting() @@ -586,13 +530,6 @@ void tst_QPrinter::errorReporting() painter.end(); } -static QByteArray msgSizeMismatch(const QSizeF &actual, const QSizeF &expected) -{ - QString result; - QDebug(&result) << "Paper size mismatch" << actual << "!=" << expected; - return result.toLocal8Bit(); -} - void tst_QPrinter::testCustomPageSizes() { QPrinter p; @@ -601,16 +538,14 @@ void tst_QPrinter::testCustomPageSizes() p.setPaperSize(customSize, QPrinter::Inch); QSizeF paperSize = p.paperSize(QPrinter::Inch); - // Due to the different calculations, the sizes may be off by a fraction so we have to check it manually - // instead of relying on QSizeF comparison - QVERIFY2(sqrt(pow(paperSize.width() - customSize.width(), 2.0) + pow(paperSize.height() - customSize.height(), 2.0)) < 0.01, - msgSizeMismatch(paperSize, customSize)); + QCOMPARE(paperSize.width(), customSize.width()); + QCOMPARE(paperSize.height(), customSize.height()); QPrinter p2(QPrinter::HighResolution); p2.setPaperSize(customSize, QPrinter::Inch); paperSize = p.paperSize(QPrinter::Inch); - QVERIFY2(sqrt(pow(paperSize.width() - customSize.width(), 2.0) + pow(paperSize.height() - customSize.height(), 2.0)) < 0.01, - msgSizeMismatch(paperSize, customSize)); + QCOMPARE(paperSize.width(), customSize.width()); + QCOMPARE(paperSize.height(), customSize.height()); } void tst_QPrinter::customPaperSizeAndMargins_data() @@ -622,10 +557,11 @@ void tst_QPrinter::customPaperSizeAndMargins_data() QTest::addColumn<qreal>("right"); QTest::addColumn<qreal>("bottom"); - QTest::newRow("beforeNoPDF") << false << true << qreal(2) << qreal(2) << qreal(2) << qreal(2); - QTest::newRow("beforePDF") << true << true << qreal(2) << qreal(2) << qreal(2) << qreal(2); - QTest::newRow("afterNoPDF") << false << false << qreal(2) << qreal(2) << qreal(2) << qreal(2); - QTest::newRow("afterAfterPDF") << true << false << qreal(2) << qreal(2) << qreal(2) << qreal(2); + // Use custom margins that will exceed most printers minimum allowed + QTest::newRow("beforeNoPDF") << false << true << qreal(30) << qreal(30) << qreal(30) << qreal(30); + QTest::newRow("beforePDF") << true << true << qreal(30) << qreal(30) << qreal(30) << qreal(30); + QTest::newRow("afterNoPDF") << false << false << qreal(30) << qreal(30) << qreal(30) << qreal(30); + QTest::newRow("afterAfterPDF") << true << false << qreal(30) << qreal(30) << qreal(30) << qreal(30); } void tst_QPrinter::customPaperSizeAndMargins() @@ -642,7 +578,9 @@ void tst_QPrinter::customPaperSizeAndMargins() qreal getRight = 0; qreal getTop = 0; qreal getBottom = 0; - QSizeF customSize(8.5, 11.0); + // Use a custom page size that most printers should support, A4 is 210x297 + // TODO Use print device api when available + QSizeF customSize(200.0, 300.0); QPrinter p; if (pdf) @@ -657,10 +595,6 @@ void tst_QPrinter::customPaperSizeAndMargins() QVERIFY(fabs(left - getRight) < tolerance); QVERIFY(fabs(left - getBottom) < tolerance); } else { - QVERIFY(getLeft == 0); - QVERIFY(getTop == 0); - QVERIFY(getRight == 0); - QVERIFY(getBottom == 0); p.setPageMargins(left, top, right, bottom, QPrinter::Millimeter); p.getPageMargins(&getLeft, &getTop, &getRight, &getBottom, QPrinter::Millimeter); QVERIFY(fabs(left - getLeft) < tolerance); @@ -781,100 +715,62 @@ void tst_QPrinter::testPdfTitle() QVERIFY(file.readAll().contains(QByteArray(expected, 26))); } -void tst_QPrinter::testPageMetrics_data() -{ - QTest::addColumn<int>("pageSize"); - QTest::addColumn<int>("widthMM"); - QTest::addColumn<int>("heightMM"); - QTest::addColumn<float>("widthMMf"); - QTest::addColumn<float>("heightMMf"); - - QTest::newRow("A4") << int(QPrinter::A4) << 210 << 297 << 210.0f << 297.0f; - QTest::newRow("A5") << int(QPrinter::A5) << 148 << 210 << 148.0f << 210.0f; - QTest::newRow("Letter") << int(QPrinter::Letter) << 216 << 279 << 215.9f << 279.4f; -} - -void tst_QPrinter::testPageMetrics() -{ - QFETCH(int, pageSize); - QFETCH(int, widthMM); - QFETCH(int, heightMM); - QFETCH(float, widthMMf); - QFETCH(float, heightMMf); - - QPrinter printer(QPrinter::HighResolution); - printer.setFullPage(true); - printer.setPageSize(QPrinter::PageSize(pageSize)); - - if (printer.pageSize() != pageSize) { - QSKIP("Current page size is not supported on this printer"); - return; - } - - QCOMPARE(printer.widthMM(), int(widthMM)); - QCOMPARE(printer.heightMM(), int(heightMM)); - QCOMPARE(printer.pageSizeMM(), QSizeF(widthMMf, heightMMf)); -} - void tst_QPrinter::customPaperNameSettingBySize() { -#ifndef Q_OS_WIN - QSKIP("Currently this triggers a problem on non Windows platforms, this will be fixed separately - QTBUG-34521"); -#endif QPrinter printer(QPrinter::HighResolution); QPrinterInfo info(printer); - QList<QPair<QString, QSizeF> > sizes = info.supportedSizesWithNames(); + QList<QPageSize> sizes = info.supportedPageSizes(); if (sizes.size() == 0) QSKIP("No printers installed on this machine"); for (int i=0; i<sizes.size(); i++) { - printer.setPaperSize(sizes.at(i).second, QPrinter::Millimeter); - QCOMPARE(sizes.at(i).second, printer.paperSize(QPrinter::Millimeter)); + printer.setPaperSize(sizes.at(i).size(QPageSize::Millimeter), QPrinter::Millimeter); + QCOMPARE(sizes.at(i).size(QPageSize::Millimeter), printer.paperSize(QPrinter::Millimeter)); // Some printers have the same size under different names which can cause a problem for the test - // So we iterate up to the current position to check - QSizeF paperSize = sizes.at(i).second; + // So we look at all the other sizes to see if one also matches as we don't know which order they are in + QSizeF paperSize = sizes.at(i).size(QPageSize::Millimeter); QString paperName = printer.paperName(); - bool paperNameFound = (sizes.at(i).first == paperName); + bool paperNameFound = (sizes.at(i).name() == paperName); if (!paperNameFound) { - for (int j=0; j<i; j++) { - if (sizes.at(j).second == paperSize && sizes.at(j).first == paperName) { + for (int j = 0; j < sizes.size(); ++j) { + if (j != i + && sizes.at(j).size(QPageSize::Millimeter) == paperSize + && sizes.at(j).name() == paperName) { paperNameFound = true; break; } } } // Fail with the original values - if (!paperNameFound) - QCOMPARE(sizes.at(i).first, printer.paperName()); + if (!paperNameFound) { + qDebug() << "supportedPageSizes() = " << sizes; + QEXPECT_FAIL("", "Paper Name mismatch: please report this failure at bugreports.qt-project.org", Continue); + QCOMPARE(sizes.at(i).name(), printer.paperName()); + } } // Check setting a custom size after setting a standard one works - QSizeF customSize(200, 200); + QSizeF customSize(200, 300); printer.setPaperSize(customSize, QPrinter::Millimeter); QCOMPARE(printer.paperSize(QPrinter::Millimeter), customSize); QCOMPARE(printer.paperSize(), QPrinter::Custom); // Finally check setting a standard size after a custom one works - printer.setPaperSize(sizes.at(0).second, QPrinter::Millimeter); - QCOMPARE(printer.paperName(), sizes.at(0).first); - QCOMPARE(printer.paperSize(QPrinter::Millimeter), sizes.at(0).second); + printer.setPaperSize(sizes.at(0).size(QPageSize::Millimeter), QPrinter::Millimeter); + QCOMPARE(printer.paperName(), sizes.at(0).name()); + QCOMPARE(printer.paperSize(QPrinter::Millimeter), sizes.at(0).size(QPageSize::Millimeter)); } void tst_QPrinter::customPaperNameSettingByName() { -#ifndef Q_OS_WIN - QSKIP("Currently this triggers a problem on non Windows platforms, this will be fixed separately - QTBUG-34521"); -#endif QPrinter printer(QPrinter::HighResolution); QPrinterInfo info(printer); - QList<QPair<QString, QSizeF> > sizes = info.supportedSizesWithNames(); + QList<QPageSize> sizes = info.supportedPageSizes(); if (sizes.size() == 0) QSKIP("No printers installed on this machine"); for (int i=0; i<sizes.size(); i++) { - printer.setPaperName(sizes.at(i).first); - QCOMPARE(sizes.at(i).first, printer.paperName()); - QSizeF paperSize = printer.paperSize(QPrinter::Millimeter); - QVERIFY2(sqrt(pow(sizes.at(i).second.width() - paperSize.width(), 2.0) + pow(sizes.at(i).second.height() - paperSize.height(), 2.0)) < 0.01, - msgSizeMismatch(sizes.at(i).second, paperSize)); + printer.setPaperName(sizes.at(i).name()); + QCOMPARE(sizes.at(i).name(), printer.paperName()); + QCOMPARE(sizes.at(i).size(QPageSize::Millimeter), printer.paperSize(QPrinter::Millimeter)); } } @@ -1794,43 +1690,46 @@ void tst_QPrinter::supportedResolutions() void tst_QPrinter::windowsPageSize() { // winPageSize() / setWinPageSize() / PPK_WindowsPageSize - // PdfFormat: ifdef'd out TODO remove ifdef - // NativeFormat, Cups: ifdef'd out TODO remove ifdef + // PdfFormat: Supported, defaults to printer default + // NativeFormat, Cups: Supported, defaults to printer default // NativeFormat, Win: Supported, defaults to printer default - // NativeFormat, Mac: ifdef'd out TODO remove ifdef + // NativeFormat, Mac: Supported, defaults to printer default + + QPrinter pdf; + pdf.setOutputFormat(QPrinter::PdfFormat); + QCOMPARE(pdf.winPageSize(), 9); // DMPAPER_A4 + pdf.setWinPageSize(1); // DMPAPER_LETTER + QCOMPARE(pdf.winPageSize(), 1); -#ifdef Q_OS_WIN QPrinter native; if (native.outputFormat() == QPrinter::NativeFormat) { // Test set/get native.setPaperSize(QPrinter::A4); QCOMPARE(native.pageSize(), QPrinter::A4); - QCOMPARE(native.winPageSize(), DMPAPER_A4); + QCOMPARE(native.winPageSize(), 9); // DMPAPER_A4 native.setPaperSize(QPrinter::Letter); QCOMPARE(native.pageSize(), QPrinter::Letter); - QCOMPARE(native.winPageSize(), DMPAPER_LETTER); + QCOMPARE(native.winPageSize(), 1); // DMPAPER_LETTER - native.setWinPageSize(DMPAPER_A4); + native.setWinPageSize(9); // DMPAPER_A4 QCOMPARE(native.pageSize(), QPrinter::A4); - QCOMPARE(native.winPageSize(), DMPAPER_A4); + QCOMPARE(native.winPageSize(), 9); // DMPAPER_A4 - native.setWinPageSize(DMPAPER_LETTER); + native.setWinPageSize(1); // DMPAPER_LETTER QCOMPARE(native.pageSize(), QPrinter::Letter); - QCOMPARE(native.winPageSize(), DMPAPER_LETTER); + QCOMPARE(native.winPageSize(), 1); // DMPAPER_LETTER // Test value preservation native.setOutputFormat(QPrinter::PdfFormat); QCOMPARE(native.pageSize(), QPrinter::Letter); - QEXPECT_FAIL("", "Win paper size doesn't persist over format change", Continue); - QCOMPARE(native.winPageSize(), DMPAPER_LETTER); + QCOMPARE(native.winPageSize(), 1); // DMPAPER_LETTER native.setOutputFormat(QPrinter::NativeFormat); QCOMPARE(native.pageSize(), QPrinter::Letter); - QCOMPARE(native.winPageSize(), DMPAPER_LETTER); + QCOMPARE(native.winPageSize(), 1); // DMPAPER_LETTER } else { QSKIP("No printers installed, cannot test NativeFormat, please install printers to test"); } -#endif // Q_OS_WIN } // Test QPrinter setters/getters for non-QPrintEngine options @@ -1861,6 +1760,191 @@ void tst_QPrinter::fromToPage() QCOMPARE(printer.toPage(), 7); } +void tst_QPrinter::testPageMetrics_data() +{ + QTest::addColumn<int>("outputFormat"); + 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("PDF A4") << int(QPrinter::PdfFormat) << int(QPrinter::A4) << 210.0 << 297.0 << false << 0.0 << 0.0 << 0.0 << 0.0; + QTest::newRow("PDF A4 Margins") << int(QPrinter::PdfFormat) << int(QPrinter::A4) << 210.0 << 297.0 << true << 20.0 << 30.0 << 40.0 << 50.0; + QTest::newRow("Native A4") << int(QPrinter::NativeFormat) << int(QPrinter::A4) << 210.0 << 297.0 << false << 0.0 << 0.0 << 0.0 << 0.0; + QTest::newRow("Native A4 Margins") << int(QPrinter::NativeFormat) << int(QPrinter::A4) << 210.0 << 297.0 << true << 20.0 << 30.0 << 40.0 << 50.0; + + QTest::newRow("PDF Portrait") << int(QPrinter::PdfFormat) << -1 << 200.0 << 300.0 << false << 0.0 << 0.0 << 0.0 << 0.0; + QTest::newRow("PDF Portrait Margins") << int(QPrinter::PdfFormat) << -1 << 200.0 << 300.0 << true << 20.0 << 30.0 << 40.0 << 50.0; + QTest::newRow("PDF Landscape") << int(QPrinter::PdfFormat) << -1 << 300.0 << 200.0 << false << 0.0 << 0.0 << 0.0 << 0.0; + QTest::newRow("PDF Landscape Margins") << int(QPrinter::PdfFormat) << -1 << 300.0 << 200.0 << true << 20.0 << 30.0 << 40.0 << 50.0; + QTest::newRow("Native Portrait") << int(QPrinter::NativeFormat) << -1 << 200.0 << 300.0 << false << 0.0 << 0.0 << 0.0 << 0.0; + QTest::newRow("Native Portrait Margins") << int(QPrinter::NativeFormat) << -1 << 200.0 << 300.0 << true << 20.0 << 30.0 << 40.0 << 50.0; + QTest::newRow("Native Landscape") << int(QPrinter::NativeFormat) << -1 << 300.0 << 200.0 << false << 0.0 << 0.0 << 0.0 << 0.0; + QTest::newRow("Native Landscape Margins") << int(QPrinter::NativeFormat) << -1 << 300.0 << 200.0 << true << 20.0 << 30.0 << 40.0 << 50.0; +} + +void tst_QPrinter::testPageMetrics() +{ + QFETCH(int, outputFormat); + 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); + + QPrinter printer; + printer.setOutputFormat(QPrinter::OutputFormat(outputFormat)); + if (printer.outputFormat() != QPrinter::OutputFormat(outputFormat)) + QSKIP("Please install a native printer to run this test"); + QCOMPARE(printer.outputFormat(), QPrinter::OutputFormat(outputFormat)); + QCOMPARE(printer.orientation(), QPrinter::Portrait); + + if (setMargins) { + // Setup the given margins + QPrinter::Margins margins; + margins.left = leftMMf; + margins.right = rightMMf; + margins.top = topMMf; + margins.bottom = bottomMMf; + printer.setMargins(margins); + QCOMPARE(printer.margins().left, leftMMf); + QCOMPARE(printer.margins().right, rightMMf); + QCOMPARE(printer.margins().top, topMMf); + QCOMPARE(printer.margins().bottom, bottomMMf); + } + + + // Set the given size, in Portrait mode + if (pageSize < 0) { + printer.setPageSizeMM(sizeMMf); + QCOMPARE(printer.pageSize(), QPrinter::Custom); + } else { + printer.setPageSize(QPrinter::PageSize(pageSize)); + QCOMPARE(printer.pageSize(), QPrinter::PageSize(pageSize)); + } + QCOMPARE(printer.orientation(), QPrinter::Portrait); + if (setMargins) { + // Check margins unchanged from page size change + QCOMPARE(printer.margins().left, leftMMf); + QCOMPARE(printer.margins().right, rightMMf); + QCOMPARE(printer.margins().top, topMMf); + QCOMPARE(printer.margins().bottom, bottomMMf); + } else { + // Fetch the default margins for the printer and page size + // TODO Check against margins from print device when api added + leftMMf = printer.margins().left; + rightMMf = printer.margins().right; + topMMf = printer.margins().top; + bottomMMf = printer.margins().bottom; + } + + // QPagedPaintDevice::pageSizeMM() always returns Portrait + QCOMPARE(printer.pageSizeMM(), sizeMMf); + + // QPrinter::paperSize() always returns set orientation + QCOMPARE(printer.paperSize(QPrinter::Millimeter), sizeMMf); + + // QPagedPaintDevice::widthMM() and heightMM() are paint metrics and always return set orientation + QCOMPARE(printer.widthMM(), qRound(widthMMf - leftMMf - rightMMf)); + QCOMPARE(printer.heightMM(), qRound(heightMMf - topMMf - bottomMMf)); + + // QPrinter::paperRect() always returns set orientation + QCOMPARE(printer.paperRect(QPrinter::Millimeter), QRectF(0, 0, widthMMf, heightMMf)); + + // QPrinter::pageRect() always returns set orientation + QCOMPARE(printer.pageRect(QPrinter::Millimeter), QRectF(leftMMf, topMMf, widthMMf - leftMMf - rightMMf, heightMMf - topMMf - bottomMMf)); + + + // Now switch to Landscape mode, size should be unchanged, but rect and metrics should change + printer.setOrientation(QPrinter::Landscape); + if (pageSize < 0) { + QCOMPARE(printer.pageSize(), QPrinter::Custom); + } else { + QCOMPARE(printer.pageSize(), QPrinter::PageSize(pageSize)); + } + QCOMPARE(printer.orientation(), QPrinter::Landscape); + if (setMargins) { + // Check margins unchanged from page size change + QCOMPARE(printer.margins().left, leftMMf); + QCOMPARE(printer.margins().right, rightMMf); + QCOMPARE(printer.margins().top, topMMf); + QCOMPARE(printer.margins().bottom, bottomMMf); + } else { + // Fetch the default margins for the printer and page size + // TODO Check against margins from print device when api added + leftMMf = printer.margins().left; + rightMMf = printer.margins().right; + topMMf = printer.margins().top; + bottomMMf = printer.margins().bottom; + } + + // QPagedPaintDevice::pageSizeMM() always returns Portrait + QCOMPARE(printer.pageSizeMM(), sizeMMf); + + // QPrinter::paperSize() always returns set orientation + QCOMPARE(printer.paperSize(QPrinter::Millimeter), sizeMMf.transposed()); + + // QPagedPaintDevice::widthMM() and heightMM() are paint metrics and always return set orientation + QCOMPARE(printer.widthMM(), qRound(heightMMf - leftMMf - rightMMf)); + QCOMPARE(printer.heightMM(), qRound(widthMMf - topMMf - bottomMMf)); + + // QPrinter::paperRect() always returns set orientation + QCOMPARE(printer.paperRect(QPrinter::Millimeter), QRectF(0, 0, heightMMf, widthMMf)); + + // QPrinter::pageRect() always returns set orientation + QCOMPARE(printer.pageRect(QPrinter::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) { + printer.setPageSizeMM(sizeMMf); + QCOMPARE(printer.pageSize(), QPrinter::Custom); + } else { + printer.setPageSize(QPrinter::PageSize(pageSize)); + QCOMPARE(printer.pageSize(), QPrinter::PageSize(pageSize)); + } + QCOMPARE(printer.orientation(), QPrinter::Landscape); + if (setMargins) { + // Check margins unchanged from page size change + QCOMPARE(printer.margins().left, leftMMf); + QCOMPARE(printer.margins().right, rightMMf); + QCOMPARE(printer.margins().top, topMMf); + QCOMPARE(printer.margins().bottom, bottomMMf); + } else { + // Fetch the default margins for the printer and page size + // TODO Check against margins from print device when api added + leftMMf = printer.margins().left; + rightMMf = printer.margins().right; + topMMf = printer.margins().top; + bottomMMf = printer.margins().bottom; + } + + // QPagedPaintDevice::pageSizeMM() always returns Portrait + QCOMPARE(printer.pageSizeMM(), sizeMMf); + + // QPrinter::paperSize() always returns set orientation + QCOMPARE(printer.paperSize(QPrinter::Millimeter), sizeMMf.transposed()); + + // QPagedPaintDevice::widthMM() and heightMM() are paint metrics and always return set orientation + QCOMPARE(printer.widthMM(), qRound(heightMMf - leftMMf - rightMMf)); + QCOMPARE(printer.heightMM(), qRound(widthMMf - topMMf - bottomMMf)); + + // QPrinter::paperRect() always returns set orientation + QCOMPARE(printer.paperRect(QPrinter::Millimeter), QRectF(0, 0, heightMMf, widthMMf)); + + // QPrinter::pageRect() always returns set orientation + QCOMPARE(printer.pageRect(QPrinter::Millimeter), QRectF(leftMMf, topMMf, heightMMf - leftMMf - rightMMf, widthMMf - topMMf - bottomMMf)); +} + #endif // QT_NO_PRINTER QTEST_MAIN(tst_QPrinter) diff --git a/tests/auto/printsupport/kernel/qprinterinfo/tst_qprinterinfo.cpp b/tests/auto/printsupport/kernel/qprinterinfo/tst_qprinterinfo.cpp index fb2609b7ec..294c90fdd3 100644 --- a/tests/auto/printsupport/kernel/qprinterinfo/tst_qprinterinfo.cpp +++ b/tests/auto/printsupport/kernel/qprinterinfo/tst_qprinterinfo.cpp @@ -267,8 +267,14 @@ void tst_QPrinterInfo::testForPaperSizes() // In the meantime just exercise the code path and print-out for inspection. QList<QPrinterInfo> printers = QPrinterInfo::availablePrinters(); - for (int i = 0; i < printers.size(); ++i) - qDebug() << "Printer: " << printers.at(i).printerName() << " Paper Sizes: " << printers.at(i).supportedPaperSizes(); + for (int i = 0; i < printers.size(); ++i) { + qDebug() << "Printer : " << printers.at(i).printerName() << printers.at(i).defaultPageSize(); + qDebug() << "Paper Sizes : " << printers.at(i).supportedPageSizes(); + qDebug() << "Custom Sizes : " << printers.at(i).supportsCustomPageSizes(); + qDebug() << "Physical Sizes: " << printers.at(i).minimumPhysicalPageSize() + << printers.at(i).maximumPhysicalPageSize(); + qDebug() << ""; + } } void tst_QPrinterInfo::testConstructors() @@ -284,17 +290,41 @@ void tst_QPrinterInfo::testConstructors() for (int i = 0; i < printers.size(); ++i) { QPrinterInfo copy1(printers.at(i)); - QCOMPARE(copy1.printerName(), printers.at(i).printerName()); - QCOMPARE(copy1.isNull(), printers.at(i).isNull()); - QCOMPARE(copy1.isDefault(), printers.at(i).isDefault()); - QCOMPARE(copy1.supportedPaperSizes(), printers.at(i).supportedPaperSizes()); + QCOMPARE(copy1.printerName(), printers.at(i).printerName()); + QCOMPARE(copy1.description(), printers.at(i).description()); + QCOMPARE(copy1.location(), printers.at(i).location()); + QCOMPARE(copy1.makeAndModel(), printers.at(i).makeAndModel()); + QCOMPARE(copy1.isNull(), printers.at(i).isNull()); + QCOMPARE(copy1.isDefault(), printers.at(i).isDefault()); + QCOMPARE(copy1.isRemote(), printers.at(i).isRemote()); + QCOMPARE(copy1.state(), printers.at(i).state()); + QCOMPARE(copy1.supportedPageSizes(), printers.at(i).supportedPageSizes()); + QCOMPARE(copy1.defaultPageSize(), printers.at(i).defaultPageSize()); + QCOMPARE(copy1.supportsCustomPageSizes(), printers.at(i).supportsCustomPageSizes()); + QCOMPARE(copy1.minimumPhysicalPageSize(), printers.at(i).minimumPhysicalPageSize()); + QCOMPARE(copy1.maximumPhysicalPageSize(), printers.at(i).maximumPhysicalPageSize()); + QCOMPARE(copy1.supportedPaperSizes(), printers.at(i).supportedPaperSizes()); + QCOMPARE(copy1.supportedSizesWithNames(), printers.at(i).supportedSizesWithNames()); + QCOMPARE(copy1.supportedResolutions(), printers.at(i).supportedResolutions()); QPrinter printer(printers.at(i)); QPrinterInfo copy2(printer); - QCOMPARE(copy2.printerName(), printers.at(i).printerName()); - QCOMPARE(copy2.isNull(), printers.at(i).isNull()); - QCOMPARE(copy2.isDefault(), printers.at(i).isDefault()); - QCOMPARE(copy2.supportedPaperSizes(), printers.at(i).supportedPaperSizes()); + QCOMPARE(copy2.printerName(), printers.at(i).printerName()); + QCOMPARE(copy2.description(), printers.at(i).description()); + QCOMPARE(copy2.location(), printers.at(i).location()); + QCOMPARE(copy2.makeAndModel(), printers.at(i).makeAndModel()); + QCOMPARE(copy2.isNull(), printers.at(i).isNull()); + QCOMPARE(copy2.isDefault(), printers.at(i).isDefault()); + QCOMPARE(copy2.isRemote(), printers.at(i).isRemote()); + QCOMPARE(copy2.state(), printers.at(i).state()); + QCOMPARE(copy2.supportedPageSizes(), printers.at(i).supportedPageSizes()); + QCOMPARE(copy2.defaultPageSize(), printers.at(i).defaultPageSize()); + QCOMPARE(copy2.supportsCustomPageSizes(), printers.at(i).supportsCustomPageSizes()); + QCOMPARE(copy2.minimumPhysicalPageSize(), printers.at(i).minimumPhysicalPageSize()); + QCOMPARE(copy2.maximumPhysicalPageSize(), printers.at(i).maximumPhysicalPageSize()); + QCOMPARE(copy2.supportedPaperSizes(), printers.at(i).supportedPaperSizes()); + QCOMPARE(copy2.supportedSizesWithNames(), printers.at(i).supportedSizesWithNames()); + QCOMPARE(copy2.supportedResolutions(), printers.at(i).supportedResolutions()); } } @@ -311,13 +341,20 @@ void tst_QPrinterInfo::testAssignment() for (int i = 0; i < printers.size(); ++i) { QPrinterInfo copy; copy = printers.at(i); - QCOMPARE(copy.printerName(), printers.at(i).printerName()); - QCOMPARE(copy.isNull(), printers.at(i).isNull()); - QCOMPARE(copy.isDefault(), printers.at(i).isDefault()); - QCOMPARE(copy.description(), printers.at(i).description()); - QCOMPARE(copy.location(), printers.at(i).location()); - QCOMPARE(copy.makeAndModel(), printers.at(i).makeAndModel()); - QCOMPARE(copy.supportedPaperSizes(), printers.at(i).supportedPaperSizes()); + QCOMPARE(copy.printerName(), printers.at(i).printerName()); + QCOMPARE(copy.description(), printers.at(i).description()); + QCOMPARE(copy.location(), printers.at(i).location()); + QCOMPARE(copy.makeAndModel(), printers.at(i).makeAndModel()); + QCOMPARE(copy.isNull(), printers.at(i).isNull()); + QCOMPARE(copy.isDefault(), printers.at(i).isDefault()); + QCOMPARE(copy.isRemote(), printers.at(i).isRemote()); + QCOMPARE(copy.state(), printers.at(i).state()); + QCOMPARE(copy.supportedPageSizes(), printers.at(i).supportedPageSizes()); + QCOMPARE(copy.defaultPageSize(), printers.at(i).defaultPageSize()); + QCOMPARE(copy.supportsCustomPageSizes(), printers.at(i).supportsCustomPageSizes()); + QCOMPARE(copy.minimumPhysicalPageSize(), printers.at(i).minimumPhysicalPageSize()); + QCOMPARE(copy.maximumPhysicalPageSize(), printers.at(i).maximumPhysicalPageSize()); + QCOMPARE(copy.supportedResolutions(), printers.at(i).supportedResolutions()); } } @@ -329,16 +366,19 @@ void tst_QPrinterInfo::namedPrinter() foreach (const QPrinterInfo &pi, printers) { QPrinterInfo pi2 = QPrinterInfo::printerInfo(pi.printerName()); - qDebug() << "Printer: " << pi2.printerName() << " : " << pi2.description() << " : " - << pi2.location() << " : " << pi2.makeAndModel() << " : " - << pi2.isNull() << " : " << pi2.isDefault(); - QCOMPARE(pi2.printerName(), pi.printerName()); - QCOMPARE(pi2.description(), pi.description()); - QCOMPARE(pi2.location(), pi.location()); - QCOMPARE(pi2.makeAndModel(), pi.makeAndModel()); - QCOMPARE(pi2.supportedPaperSizes(), pi.supportedPaperSizes()); - QCOMPARE(pi2.isNull(), pi.isNull()); - QCOMPARE(pi2.isDefault(), pi.isDefault()); + QCOMPARE(pi2.printerName(), pi.printerName()); + QCOMPARE(pi2.description(), pi.description()); + QCOMPARE(pi2.location(), pi.location()); + QCOMPARE(pi2.makeAndModel(), pi.makeAndModel()); + QCOMPARE(pi2.isNull(), pi.isNull()); + QCOMPARE(pi2.isDefault(), pi.isDefault()); + QCOMPARE(pi2.isRemote(), pi.isRemote()); + QCOMPARE(pi2.supportedPageSizes(), pi.supportedPageSizes()); + QCOMPARE(pi2.defaultPageSize(), pi.defaultPageSize()); + QCOMPARE(pi2.supportsCustomPageSizes(), pi.supportsCustomPageSizes()); + QCOMPARE(pi2.minimumPhysicalPageSize(), pi.minimumPhysicalPageSize()); + QCOMPARE(pi2.maximumPhysicalPageSize(), pi.maximumPhysicalPageSize()); + QCOMPARE(pi2.supportedResolutions(), pi.supportedResolutions()); } } #endif // QT_NO_PRINTER diff --git a/tests/manual/qprintdevice_dump/main.cpp b/tests/manual/qprintdevice_dump/main.cpp new file mode 100644 index 0000000000..930c851d65 --- /dev/null +++ b/tests/manual/qprintdevice_dump/main.cpp @@ -0,0 +1,181 @@ +/**************************************************************************** +** +** Copyright (C) 2014 John Layt <jlayt@kde.org> +** 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 <qpa/qplatformprintplugin.h> +#include <qpa/qplatformprintersupport.h> + +#include <private/qprintdevice_p.h> + +#include <QApplication> +#include <QMimeType> +#include <QDebug> + +/* + This test is designed to dump the current printer configuration details + to output, to assist in debugging of print device problems. +*/ + +static QString stateToString(QPrint::DeviceState state) +{ + switch (state) { + case QPrint::Idle: + return QStringLiteral("Idle"); + case QPrint::Active: + return QStringLiteral("Active"); + case QPrint::Aborted: + return QStringLiteral("Aborted"); + case QPrint::Error: + return QStringLiteral("Error"); + } + return QStringLiteral("Invalid DeviceState"); +} + +static QString duplexToString(QPrint::DuplexMode duplex) +{ + switch (duplex) { + case QPrint::DuplexNone: + return QStringLiteral("DuplexNone"); + case QPrint::DuplexAuto: + return QStringLiteral("DuplexAuto"); + case QPrint::DuplexLongSide: + return QStringLiteral("DuplexLongSide"); + case QPrint::DuplexShortSide: + return QStringLiteral("DuplexShortSide"); + } + return QStringLiteral("Invalid DuplexMode"); +} + +static QString colorToString(QPrint::ColorMode color) +{ + switch (color) { + case QPrint::GrayScale: + return QStringLiteral("GrayScale"); + case QPrint::Color: + return QStringLiteral("Color"); + } + return QStringLiteral("Invalid ColorMode"); +} + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + + qDebug() << "\n********************************"; + qDebug() << "***** QPrintDevice Details *****"; + qDebug() << "********************************\n"; + + QPlatformPrinterSupport *ps = QPlatformPrinterSupportPlugin::get(); + if (!ps) { + qDebug() << "Could not load platform plugin!"; + return -1; + } + + QString defaultId = ps->defaultPrintDeviceId(); + if (defaultId.isEmpty()) + qDebug() << "No default printer found"; + else + qDebug() << "Default Printer ID :" << defaultId; + qDebug() << "Available Printer IDs :" << ps->availablePrintDeviceIds() << "\n"; + + foreach (const QString id, ps->availablePrintDeviceIds()) { + QPrintDevice printDevice = ps->createPrintDevice(id); + if (printDevice.isValid()) { + qDebug() << "===" << printDevice.id() << "===\n"; + qDebug() << "Device ID :" << printDevice.id(); + qDebug() << "Device Name :" << printDevice.name(); + qDebug() << "Device Location :" << printDevice.location(); + qDebug() << "Device Make :" << printDevice.makeAndModel(); + qDebug() << ""; + qDebug() << "isValid :" << printDevice.isValid(); + qDebug() << "isDefault :" << printDevice.isDefault(); + qDebug() << "isRemote :" << printDevice.isRemote(); + qDebug() << ""; + qDebug() << "state :" << stateToString(printDevice.state()); + qDebug() << ""; + qDebug() << "supportsMultipleCopies :" << printDevice.supportsMultipleCopies(); + qDebug() << "supportsCollateCopies :" << printDevice.supportsCollateCopies(); + qDebug() << ""; + qDebug() << "defaultPageSize :" << printDevice.defaultPageSize(); + qDebug() << "supportedPageSizes :"; + foreach (const QPageSize &page, printDevice.supportedPageSizes()) + qDebug() << " " << page << printDevice.printableMargins(page, QPageLayout::Portrait, 300); + qDebug() << ""; + qDebug() << "supportsCustomPageSizes :" << printDevice.supportsCustomPageSizes(); + qDebug() << ""; + qDebug() << "minimumPhysicalPageSize :" << printDevice.minimumPhysicalPageSize(); + qDebug() << "maximumPhysicalPageSize :" << printDevice.maximumPhysicalPageSize(); + qDebug() << ""; + qDebug() << "defaultResolution :" << printDevice.defaultResolution(); + qDebug() << "supportedResolutions :" << printDevice.supportedResolutions(); + qDebug() << ""; + qDebug() << "defaultInputSlot :" << printDevice.defaultInputSlot().key + << printDevice.defaultInputSlot().name + << printDevice.defaultInputSlot().id; + qDebug() << "supportedInputSlots :"; + foreach (const QPrint::InputSlot &slot, printDevice.supportedInputSlots()) + qDebug() << " " << slot.key << slot.name << slot.id; + qDebug() << ""; + qDebug() << "defaultOutputBin :" << printDevice.defaultOutputBin().key + << printDevice.defaultOutputBin().name + << printDevice.defaultOutputBin().id; + qDebug() << "supportedOutputBins :"; + foreach (const QPrint::OutputBin &bin, printDevice.supportedOutputBins()) + qDebug() << " " << bin.key << bin.name << bin.id; + qDebug() << ""; + qDebug() << "defaultDuplexMode :" << duplexToString(printDevice.defaultDuplexMode()); + qDebug() << "supportedDuplexModes :"; + foreach (QPrint::DuplexMode mode, printDevice.supportedDuplexModes()) + qDebug() << " " << duplexToString(mode); + qDebug() << ""; + qDebug() << "defaultColorMode :" << colorToString(printDevice.defaultColorMode()); + qDebug() << "supportedColorModes :"; + foreach (QPrint::ColorMode mode, printDevice.supportedColorModes()) + qDebug() << " " << colorToString(mode); + qDebug() << ""; + qDebug() << "supportedMimeTypes :"; + foreach (const QMimeType &type, printDevice.supportedMimeTypes()) + qDebug() << " " << type.name(); + } else { + qDebug() << "Create printer failed" << id; + } + qDebug() << "\n"; + } +} diff --git a/tests/manual/qprintdevice_dump/qprintdevice_dump.pro b/tests/manual/qprintdevice_dump/qprintdevice_dump.pro new file mode 100644 index 0000000000..c9d36d1d1f --- /dev/null +++ b/tests/manual/qprintdevice_dump/qprintdevice_dump.pro @@ -0,0 +1,6 @@ +QT += printsupport-private + +TARGET = qprintdevice_dump +TEMPLATE = app + +SOURCES += main.cpp |