diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2015-08-06 11:52:27 +0200 |
---|---|---|
committer | Paul Lemire <paul.lemire@kdab.com> | 2015-08-07 14:32:06 +0000 |
commit | af22d66fcfbb80f1cc4e42948aca29613443f44a (patch) | |
tree | 7093de893e8466155fbde69311a1cc42ea960cd4 /tests | |
parent | 8e6652961adffb888602774c679ee756737a8b40 (diff) |
Update RenderBuffer/QBuffer unit tests
Change-Id: Iadb91977da8927544bd3b90ee512128367d70b84
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/auto/render/qbuffer/tst_qbuffer.cpp | 50 | ||||
-rw-r--r-- | tests/auto/render/renderbuffer/tst_renderbuffer.cpp | 48 |
2 files changed, 96 insertions, 2 deletions
diff --git a/tests/auto/render/qbuffer/tst_qbuffer.cpp b/tests/auto/render/qbuffer/tst_qbuffer.cpp index 3b8a67c63..6ebe841ea 100644 --- a/tests/auto/render/qbuffer/tst_qbuffer.cpp +++ b/tests/auto/render/qbuffer/tst_qbuffer.cpp @@ -42,6 +42,7 @@ #include <Qt3DCore/QScenePropertyChange> #include <Qt3DRenderer/qbuffer.h> +#include <Qt3DRenderer/qbufferfunctor.h> class TestArbiter; @@ -118,6 +119,32 @@ void TestPostman::notifyBackend(const Qt3D::QSceneChangePtr &e) m_arbiter->sceneChangeEventWithLock(e); } +class TestFunctor : public Qt3D::QBufferFunctor +{ +public: + explicit TestFunctor(int size) + : m_size(size) + {} + + QByteArray operator ()() Q_DECL_FINAL + { + return QByteArray(); + } + + bool operator ==(const Qt3D::QBufferFunctor &other) const + { + const TestFunctor *otherFunctor = functor_cast<TestFunctor>(&other); + if (otherFunctor != Q_NULLPTR) + return otherFunctor->m_size == m_size; + return false; + } + + QT3D_FUNCTOR(TestFunctor) + +private: + int m_size; +}; + // We need to call QNode::clone which is protected // So we sublcass QNode instead of QObject class tst_QBuffer: public Qt3D::QNode @@ -141,11 +168,13 @@ private Q_SLOTS: Qt3D::QBuffer *buffer = new Qt3D::QBuffer(Qt3D::QBuffer::VertexBuffer); buffer->setUsage(Qt3D::QBuffer::DynamicRead); buffer->setData(QByteArrayLiteral("There's no replacement")); + buffer->setBufferFunctor(Qt3D::QBufferFunctorPtr(new TestFunctor(883))); QTest::newRow("vertex") << buffer; Qt3D::QBuffer *indexBuffer = new Qt3D::QBuffer(Qt3D::QBuffer::IndexBuffer); - buffer->setUsage(Qt3D::QBuffer::StaticCopy); - buffer->setData(QByteArrayLiteral("For displacement")); + indexBuffer->setUsage(Qt3D::QBuffer::StaticCopy); + indexBuffer->setData(QByteArrayLiteral("For displacement")); + indexBuffer->setBufferFunctor(Qt3D::QBufferFunctorPtr(new TestFunctor(1340))); QTest::newRow("index") << indexBuffer; } @@ -165,6 +194,10 @@ private Q_SLOTS: QCOMPARE(buffer->usage(), clone->usage()); QCOMPARE(buffer->type(), clone->type()); QCOMPARE(buffer->bufferFunctor(), clone->bufferFunctor()); + if (buffer->bufferFunctor()) { + QVERIFY(clone->bufferFunctor()); + QVERIFY(*clone->bufferFunctor() == *buffer->bufferFunctor()); + } } void checkPropertyUpdates() @@ -208,6 +241,19 @@ private Q_SLOTS: QCOMPARE(change->value().value<QByteArray>(), QByteArrayLiteral("Z28")); arbiter.events.clear(); + + // WHEN + Qt3D::QBufferFunctorPtr functor(new TestFunctor(355)); + buffer->setBufferFunctor(functor); + QCoreApplication::processEvents(); + + // THEN + QCOMPARE(arbiter.events.size(), 1); + change = arbiter.events.first().staticCast<Qt3D::QScenePropertyChange>(); + QCOMPARE(change->propertyName(), "bufferFunctor"); + QCOMPARE(change->value().value<Qt3D::QBufferFunctorPtr>(), functor); + + arbiter.events.clear(); } protected: diff --git a/tests/auto/render/renderbuffer/tst_renderbuffer.cpp b/tests/auto/render/renderbuffer/tst_renderbuffer.cpp index f951e8691..0f66e1cf2 100644 --- a/tests/auto/render/renderbuffer/tst_renderbuffer.cpp +++ b/tests/auto/render/renderbuffer/tst_renderbuffer.cpp @@ -38,6 +38,32 @@ #include <Qt3DRenderer/private/renderbuffer_p.h> #include <Qt3DCore/qscenepropertychange.h> +class TestFunctor : public Qt3D::QBufferFunctor +{ +public: + explicit TestFunctor(int size) + : m_size(size) + {} + + QByteArray operator ()() Q_DECL_FINAL + { + return QByteArray(); + } + + bool operator ==(const Qt3D::QBufferFunctor &other) const + { + const TestFunctor *otherFunctor = functor_cast<TestFunctor>(&other); + if (otherFunctor != Q_NULLPTR) + return otherFunctor->m_size == m_size; + return false; + } + + QT3D_FUNCTOR(TestFunctor) + +private: + int m_size; +}; + class tst_RenderBuffer : public QObject { Q_OBJECT @@ -50,6 +76,7 @@ private Q_SLOTS: Qt3D::QBuffer buffer(Qt3D::QBuffer::IndexBuffer); buffer.setUsage(Qt3D::QBuffer::DynamicCopy); buffer.setData(QByteArrayLiteral("Corvette")); + buffer.setBufferFunctor(Qt3D::QBufferFunctorPtr(new TestFunctor(883))); // WHEN renderBuffer.setPeer(&buffer); @@ -60,6 +87,8 @@ private Q_SLOTS: QCOMPARE(renderBuffer.type(), buffer.type()); QCOMPARE(renderBuffer.usage(), buffer.usage()); QCOMPARE(renderBuffer.data(), buffer.data()); + QCOMPARE(renderBuffer.bufferFunctor(), buffer.bufferFunctor()); + QVERIFY(*renderBuffer.bufferFunctor() == *buffer.bufferFunctor()); } void checkInitialAndCleanedUpState() @@ -73,11 +102,13 @@ private Q_SLOTS: QCOMPARE(renderBuffer.usage(), Qt3D::QBuffer::StaticDraw); QVERIFY(renderBuffer.data().isEmpty()); QVERIFY(renderBuffer.peerUuid().isNull()); + QVERIFY(renderBuffer.bufferFunctor().isNull()); // GIVEN Qt3D::QBuffer buffer(Qt3D::QBuffer::IndexBuffer); buffer.setUsage(Qt3D::QBuffer::DynamicCopy); buffer.setData(QByteArrayLiteral("C7")); + buffer.setBufferFunctor(Qt3D::QBufferFunctorPtr(new TestFunctor(73))); // WHEN renderBuffer.updateFromPeer(&buffer); @@ -88,6 +119,7 @@ private Q_SLOTS: QCOMPARE(renderBuffer.type(), Qt3D::QBuffer::VertexBuffer); QCOMPARE(renderBuffer.usage(), Qt3D::QBuffer::StaticDraw); QVERIFY(renderBuffer.data().isEmpty()); + QVERIFY(renderBuffer.bufferFunctor().isNull()); } void checkPropertyChanges() @@ -138,6 +170,22 @@ private Q_SLOTS: QVERIFY(renderBuffer.isDirty()); renderBuffer.unsetDirty(); + + QVERIFY(!renderBuffer.isDirty()); + + + // WHEN + Qt3D::QBufferFunctorPtr functor(new TestFunctor(355)); + updateChange.reset(new Qt3D::QScenePropertyChange(Qt3D::NodeUpdated, Qt3D::QSceneChange::Node, Qt3D::QNodeId())); + updateChange->setValue(QVariant::fromValue(functor)); + updateChange->setPropertyName("bufferFunctor"); + renderBuffer.sceneChangeEvent(updateChange); + + // THEN + QCOMPARE(renderBuffer.bufferFunctor(), functor); + QVERIFY(renderBuffer.isDirty()); + + renderBuffer.unsetDirty(); QVERIFY(!renderBuffer.isDirty()); } }; |