summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAntti Määttä <antti.maatta@qt.io>2016-08-19 15:21:30 +0300
committerAntti Määttä <antti.maatta@qt.io>2016-10-19 05:52:23 +0000
commit09393747fe20d09d05d355123d7c3abb916709bb (patch)
tree939f1f7b8de62d469f17dad955bd167e42283896
parentd0490594ba596a376ea8f5180fff88cd25bff318 (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.cpp9
-rw-r--r--src/render/framegraph/rendercapture_p.h3
-rw-r--r--src/render/jobs/sendrendercapturejob_p.h1
-rw-r--r--tests/auto/render/render.pro3
-rw-r--r--tests/auto/render/sendrendercapturejob/sendrendercapturejob.pro11
-rw-r--r--tests/auto/render/sendrendercapturejob/tst_sendrendercapturejob.cpp83
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"