Add private module qt3dcoretest

Static library containing helpers for unit tests to avoid having to
build the same files 200 times.

Change-Id: I89d63abbd7777a96276154298c2748e2d6774514
Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
This commit is contained in:
Sean Harmer 2017-03-30 14:54:26 +01:00 committed by Paul Lemire
parent 5156fcf380
commit 1071f3e6a2
7 changed files with 366 additions and 0 deletions

View File

@ -11,6 +11,7 @@
"Qt3DExtras" => "$basedir/src/extras",
"Qt3DQuickExtras" => "$basedir/src/quick3d/quick3dextras",
"Qt3DQuickScene2D" => "$basedir/src/quick3d/quick3dscene2d",
"Qt3DCoreTest" => "$basedir/tests/auto/coretest",
);
%moduleheaders = ( # restrict the module headers to those found in relative path
);

View File

@ -1,6 +1,7 @@
TEMPLATE = subdirs
SUBDIRS = \
coretest \
core \
render \
quick3d \
@ -10,3 +11,9 @@ SUBDIRS = \
extras
installed_cmake.depends = cmake
for(subdir, SUBDIRS) {
!equals(subdir, coretest) {
$${subdir}.depends += coretest
}
}

View File

@ -0,0 +1,25 @@
TARGET = Qt3DCoreTest
MODULE = 3dcoretest
CONFIG += static internal_module
DEFINES += QT_NO_CAST_FROM_ASCII QT_NO_FOREACH
PRECOMPILED_HEADER =
INCLUDEPATH += $$PWD
SOURCES += \
$$PWD/testpostmanarbiter.cpp
HEADERS += \
$$PWD/testpostmanarbiter_p.h
qtConfig(private_tests) {
SOURCES += \
$$PWD/qbackendnodetester.cpp
HEADERS += \
$$PWD/qbackendnodetester_p.h
}
QT += core-private 3dcore 3dcore-private
load(qt_module)

View File

@ -0,0 +1,73 @@
/****************************************************************************
**
** Copyright (C) 2016 Klaralvdalens Datakonsult AB (KDAB).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the Qt3D module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL3$
** 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 http://www.qt.io/terms-conditions. For further
** information use the contact form at http://www.qt.io/contact-us.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 3 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPLv3 included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 3 requirements
** will be met: https://www.gnu.org/licenses/lgpl.html.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 2.0 or later as published by the Free
** Software Foundation and appearing in the file LICENSE.GPL included in
** the packaging of this file. Please review the following information to
** ensure the GNU General Public License version 2.0 requirements will be
** met: http://www.gnu.org/licenses/gpl-2.0.html.
**
** $QT_END_LICENSE$
**
****************************************************************************/
#include "qbackendnodetester_p.h"
#include <Qt3DCore/qbackendnode.h>
#include <Qt3DCore/qnode.h>
QT_BEGIN_NAMESPACE
namespace Qt3DCore {
QBackendNodeTester::QBackendNodeTester(QObject *parent)
: QObject(parent)
{
}
void QBackendNodeTester::setPeerId(QBackendNode *backend, QNodeId id)
{
Q_ASSERT(backend);
backend->setPeerId(id);
}
void QBackendNodeTester::simulateInitialization(QNode *frontend, QBackendNode *backend)
{
Q_ASSERT(frontend);
Q_ASSERT(backend);
const auto change = frontend->createNodeCreationChange();
backend->setPeerId(change->subjectId());
backend->setEnabled(change->isNodeEnabled());
backend->initializeFromPeer(change);
}
void QBackendNodeTester::sceneChangeEvent(QBackendNode *backend, const Qt3DCore::QSceneChangePtr &e)
{
backend->sceneChangeEvent(e);
}
} // namespace Qt3DCore
QT_END_NAMESPACE

View File

@ -0,0 +1,78 @@
/****************************************************************************
**
** Copyright (C) 2016 Klaralvdalens Datakonsult AB (KDAB).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the Qt3D module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL3$
** 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 http://www.qt.io/terms-conditions. For further
** information use the contact form at http://www.qt.io/contact-us.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 3 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPLv3 included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 3 requirements
** will be met: https://www.gnu.org/licenses/lgpl.html.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 2.0 or later as published by the Free
** Software Foundation and appearing in the file LICENSE.GPL included in
** the packaging of this file. Please review the following information to
** ensure the GNU General Public License version 2.0 requirements will be
** met: http://www.gnu.org/licenses/gpl-2.0.html.
**
** $QT_END_LICENSE$
**
****************************************************************************/
#ifndef QT3DCORE_QBACKENDNODETESTER_P_H
#define QT3DCORE_QBACKENDNODETESTER_P_H
//
// W A R N I N G
// -------------
//
// This file is not part of the Qt API. It exists for the convenience
// of other Qt classes. This header file may change from version to
// version without notice, or even be removed.
//
// We mean it.
//
#include <QObject>
#include <Qt3DCore/qnodeid.h>
#include <Qt3DCore/qscenechange.h>
QT_BEGIN_NAMESPACE
namespace Qt3DCore {
class QBackendNode;
class QNode;
class QBackendNodeTester : public QObject
{
Q_OBJECT
public:
explicit QBackendNodeTester(QObject *parent = 0);
// Proxies to allow test classes to call private methods on QBackendNode
void setPeerId(QBackendNode *backend, QNodeId id);
void simulateInitialization(QNode *frontend, QBackendNode *backend);
void sceneChangeEvent(QBackendNode *backend, const Qt3DCore::QSceneChangePtr &e);
};
} // namespace Qt3DCore
QT_END_NAMESPACE
#endif // QT3DCORE_QBACKENDNODETESTER_P_H

View File

@ -0,0 +1,90 @@
/****************************************************************************
**
** Copyright (C) 2015 Klaralvdalens Datakonsult AB (KDAB).
** 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 "testpostmanarbiter_p.h"
#include <Qt3DCore/private/qnode_p.h>
QT_BEGIN_NAMESPACE
TestPostman::TestPostman(TestArbiter *arbiter)
: m_arbiter(arbiter)
{}
void TestPostman::setScene(Qt3DCore::QScene *)
{}
void TestPostman::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &)
{}
void TestPostman::notifyBackend(const Qt3DCore::QSceneChangePtr &e)
{
m_arbiter->sceneChangeEventWithLock(e);
}
bool TestPostman::shouldNotifyFrontend(const Qt3DCore::QSceneChangePtr &)
{
return false;
}
TestArbiter::TestArbiter()
: m_postman(new TestPostman(this))
{
}
TestArbiter::~TestArbiter()
{
}
void TestArbiter::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e)
{
events.push_back(e);
}
void TestArbiter::sceneChangeEventWithLock(const Qt3DCore::QSceneChangePtr &e)
{
events.push_back(e);
}
void TestArbiter::sceneChangeEventWithLock(const Qt3DCore::QSceneChangeList &e)
{
events += QVector<Qt3DCore::QSceneChangePtr>::fromStdVector(e);
}
Qt3DCore::QAbstractPostman *TestArbiter::postman() const
{
return m_postman;
}
void TestArbiter::setArbiterOnNode(Qt3DCore::QNode *node)
{
Qt3DCore::QNodePrivate::get(node)->setArbiter(this);
for (Qt3DCore::QNode *n : node->childNodes())
setArbiterOnNode(n);
}
QT_END_NAMESPACE

View File

@ -0,0 +1,92 @@
/****************************************************************************
**
** Copyright (C) 2015 Klaralvdalens Datakonsult AB (KDAB).
** 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$
**
****************************************************************************/
#ifndef QT3DCORE_TESTPOSTMANARBITER_P_H
#define QT3DCORE_TESTPOSTMANARBITER_P_H
//
// W A R N I N G
// -------------
//
// This file is not part of the Qt API. It exists for the convenience
// of other Qt classes. This header file may change from version to
// version without notice, or even be removed.
//
// We mean it.
//
#include <Qt3DCore/private/qpostman_p.h>
#include <Qt3DCore/private/qchangearbiter_p.h>
#include <Qt3DCore/qpropertyupdatedchange.h>
QT_BEGIN_NAMESPACE
namespace Qt3DCore {
class QNode;
} // Qt3D
class TestArbiter;
class TestPostman : public Qt3DCore::QAbstractPostman
{
public:
explicit TestPostman(TestArbiter *arbiter);
void sceneChangeEvent(const Qt3DCore::QSceneChangePtr &) Q_DECL_FINAL;
void setScene(Qt3DCore::QScene *) Q_DECL_FINAL;
void notifyBackend(const Qt3DCore::QSceneChangePtr &e) Q_DECL_FINAL;
bool shouldNotifyFrontend(const Qt3DCore::QSceneChangePtr &e) Q_DECL_FINAL;
private:
TestArbiter *m_arbiter;
};
class TestArbiter : public Qt3DCore::QAbstractArbiter
{
public:
TestArbiter();
~TestArbiter();
void sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) Q_DECL_FINAL;
void sceneChangeEventWithLock(const Qt3DCore::QSceneChangePtr &e) Q_DECL_FINAL;
void sceneChangeEventWithLock(const Qt3DCore::QSceneChangeList &e) Q_DECL_FINAL;
Qt3DCore::QAbstractPostman *postman() const Q_DECL_FINAL;
QVector<Qt3DCore::QSceneChangePtr> events;
void setArbiterOnNode(Qt3DCore::QNode *node);
private:
TestPostman *m_postman;
};
QT_END_NAMESPACE
#endif // QT3DCORE_TESTPOSTMANARBITER_P_H