diff options
Diffstat (limited to 'tests/auto/printsupport/dialogs/qabstractprintdialog/tst_qabstractprintdialog.cpp')
-rw-r--r-- | tests/auto/printsupport/dialogs/qabstractprintdialog/tst_qabstractprintdialog.cpp | 147 |
1 files changed, 94 insertions, 53 deletions
diff --git a/tests/auto/printsupport/dialogs/qabstractprintdialog/tst_qabstractprintdialog.cpp b/tests/auto/printsupport/dialogs/qabstractprintdialog/tst_qabstractprintdialog.cpp index 7f874a843d..c3785efe18 100644 --- a/tests/auto/printsupport/dialogs/qabstractprintdialog/tst_qabstractprintdialog.cpp +++ b/tests/auto/printsupport/dialogs/qabstractprintdialog/tst_qabstractprintdialog.cpp @@ -1,39 +1,14 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** 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 The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - - -#include <QtTest/QtTest> +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only + + +#include <QTest> #include <qcoreapplication.h> #include <qdebug.h> #include <QtPrintSupport/qtprintsupportglobal.h> #if QT_CONFIG(printdialog) -#include <qabstractprintdialog.h> +#include <qprintdialog.h> #include <qprinter.h> #endif @@ -49,6 +24,8 @@ private slots: void getSetCheck(); void setMinMax(); void setFromTo(); + + void hideNativeByDestruction(); #endif }; @@ -60,31 +37,63 @@ void tst_QAbstractPrintDialog::initTestCase() #else -class MyAbstractPrintDialog : public QAbstractPrintDialog +class MyPrintDialog : public QPrintDialog { public: - MyAbstractPrintDialog(QPrinter *p) : QAbstractPrintDialog(p) {} - int exec() { return 0; } + MyPrintDialog(QPrinter *p) + : QPrintDialog(p) + { + } + int exec() override { return 0; } + + void resetAllOptions() + { + setOption(QAbstractPrintDialog::PrintToFile, false); + setOption(QAbstractPrintDialog::PrintSelection, false); + setOption(QAbstractPrintDialog::PrintPageRange, false); + setOption(QAbstractPrintDialog::PrintShowPageSize, false); + setOption(QAbstractPrintDialog::PrintCollateCopies, false); + setOption(QAbstractPrintDialog::PrintCurrentPage, false); + } }; // Testing get/set functions void tst_QAbstractPrintDialog::getSetCheck() { QPrinter printer; - MyAbstractPrintDialog obj1(&printer); + MyPrintDialog obj1(&printer); QCOMPARE(obj1.printer(), &printer); - // PrintDialogOptions QAbstractPrintDialog::enabledOptions() - // void QAbstractPrintDialog::setEnabledOptions(PrintDialogOptions) - obj1.setEnabledOptions(QAbstractPrintDialog::PrintDialogOptions(QAbstractPrintDialog::None)); - QCOMPARE(QAbstractPrintDialog::PrintDialogOptions(QAbstractPrintDialog::None), obj1.enabledOptions()); - obj1.setEnabledOptions(QAbstractPrintDialog::PrintDialogOptions(QAbstractPrintDialog::PrintToFile)); - QCOMPARE(QAbstractPrintDialog::PrintDialogOptions(QAbstractPrintDialog::PrintToFile), obj1.enabledOptions()); - obj1.setEnabledOptions(QAbstractPrintDialog::PrintDialogOptions(QAbstractPrintDialog::PrintSelection)); - QCOMPARE(QAbstractPrintDialog::PrintDialogOptions(QAbstractPrintDialog::PrintSelection), obj1.enabledOptions()); - obj1.setEnabledOptions(QAbstractPrintDialog::PrintDialogOptions(QAbstractPrintDialog::PrintPageRange)); - QCOMPARE(QAbstractPrintDialog::PrintDialogOptions(QAbstractPrintDialog::PrintPageRange), obj1.enabledOptions()); - obj1.setEnabledOptions(QAbstractPrintDialog::PrintDialogOptions(QAbstractPrintDialog::PrintCollateCopies)); - QCOMPARE(QAbstractPrintDialog::PrintDialogOptions(QAbstractPrintDialog::PrintCollateCopies), obj1.enabledOptions()); + + // QPrintDialog::options APIs + QCOMPARE(obj1.options(), QAbstractPrintDialog::PrintToFile + |QAbstractPrintDialog::PrintPageRange + |QAbstractPrintDialog::PrintShowPageSize + |QAbstractPrintDialog::PrintCollateCopies); + obj1.setOptions(QAbstractPrintDialog::PrintSelection + |QAbstractPrintDialog::PrintCurrentPage); + QCOMPARE(obj1.options(), QAbstractPrintDialog::PrintSelection + |QAbstractPrintDialog::PrintCurrentPage); + obj1.resetAllOptions(); + QCOMPARE(obj1.options(), QAbstractPrintDialog::PrintDialogOptions()); + + obj1.setOption(QAbstractPrintDialog::PrintToFile); + QVERIFY(obj1.testOption(QAbstractPrintDialog::PrintToFile)); + QCOMPARE(obj1.options(), QAbstractPrintDialog::PrintToFile); + obj1.setOption(QAbstractPrintDialog::PrintSelection); + QVERIFY(obj1.testOption(QAbstractPrintDialog::PrintSelection)); + QCOMPARE(obj1.options(), QAbstractPrintDialog::PrintToFile + |QAbstractPrintDialog::PrintSelection); + obj1.setOption(QAbstractPrintDialog::PrintPageRange); + QVERIFY(obj1.testOption(QAbstractPrintDialog::PrintPageRange)); + QCOMPARE(obj1.options(), QAbstractPrintDialog::PrintToFile + |QAbstractPrintDialog::PrintSelection + |QAbstractPrintDialog::PrintPageRange); + obj1.setOption(QAbstractPrintDialog::PrintCollateCopies); + QVERIFY(obj1.testOption(QAbstractPrintDialog::PrintCollateCopies)); + QCOMPARE(obj1.options(), QAbstractPrintDialog::PrintToFile + |QAbstractPrintDialog::PrintSelection + |QAbstractPrintDialog::PrintPageRange + |QAbstractPrintDialog::PrintCollateCopies); // PrintRange QAbstractPrintDialog::printRange() // void QAbstractPrintDialog::setPrintRange(PrintRange) @@ -99,22 +108,23 @@ void tst_QAbstractPrintDialog::getSetCheck() void tst_QAbstractPrintDialog::setMinMax() { QPrinter printer; - MyAbstractPrintDialog obj1(&printer); - obj1.setEnabledOptions(QAbstractPrintDialog::PrintDialogOptions(QAbstractPrintDialog::None)); + MyPrintDialog obj1(&printer); + obj1.resetAllOptions(); + QCOMPARE(obj1.minPage(), 0); QCOMPARE(obj1.maxPage(), INT_MAX); - QVERIFY(!obj1.isOptionEnabled(QAbstractPrintDialog::PrintPageRange)); + QVERIFY(!obj1.testOption(QAbstractPrintDialog::PrintPageRange)); obj1.setMinMax(2,5); QCOMPARE(obj1.minPage(), 2); QCOMPARE(obj1.maxPage(), 5); - QVERIFY(obj1.enabledOptions() & QAbstractPrintDialog::PrintPageRange); - QVERIFY(obj1.isOptionEnabled(QAbstractPrintDialog::PrintPageRange)); + QVERIFY(obj1.options() & QAbstractPrintDialog::PrintPageRange); + QVERIFY(obj1.testOption(QAbstractPrintDialog::PrintPageRange)); } void tst_QAbstractPrintDialog::setFromTo() { QPrinter printer; - MyAbstractPrintDialog obj1(&printer); + MyPrintDialog obj1(&printer); QCOMPARE(obj1.fromPage(), 0); QCOMPARE(obj1.toPage(), 0); obj1.setMinMax(0,0); @@ -127,6 +137,37 @@ void tst_QAbstractPrintDialog::setFromTo() QCOMPARE(obj1.maxPage(), 50); } +void tst_QAbstractPrintDialog::hideNativeByDestruction() +{ +#ifdef Q_OS_WINDOWS + QSKIP("This test fails on windows, the QPrintDialog::setVisible implementation blocks"); +#endif + + QWidget window; + QWidget *child = new QWidget(&window); + QPointer<QPrintDialog> dialog = new QPrintDialog(child); + // Make it application modal so that we don't end up with a sheet on macOS + dialog->setWindowModality(Qt::ApplicationModal); + window.show(); + QVERIFY(QTest::qWaitForWindowActive(&window)); + dialog->open(); + + // We test that the dialog opens and closes by watching the activation of the + // transient parent window. If it doesn't deactivate, then we have to skip. + const auto windowActive = [&window]{ return window.isActiveWindow(); }; + const auto windowInactive = [&window]{ return !window.isActiveWindow(); }; + if (!QTest::qWaitFor(windowInactive, 2000)) + QSKIP("Dialog didn't activate"); + + // This should destroy the dialog and close the native window + child->deleteLater(); + QTRY_VERIFY(!dialog); + // If the native window is still open, then the transient parent can't become + // active + window.activateWindow(); + QVERIFY(QTest::qWaitFor(windowActive)); +} + #endif QTEST_MAIN(tst_QAbstractPrintDialog) |