8
8
#include "controlobject.h"
9
9
#include "configobject.h"
10
#include "midi/midiscriptengine.h"
10
#include "controllers/controllerengine.h"
14
class MidiScriptEngineTest : public testing::Test {
14
class ControllerEngineTest : public testing::Test {
16
16
virtual void SetUp() {
17
17
qDebug() << "SetUp";
18
18
static int argc = 1;
19
19
static char** argv = NULL;
20
20
app = new QApplication(argc, argv);
21
MidiDevice* pDevice = NULL;
22
scriptEngine = new MidiScriptEngine(pDevice);
23
scriptEngine->setMidiDebug(false);
24
scriptEngine->setMidiPopups(false);
25
scriptEngine->moveToThread(scriptEngine);
26
scriptEngine->start();
27
while(!scriptEngine->isReady()) { }
21
Controller* pController = NULL;
22
cEngine = new ControllerEngine(pController);
23
cEngine->setDebug(true);
24
cEngine->setPopups(false);
30
27
virtual void TearDown() {
31
28
qDebug() << "TearDown";
32
scriptEngine->gracefulShutdown(QList<QString>());
29
cEngine->gracefulShutdown();
39
MidiScriptEngine *scriptEngine;
35
ControllerEngine *cEngine;
42
TEST_F(MidiScriptEngineTest, commonScriptHasNoErrors) {
38
TEST_F(ControllerEngineTest, commonScriptHasNoErrors) {
43
39
// ConfigObject<ConfigValue> config("~/.mixxx/mixxx.cfg");
44
40
// QString commonScript = config.getConfigPath() + "/" +
45
41
// "/midi/midi-mappings-scripts.js";
46
QString commonScript = "./res/midi/midi-mappings-scripts.js";
47
scriptEngine->evaluate(commonScript);
48
EXPECT_FALSE(scriptEngine->hasErrors(commonScript));
42
QString commonScript = "./res/controllers/common-controller-scripts.js";
43
cEngine->evaluate(commonScript);
44
EXPECT_FALSE(cEngine->hasErrors(commonScript));
51
TEST_F(MidiScriptEngineTest, scriptSetValue) {
47
TEST_F(ControllerEngineTest, scriptSetValue) {
52
48
QString script = "test.js";
54
50
f.open(QIODevice::ReadWrite | QIODevice::Truncate);
55
51
f.write("setValue = function() { engine.setValue('[Channel1]', 'co', 1.0); }\n");
58
scriptEngine->evaluate(script);;
59
EXPECT_FALSE(scriptEngine->hasErrors(script));
54
cEngine->evaluate(script);
55
EXPECT_FALSE(cEngine->hasErrors(script));
61
57
ControlObject *co = new ControlObject(ConfigKey("[Channel1]", "co"));
63
scriptEngine->execute("setValue");
59
cEngine->execute("setValue");
64
60
ControlObject::sync();
65
61
EXPECT_DOUBLE_EQ(co->get(), 1.0f);
73
TEST_F(MidiScriptEngineTest, scriptGetSetValue) {
69
TEST_F(ControllerEngineTest, scriptGetSetValue) {
74
70
QString script = "test.js";
76
72
f.open(QIODevice::ReadWrite | QIODevice::Truncate);
77
73
f.write("getSetValue = function() { var val = engine.getValue('[Channel1]', 'co'); engine.setValue('[Channel1]', 'co', val + 1); }\n");
80
scriptEngine->evaluate(script);;
81
EXPECT_FALSE(scriptEngine->hasErrors(script));
76
cEngine->evaluate(script);
77
EXPECT_FALSE(cEngine->hasErrors(script));
83
79
ControlObject *co = new ControlObject(ConfigKey("[Channel1]", "co"));
85
scriptEngine->execute("getSetValue");
81
cEngine->execute("getSetValue");
86
82
ControlObject::sync();
87
83
EXPECT_DOUBLE_EQ(co->get(), 1.0f);
91
TEST_F(ControllerEngineTest, setInvalidControlObject) {
92
QString script = "test.js";
94
f.open(QIODevice::ReadWrite | QIODevice::Truncate);
95
f.write("setValue = function() { engine.setValue('[Nothing]', 'nothing', 1.0); }\n");
98
cEngine->evaluate(script);
99
EXPECT_FALSE(cEngine->hasErrors(script));
101
EXPECT_TRUE(cEngine->execute("setValue"));
106
TEST_F(ControllerEngineTest, getInvalidControlObject) {
107
QString script = "test.js";
109
f.open(QIODevice::ReadWrite | QIODevice::Truncate);
110
f.write("getValue = function() { return engine.getValue('[Nothing]', 'nothing'); }\n");
113
cEngine->evaluate(script);
114
EXPECT_FALSE(cEngine->hasErrors(script));
116
EXPECT_TRUE(cEngine->execute("getValue"));
121
TEST_F(ControllerEngineTest, automaticReaction) {
122
QString script = "test.js";
124
f.open(QIODevice::ReadWrite | QIODevice::Truncate);
125
f.write("setUp = function() { engine.connectControl('[Channel1]','co','reaction'); }\n");
126
f.write("reaction = function(value) { if (value == 2.5) print('TEST PASSED: '+value);\
127
else print('TEST FAILED! TEST FAILED! TEST FAILED: '+value);\
131
cEngine->evaluate(script);
132
EXPECT_FALSE(cEngine->hasErrors(script));
134
ControlObject *co = new ControlObject(ConfigKey("[Channel1]", "co"));
136
EXPECT_TRUE(cEngine->execute("setUp"));
137
ControlObject::sync();
140
// TODO: Have the JS call a function in this test class so the test framework
141
// can tell if it actually passed or not
143
ControlObject::sync();
148
// Can't test timed reactions without an event loop!
150
TEST_F(ControllerEngineTest, oneShotTimedReaction) {
151
QString script = "test.js";
153
f.open(QIODevice::ReadWrite | QIODevice::Truncate);
154
f.write("function global() {}\n");
155
f.write("setUp = function() { global.date = new Date(); engine.beginTimer(250,'reaction()',true); }\n");
156
f.write("reaction = function() { if ((new Date()-global.date) == 250) print('TEST PASSED');\
157
else print('TEST FAILED! TEST FAILED! TEST FAILED: '+(new Date()-global.date));\
158
return (new Date()-global.date); }\n");
161
cEngine->evaluate(script);
162
EXPECT_FALSE(cEngine->hasErrors(script));
164
EXPECT_TRUE(cEngine->execute("setUp"));
167
// Test passes if the JS prints it after 250ms
168
// TODO: Have the JS call a function in this test class