Repository navigation
Expand file tree
/
Copy pathAutomatableModelTest.cpp
More file actions
122 lines (104 loc) · 3.35 KB
/
Copy pathAutomatableModelTest.cpp
File metadata and controls
122 lines (104 loc) · 3.35 KB
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
/*
* AutomatableModelTest.cpp
*
* Copyright (c) 2019-2020 Johannes Lorenz <j.git$$$lorenz-ho.me, $$$=@>
*
* This file is part of LMMS - https://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program (see COPYING); if not, write to the
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
*/
#include <QtTest>
#include "AutomatableModel.h"
#include "ComboBoxModel.h"
#include "Engine.h"
class AutomatableModelTest : public QObject
{
Q_OBJECT
public:
bool m1Changed, m2Changed;
void resetChanged() { m1Changed = m2Changed = false; }
private slots: // helper slots
void onM1Changed() { m1Changed = true; }
void onM2Changed() { m2Changed = true; }
private slots: // tests
//! Test that upcast and exact casts work,
//! but no downcast or any other casts
void initTestCase()
{
using namespace lmms;
Engine::init(true);
}
void cleanupTestCase()
{
using namespace lmms;
Engine::destroy();
}
void CastTests()
{
using namespace lmms;
ComboBoxModel comboModel;
AutomatableModel* amPtr = &comboModel;
QVERIFY(nullptr == amPtr->dynamicCast<FloatModel>()); // not a parent class
QCOMPARE(&comboModel, amPtr->dynamicCast<AutomatableModel>()); // parent class
QCOMPARE(&comboModel, amPtr->dynamicCast<IntModel>()); // parent class
QCOMPARE(&comboModel, amPtr->dynamicCast<ComboBoxModel>()); // same class
IntModel intModel;
IntModel* imPtr = &intModel;
QVERIFY(nullptr == imPtr->dynamicCast<FloatModel>()); // not a parent class
QCOMPARE(&intModel, imPtr->dynamicCast<AutomatableModel>()); // parent class
QCOMPARE(&intModel, imPtr->dynamicCast<IntModel>()); // same class
QVERIFY(nullptr == imPtr->dynamicCast<ComboBoxModel>()); // child class
}
void LinkTests()
{
using namespace lmms;
BoolModel m1(true), m2(false);
QObject::connect(&m1, SIGNAL(dataChanged()),
this, SLOT(onM1Changed()));
QObject::connect(&m2, SIGNAL(dataChanged()),
this, SLOT(onM2Changed()));
resetChanged();
m1.linkToModel(&m1);
QVERIFY(!m1Changed); // cannot link to itself
QVERIFY(!m2Changed);
QVERIFY(m1.countLinks() == 0);
resetChanged();
m1.linkToModel(&m2);
QVERIFY(m1.value() == m2.value()); // since m1 takes the value of m2
QVERIFY(!m2Changed); // the second model is the source
QVERIFY(m1.countLinks() == 1);
resetChanged();
m1.linkToModel(&m2);
QVERIFY(!m1Changed); // it's already linked
QVERIFY(!m2Changed);
resetChanged();
BoolModel m3(false);
m1.setValue(1.f);
m2.setValue(1.f);
m1.linkToModel(&m2);
QVERIFY(m1.value());
QVERIFY(m2.value());
QVERIFY(!m3.value());
m2.linkToModel(&m3); // drag m3, drop on m2
// m2 should take m3's (0) value
QVERIFY(m2.value() == m3.value());
QVERIFY(!m3.value());
QVERIFY(m1.countLinks() == 2);
}
};
QTEST_GUILESS_MAIN(AutomatableModelTest)
#include "AutomatableModelTest.moc"