diff options
author | Antti Määttä <antti.maatta@qt.io> | 2016-08-19 15:21:30 +0300 |
---|---|---|
committer | Antti Määttä <antti.maatta@qt.io> | 2016-10-19 05:52:23 +0000 |
commit | 09393747fe20d09d05d355123d7c3abb916709bb (patch) | |
tree | 939f1f7b8de62d469f17dad955bd167e42283896 | |
parent | d0490594ba596a376ea8f5180fff88cd25bff318 (diff) |
Add unit tests for sendrendercapturejob
Unit tests for the job and some changes to backend rendercapture node to
make the unit test work.
Change-Id: I6c73ee20c07b43b9e2c4baf3ac5ea9efa4657024
Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
-rw-r--r-- | src/render/framegraph/rendercapture.cpp | 9 | ||||
-rw-r--r-- | src/render/framegraph/rendercapture_p.h | 3 | ||||
-rw-r--r-- | src/render/jobs/sendrendercapturejob_p.h | 1 | ||||
-rw-r--r-- | tests/auto/render/render.pro | 3 | ||||
-rw-r--r-- | tests/auto/render/sendrendercapturejob/sendrendercapturejob.pro | 11 | ||||
-rw-r--r-- | tests/auto/render/sendrendercapturejob/tst_sendrendercapturejob.cpp | 83 |
6 files changed, 105 insertions, 5 deletions
diff --git a/src/render/framegraph/rendercapture.cpp b/src/render/framegraph/rendercapture.cpp index 250666939..f123fd74c 100644 --- a/src/render/framegraph/rendercapture.cpp +++ b/src/render/framegraph/rendercapture.cpp @@ -50,6 +50,12 @@ RenderCapture::RenderCapture() } +void RenderCapture::requestCapture(int captureId) +{ + QMutexLocker lock(&m_mutex); + m_requestedCaptures.push_back(captureId); +} + bool RenderCapture::wasCaptureRequested() const { return m_requestedCaptures.size() > 0 && isEnabled(); @@ -65,8 +71,7 @@ void RenderCapture::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) if (e->type() == Qt3DCore::PropertyUpdated) { Qt3DCore::QPropertyUpdatedChangePtr propertyChange = qSharedPointerCast<Qt3DCore::QPropertyUpdatedChange>(e); if (propertyChange->propertyName() == QByteArrayLiteral("renderCaptureRequest")) { - QMutexLocker lock(&m_mutex); - m_requestedCaptures.push_back(propertyChange->value().toInt()); + requestCapture(propertyChange->value().toInt()); } } markDirty(AbstractRenderer::AllDirty); diff --git a/src/render/framegraph/rendercapture_p.h b/src/render/framegraph/rendercapture_p.h index 97bdc9d8b..e2b87474c 100644 --- a/src/render/framegraph/rendercapture_p.h +++ b/src/render/framegraph/rendercapture_p.h @@ -57,11 +57,12 @@ namespace Qt3DRender { namespace Render { -class RenderCapture : public FrameGraphNode +class Q_AUTOTEST_EXPORT RenderCapture : public FrameGraphNode { public: RenderCapture(); + void requestCapture(int captureId); bool wasCaptureRequested() const; void acknowledgeCaptureRequest(); void addRenderCapture(const QImage &image); diff --git a/src/render/jobs/sendrendercapturejob_p.h b/src/render/jobs/sendrendercapturejob_p.h index f1e6b65f2..a6a7f7e79 100644 --- a/src/render/jobs/sendrendercapturejob_p.h +++ b/src/render/jobs/sendrendercapturejob_p.h @@ -71,7 +71,6 @@ public: void setManagers(NodeManagers *managers); -protected: void run() Q_DECL_FINAL; private: diff --git a/tests/auto/render/render.pro b/tests/auto/render/render.pro index ded8e3bbc..f26d07411 100644 --- a/tests/auto/render/render.pro +++ b/tests/auto/render/render.pro @@ -64,7 +64,8 @@ qtConfig(private_tests) { graphicshelpergl3_3 \ graphicshelpergl3_2 \ graphicshelpergl2 \ - pickboundingvolumejob + pickboundingvolumejob \ + sendrendercapturejob !macos: SUBDIRS += graphicshelpergl4 } diff --git a/tests/auto/render/sendrendercapturejob/sendrendercapturejob.pro b/tests/auto/render/sendrendercapturejob/sendrendercapturejob.pro new file mode 100644 index 000000000..e667c4978 --- /dev/null +++ b/tests/auto/render/sendrendercapturejob/sendrendercapturejob.pro @@ -0,0 +1,11 @@ +TEMPLATE = app + +TARGET = tst_sendrendercapturejob + +QT += core-private 3dcore 3dcore-private 3drender 3drender-private testlib + +CONFIG += testcase + +SOURCES += tst_sendrendercapturejob.cpp + +include(../commons/commons.pri) diff --git a/tests/auto/render/sendrendercapturejob/tst_sendrendercapturejob.cpp b/tests/auto/render/sendrendercapturejob/tst_sendrendercapturejob.cpp new file mode 100644 index 000000000..3310941ed --- /dev/null +++ b/tests/auto/render/sendrendercapturejob/tst_sendrendercapturejob.cpp @@ -0,0 +1,83 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt3D 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$ +** +****************************************************************************/ + +#include <QtTest/QTest> +#include "Qt3DRender/QRenderAspect" +#include "Qt3DRender/private/renderer_p.h" +#include "Qt3DRender/private/nodemanagers_p.h" +#include "Qt3DRender/private/rendercapture_p.h" +#include <Qt3DRender/private/sendrendercapturejob_p.h> +#include "testpostmanarbiter.h" + +class tst_SendRenderCaptureJob : public QObject +{ + Q_OBJECT +private Q_SLOTS: + void testSendRenderCaptureRequest() + { + // GIVEN + TestArbiter arbiter; + Qt3DRender::Render::RenderCapture *renderCapture = new Qt3DRender::Render::RenderCapture; + Qt3DCore::QBackendNodePrivate::get(renderCapture)->setArbiter(&arbiter); + + QImage image(10, 10, QImage::Format_ARGB32); + + Qt3DRender::Render::Renderer renderer(Qt3DRender::QRenderAspect::Synchronous); + Qt3DRender::Render::SendRenderCaptureJob job(&renderer); + + Qt3DRender::Render::NodeManagers nodeManagers; + nodeManagers.frameGraphManager()->appendNode(renderCapture->peerId(), renderCapture); + renderer.setNodeManagers(&nodeManagers); + job.setManagers(&nodeManagers); + + renderCapture->requestCapture(42); + renderCapture->acknowledgeCaptureRequest(); + renderCapture->addRenderCapture(image); + renderer.addRenderCaptureSendRequest(renderCapture->peerId()); + + //WHEN + job.run(); + + //THEN + QCOMPARE(arbiter.events.count(), 1); + Qt3DCore::QPropertyUpdatedChangePtr change = arbiter.events.first().staticCast<Qt3DCore::QPropertyUpdatedChange>(); + QCOMPARE(change->subjectId(), renderCapture->peerId()); + QCOMPARE(change->propertyName(), "renderCaptureData"); + auto data = change->value().value<Qt3DRender::RenderCaptureDataPtr>(); + QCOMPARE(data.data()->captureId, 42); + QCOMPARE(data.data()->image.width(), 10); + QCOMPARE(data.data()->image.height(), 10); + QCOMPARE(data.data()->image.format(), QImage::Format_ARGB32); + + // renderCapture will be deallocated by the nodeManagers destructor + } +}; + +QTEST_APPLESS_MAIN(tst_SendRenderCaptureJob) + +#include "tst_sendrendercapturejob.moc" |