summaryrefslogtreecommitdiffstats
path: root/tests/auto/render/qboundingvolumedebug/tst_qboundingvolumedebug.cpp
blob: 499c8336881cc0a93ca891ed9ccf4b714fc11933 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
// Copyright (C) 2015 Klaralvdalens Datakonsult AB (KDAB).
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only

#include <QtTest/QTest>
#include <Qt3DCore/QEntity>
#include <Qt3DCore/private/qnode_p.h>
#include <Qt3DCore/private/qscene_p.h>
#include <Qt3DCore/qbackendnodepropertychange.h>
#include <Qt3DRender/private/qboundingvolumedebug_p.h>

#include "testpostmanarbiter.h"

#if 0

class MyBoundingVolumeDebug : public Qt3DRender::QBoundingVolumeDebug
{
    Q_OBJECT
public:
    MyBoundingVolumeDebug(Qt3DCore::QNode *parent = nullptr)
        : Qt3DRender::QBoundingVolumeDebug(parent)
    {}

    void sceneChangeEvent(const Qt3DCore::QSceneChangePtr &change) final
    {
        Qt3DRender::QBoundingVolumeDebug::sceneChangeEvent(change);
    }

private:
    friend class tst_ObjectPicker;

};

// We need to call QNode::clone which is protected
// So we sublcass QNode instead of QObject
class tst_QBoundingVolumeDebug : public Qt3DCore::QNode
{
    Q_OBJECT
public:
    tst_QBoundingVolumeDebug()
    {
    }

    ~tst_QBoundingVolumeDebug()
    {
        QNode::cleanup();
    }

private Q_SLOTS:

    void checkCloning_data()
    {
        QTest::addColumn<Qt3DRender::QBoundingVolumeDebug *>("bvD");

        Qt3DRender::QBoundingVolumeDebug *bvD = new Qt3DRender::QBoundingVolumeDebug();
        QTest::newRow("empty bvd") << bvD;
        bvD = new Qt3DRender::QBoundingVolumeDebug();
        bvD->setRecursive(true);
        QTest::newRow("recursive_bvd") << bvD;
    }

    // TODO: Avoid cloning here
//    void checkCloning()
//    {
//        // GIVEN
//        QFETCH(Qt3DRender::QBoundingVolumeDebug *, bvD);

//        // WHEN
//        Qt3DRender::QBoundingVolumeDebug *clone = static_cast<Qt3DRender::QBoundingVolumeDebug *>(QNode::clone(bvD));
//        QCoreApplication::processEvents();

//        // THEN
//        QVERIFY(clone != nullptr);
//        QCOMPARE(bvD->id(), clone->id());
//        QCOMPARE(bvD->recursive(), clone->recursive());
//    }

    void checkPropertyUpdates()
    {
        // GIVEN
        QScopedPointer<Qt3DRender::QBoundingVolumeDebug> bvD(new Qt3DRender::QBoundingVolumeDebug());
        TestArbiter arbiter(bvD.data());

        // WHEN
        bvD->setRecursive(true);
        QCoreApplication::processEvents();

        // THEN
        QCOMPARE(arbiter.events.size(), 1);
        Qt3DCore::QNodePropertyChangePtr change = arbiter.events.last().staticCast<Qt3DCore::QNodePropertyChange>();
        QCOMPARE(change->propertyName(), "recursive");
        QCOMPARE(change->value().toBool(), true);
        QCOMPARE(change->type(), Qt3DCore::NodeUpdated);

        arbiter.events.clear();

        // WHEN
        bvD->setRecursive(true);
        QCoreApplication::processEvents();

        // THEN
        QCOMPARE(arbiter.events.size(), 0);

        // WHEN
        bvD->setRecursive(false);
        QCoreApplication::processEvents();

        // THEN
        QCOMPARE(arbiter.events.size(), 1);
        change = arbiter.events.last().staticCast<Qt3DCore::QNodePropertyChange>();
        QCOMPARE(change->propertyName(), "recursive");
        QCOMPARE(change->value().toBool(), false);
        QCOMPARE(change->type(), Qt3DCore::NodeUpdated);

        arbiter.events.clear();
    }

    void checkBackendUpdates()
    {
        // GIVEN
        QScopedPointer<Qt3DCore::QEntity> entity(new Qt3DCore::QEntity());
        MyBoundingVolumeDebug *bvD(new MyBoundingVolumeDebug(entity.data()));
        entity->addComponent(bvD);

        // THEN
        QCoreApplication::processEvents();
        QCOMPARE(entity->children().count(), 1);
        QCOMPARE(bvD->children().count(), 0);

        // WHEN
        // Create Backend Change and distribute it to frontend node
        Qt3DCore::QBackendNodePropertyChangePtr e(new Qt3DCore::QBackendNodePropertyChange(bvD->id()));
        e->setPropertyName("center");
        bvD->sceneChangeEvent(e);
        QCoreApplication::processEvents();

        // THEN
        QCOMPARE(entity->children().count(), 2);
        QCOMPARE(bvD->children().count(), 0);
    }
};

QTEST_MAIN(tst_QBoundingVolumeDebug)

#include "tst_qboundingvolumedebug.moc"