From 1c7a520edfb850cc34a29d96417c475a373ed355 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BCri=20Valdmann?= Date: Thu, 10 Aug 2017 12:24:27 +0200 Subject: Add test for downloading a link via user action Change-Id: Ide3294840ceb3d18da0c4da92d892ff467a9b739 Reviewed-by: Michal Klocek --- tests/auto/shared/waitforsignal.h | 90 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 tests/auto/shared/waitforsignal.h (limited to 'tests/auto/shared/waitforsignal.h') diff --git a/tests/auto/shared/waitforsignal.h b/tests/auto/shared/waitforsignal.h new file mode 100644 index 000000000..9b2daf7af --- /dev/null +++ b/tests/auto/shared/waitforsignal.h @@ -0,0 +1,90 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the QtWebEngine module 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$ +** +****************************************************************************/ +#ifndef WAITFORSIGNAL_H +#define WAITFORSIGNAL_H + +#include +#include + +#include + +// Implementation details of waitForSignal. +namespace { + // Wraps a functor to set a flag and exit from event loop if called. + template + struct waitForSignal_SignalHandlerWrapper { + waitForSignal_SignalHandlerWrapper(SignalHandler &&sh) + : signalHandler(std::forward(sh)) {} + + template + void operator()(Args && ... args) { + signalHandler(std::forward(args)...); + hasBeenCalled = true; + loop.exitLoop(); + } + + SignalHandler &&signalHandler; + QTestEventLoop loop; + bool hasBeenCalled = false; + }; + + // No-op functor. + struct waitForSignal_DefaultSignalHandler { + template + void operator()(Args && ...) {} + }; +} // namespace + +// Wait for a signal to be emitted. +// +// The given functor is called with the signal arguments allowing the arguments +// to be modified before returning from the signal handler (unlike QSignalSpy). +template +bool waitForSignal(Sender &&sender, Signal &&signal, SignalHandler &&signalHandler, int timeout = 15000) +{ + waitForSignal_SignalHandlerWrapper signalHandlerWrapper( + std::forward(signalHandler)); + auto connection = QObject::connect( + std::forward(sender), + std::forward(signal), + std::ref(signalHandlerWrapper)); + signalHandlerWrapper.loop.enterLoopMSecs(timeout); + QObject::disconnect(connection); + return signalHandlerWrapper.hasBeenCalled; +} + +template +bool waitForSignal(Sender &&sender, Signal &&signal, int timeout = 15000) +{ + return waitForSignal(std::forward(sender), + std::forward(signal), + waitForSignal_DefaultSignalHandler(), + timeout); +} + +#endif // !WAITFORSIGNAL_H -- cgit v1.2.3