~shanx-shashank/mixxx/effects_ladspa

« back to all changes in this revision

Viewing changes to mixxx/src/test/controllerengine_test.cpp

  • Committer: shanxS
  • Date: 2013-06-16 07:42:19 UTC
  • Revision ID: shanx.shashank@gmail.com-20130616074219-wszmk0slwfa1z61q
Init Repository.
Starting with GUI of lp:~shanx-shashank/mixxx/effects_parametricEq as base

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
 
 
2
#include <gtest/gtest.h>
 
3
#include <QDebug>
 
4
#include <QApplication>
 
5
#include <QObject>
 
6
#include <QFile>
 
7
#include <QThread>
 
8
 
 
9
#include "controlobject.h"
 
10
#include "controlpotmeter.h"
 
11
#include "configobject.h"
 
12
#include "controllers/controllerengine.h"
 
13
 
 
14
namespace {
 
15
 
 
16
class ControllerEngineTest : public testing::Test {
 
17
  protected:
 
18
    virtual void SetUp() {
 
19
        QApplication *app;
 
20
        qDebug() << "SetUp";
 
21
        static int argc = 1;
 
22
        static char* argv[2] = { "test", NULL };
 
23
        QThread::currentThread()->setObjectName("Main");
 
24
        app = new QApplication(argc, argv);
 
25
        new ControlPotmeter(ConfigKey("[Test]", "potmeter"),-1.,1.);
 
26
        Controller* pController = NULL;
 
27
        cEngine = new ControllerEngine(pController);
 
28
        cEngine->setDebug(true);
 
29
        cEngine->setPopups(false);
 
30
    }
 
31
 
 
32
    virtual void TearDown() {
 
33
        qDebug() << "TearDown";
 
34
        cEngine->gracefulShutdown();
 
35
        delete cEngine;
 
36
        delete app;
 
37
    }
 
38
 
 
39
    QApplication *app;
 
40
    ControllerEngine *cEngine;
 
41
};
 
42
 
 
43
TEST_F(ControllerEngineTest, commonScriptHasNoErrors) {
 
44
    // ConfigObject<ConfigValue> config("~/.mixxx/mixxx.cfg");
 
45
    // QString commonScript = config.getConfigPath() + "/" +
 
46
    //         "/midi/midi-mappings-scripts.js";
 
47
    QString commonScript = "./res/controllers/common-controller-scripts.js";
 
48
    cEngine->evaluate(commonScript);
 
49
    EXPECT_FALSE(cEngine->hasErrors(commonScript));
 
50
}
 
51
 
 
52
TEST_F(ControllerEngineTest, scriptSetValue) {
 
53
    QString script = "test.js";
 
54
    QFile f(script);
 
55
    f.open(QIODevice::ReadWrite | QIODevice::Truncate);
 
56
    f.write("setValue = function() { engine.setValue('[Channel1]', 'co', 1.0); }\n");
 
57
    f.close();
 
58
 
 
59
    cEngine->evaluate(script);
 
60
    EXPECT_FALSE(cEngine->hasErrors(script));
 
61
 
 
62
    ControlObject *co = new ControlObject(ConfigKey("[Channel1]", "co"));
 
63
    co->set(0.0);
 
64
    cEngine->execute("setValue");
 
65
    ControlObject::sync();
 
66
    EXPECT_DOUBLE_EQ(co->get(), 1.0f);
 
67
 
 
68
    delete co;
 
69
    co = NULL;
 
70
 
 
71
    f.remove();
 
72
}
 
73
 
 
74
TEST_F(ControllerEngineTest, scriptGetSetValue) {
 
75
    QString script = "test.js";
 
76
    QFile f(script);
 
77
    f.open(QIODevice::ReadWrite | QIODevice::Truncate);
 
78
    f.write("getSetValue = function() { var val = engine.getValue('[Channel1]', 'co'); engine.setValue('[Channel1]', 'co', val + 1); }\n");
 
79
    f.close();
 
80
 
 
81
    cEngine->evaluate(script);
 
82
    EXPECT_FALSE(cEngine->hasErrors(script));
 
83
 
 
84
    ControlObject *co = new ControlObject(ConfigKey("[Channel1]", "co"));
 
85
    co->set(0.0);
 
86
    cEngine->execute("getSetValue");
 
87
    ControlObject::sync();
 
88
    EXPECT_DOUBLE_EQ(co->get(), 1.0f);
 
89
 
 
90
    delete co;
 
91
    co = NULL;
 
92
 
 
93
    f.remove();
 
94
}
 
95
 
 
96
TEST_F(ControllerEngineTest, scriptConnectDisconnectControlNamedFunction) {
 
97
    QString script = "test.js";
 
98
    QFile f(script);
 
99
    f.open(QIODevice::ReadWrite | QIODevice::Truncate);
 
100
    f.write(
 
101
        "var executed = false;\n"
 
102
        "var connection;\n"
 
103
        "testConnectDisconnectControlCallback = function() {\n"
 
104
        "    executed = true;\n"
 
105
        "};\n"
 
106
        "testConnectDisconnectControl = function() { \n"
 
107
        "    connection = engine.connectControl('[Test]', 'potmeter', \n"
 
108
        "                            'testConnectDisconnectControlCallback');\n"
 
109
        "    engine.trigger('[Test]', 'potmeter');\n"
 
110
        "    return true;\n"
 
111
        "};\n"
 
112
        "checkConnectDisconnectControl = function() {\n"
 
113
        "    connection.disconnect();\n"
 
114
        "    if (!executed) {\n"
 
115
        "        throw 'Did Not Execute Callback';\n"
 
116
        "    }\n"
 
117
        "    return executed;\n"
 
118
        "};\n"
 
119
    );
 
120
    f.close();
 
121
 
 
122
    cEngine->evaluate(script);
 
123
    EXPECT_FALSE(cEngine->hasErrors(script));
 
124
 
 
125
    EXPECT_TRUE(cEngine->execute("testConnectDisconnectControl"));
 
126
    EXPECT_TRUE(cEngine->execute("checkConnectDisconnectControl"));
 
127
 
 
128
    f.remove();
 
129
}
 
130
 
 
131
TEST_F(ControllerEngineTest, scriptConnectDisconnectControlClosure) {
 
132
    QString script = "test.js";
 
133
    QFile f(script);
 
134
    f.open(QIODevice::ReadWrite | QIODevice::Truncate);
 
135
    f.write(
 
136
        "var executed = false;\n"
 
137
        "var connection;\n"
 
138
        "testConnectDisconnectControl = function() { \n"
 
139
        "    connection = engine.connectControl('[Test]', 'potmeter', \n"
 
140
        "        function() { executed = true; }\n"
 
141
        "    );\n"
 
142
        "    engine.trigger('[Test]', 'potmeter');\n"
 
143
        "    return true;\n"
 
144
        "};\n"
 
145
        "checkConnectDisconnectControl = function() {\n"
 
146
        "    connection.disconnect();\n"
 
147
        "    if (!executed) {\n"
 
148
        "        throw 'Did Not Execute Callback';\n"
 
149
        "    }\n"
 
150
        "    return executed;\n"
 
151
        "};\n"
 
152
    );
 
153
    f.close();
 
154
 
 
155
    cEngine->evaluate(script);
 
156
    EXPECT_FALSE(cEngine->hasErrors(script));
 
157
 
 
158
    EXPECT_TRUE(cEngine->execute("testConnectDisconnectControl"));
 
159
    EXPECT_TRUE(cEngine->execute("checkConnectDisconnectControl"));
 
160
 
 
161
    f.remove();
 
162
}
 
163
 
 
164
TEST_F(ControllerEngineTest, scriptConnectDisconnectControlIsDisconnected) {
 
165
    QString script = "test.js";
 
166
    QFile f(script);
 
167
    f.open(QIODevice::ReadWrite | QIODevice::Truncate);
 
168
    f.write(
 
169
        "var executed = false;\n"
 
170
        "var connection;\n"
 
171
        "testConnectDisconnectControl = function() { \n"
 
172
        "    connection = engine.connectControl('[Test]', 'potmeter', \n"
 
173
        "        function() { executed = true; }\n"
 
174
        "    );\n"
 
175
        "    if (typeof connection == 'undefined')\n"
 
176
        "        throw 'Unable to Connect controller';\n"
 
177
        "    connection.disconnect();\n"
 
178
        "    engine.trigger('[Test]', 'potmeter');\n"
 
179
        "    return true;\n"
 
180
        "};\n"
 
181
        "checkConnectDisconnectControl = function() {\n"
 
182
        "    if (executed) {\n"
 
183
        "        throw 'Callback was executed';\n"
 
184
        "    }\n"
 
185
        "    return executed==false;\n"
 
186
        "};\n"
 
187
    );
 
188
    f.close();
 
189
 
 
190
    cEngine->evaluate(script);
 
191
    EXPECT_FALSE(cEngine->hasErrors(script));
 
192
 
 
193
    EXPECT_TRUE(cEngine->execute("testConnectDisconnectControl"));
 
194
    EXPECT_TRUE(cEngine->execute("checkConnectDisconnectControl"));
 
195
 
 
196
    f.remove();
 
197
}
 
198
 
 
199
TEST_F(ControllerEngineTest, scriptConnectDisconnectControlIsDisconnectedByName) {
 
200
    QString script = "test.js";
 
201
    QFile f(script);
 
202
    f.open(QIODevice::ReadWrite | QIODevice::Truncate);
 
203
    f.write(
 
204
        "var executed = false;\n"
 
205
        "var connection;\n"
 
206
        "connectionCallback = function() { executed = true; }\n"
 
207
        "testConnectDisconnectControl = function() { \n"
 
208
        "    connection = engine.connectControl('[Test]', 'potmeter', 'connectionCallback');\n"
 
209
        "    if (typeof connection == 'undefined')\n"
 
210
        "        throw 'Unable to Connect controller';\n"
 
211
        "    engine.connectControl('[Test]', 'potmeter', 'connectionCallback', 1);\n"
 
212
        "    engine.trigger('[Test]', 'potmeter');\n"
 
213
        "    return true;\n"
 
214
        "};\n"
 
215
        "checkConnectDisconnectControl = function() {\n"
 
216
        "    if (executed) {\n"
 
217
        "        throw 'Callback was executed';\n"
 
218
        "    }\n"
 
219
        "    return executed==false;\n"
 
220
        "};\n"
 
221
    );
 
222
    f.close();
 
223
 
 
224
    cEngine->evaluate(script);
 
225
    EXPECT_FALSE(cEngine->hasErrors(script));
 
226
 
 
227
    EXPECT_TRUE(cEngine->execute("testConnectDisconnectControl"));
 
228
    EXPECT_TRUE(cEngine->execute("checkConnectDisconnectControl"));
 
229
 
 
230
    f.remove();
 
231
}
 
232
 
 
233
TEST_F(ControllerEngineTest, scriptConnectDisconnectControlIsDisconnectedByObject) {
 
234
    QString script = "test.js";
 
235
    QFile f(script);
 
236
    f.open(QIODevice::ReadWrite | QIODevice::Truncate);
 
237
    f.write(
 
238
        "var executed = false;\n"
 
239
        "var connection;\n"
 
240
        "testConnectDisconnectControl = function() { \n"
 
241
        "    connection = engine.connectControl('[Test]', 'potmeter', \n"
 
242
        "        function() { executed = true; }\n"
 
243
        "    );\n"
 
244
        "    if (typeof connection == 'undefined')\n"
 
245
        "        throw 'Unable to Connect controller';\n"
 
246
        "    engine.connectControl('[Test]', 'potmeter', connection, 1);\n"
 
247
        "    engine.trigger('[Test]', 'potmeter');\n"
 
248
        "    return true;\n"
 
249
        "};\n"
 
250
        "checkConnectDisconnectControl = function() {\n"
 
251
        "    if (executed) {\n"
 
252
        "        throw 'Callback was executed';\n"
 
253
        "    }\n"
 
254
        "    return executed==false;\n"
 
255
        "};\n"
 
256
    );
 
257
    f.close();
 
258
 
 
259
    cEngine->evaluate(script);
 
260
    EXPECT_FALSE(cEngine->hasErrors(script));
 
261
 
 
262
    EXPECT_TRUE(cEngine->execute("testConnectDisconnectControl"));
 
263
    EXPECT_TRUE(cEngine->execute("checkConnectDisconnectControl"));
 
264
 
 
265
    f.remove();
 
266
}
 
267
 
 
268
TEST_F(ControllerEngineTest, setInvalidControlObject) {
 
269
    QString script = "test.js";
 
270
    QFile f(script);
 
271
    f.open(QIODevice::ReadWrite | QIODevice::Truncate);
 
272
    f.write("setValue = function() { engine.setValue('[Nothing]', 'nothing', 1.0); }\n");
 
273
    f.close();
 
274
 
 
275
    cEngine->evaluate(script);
 
276
    EXPECT_FALSE(cEngine->hasErrors(script));
 
277
 
 
278
    EXPECT_TRUE(cEngine->execute("setValue"));
 
279
 
 
280
    f.remove();
 
281
}
 
282
 
 
283
TEST_F(ControllerEngineTest, getInvalidControlObject) {
 
284
    QString script = "test.js";
 
285
    QFile f(script);
 
286
    f.open(QIODevice::ReadWrite | QIODevice::Truncate);
 
287
    f.write("getValue = function() { return engine.getValue('[Nothing]', 'nothing'); }\n");
 
288
    f.close();
 
289
    
 
290
    cEngine->evaluate(script);
 
291
    EXPECT_FALSE(cEngine->hasErrors(script));
 
292
 
 
293
    EXPECT_TRUE(cEngine->execute("getValue"));
 
294
    
 
295
    f.remove();
 
296
}
 
297
 
 
298
TEST_F(ControllerEngineTest, automaticReaction) {
 
299
    QString script = "test.js";
 
300
    QFile f(script);
 
301
    f.open(QIODevice::ReadWrite | QIODevice::Truncate);
 
302
    f.write("setUp = function() { engine.connectControl('[Channel1]','co','reaction'); }\n");
 
303
    f.write("reaction = function(value) { if (value == 2.5) print('TEST PASSED: '+value);\
 
304
                                          else print('TEST FAILED!  TEST FAILED!  TEST FAILED: '+value);\
 
305
                                          return value; }\n");
 
306
    f.close();
 
307
 
 
308
    cEngine->evaluate(script);
 
309
    EXPECT_FALSE(cEngine->hasErrors(script));
 
310
 
 
311
    ControlObject *co = new ControlObject(ConfigKey("[Channel1]", "co"));
 
312
    co->set(0.0);
 
313
    EXPECT_TRUE(cEngine->execute("setUp"));
 
314
    ControlObject::sync();
 
315
 
 
316
    // The actual test
 
317
    //  TODO: Have the JS call a function in this test class so the test framework
 
318
    //  can tell if it actually passed or not
 
319
    co->set(2.5);
 
320
    ControlObject::sync();
 
321
 
 
322
    f.remove();
 
323
}
 
324
 
 
325
// Can't test timed reactions without an event loop!
 
326
/*
 
327
TEST_F(ControllerEngineTest, oneShotTimedReaction) {
 
328
    QString script = "test.js";
 
329
    QFile f(script);
 
330
    f.open(QIODevice::ReadWrite | QIODevice::Truncate);
 
331
    f.write("function global() {}\n");
 
332
    f.write("setUp = function() { global.date = new Date(); engine.beginTimer(250,'reaction()',true); }\n");
 
333
    f.write("reaction = function() { if ((new Date()-global.date) == 250) print('TEST PASSED');\
 
334
                                     else print('TEST FAILED!  TEST FAILED!  TEST FAILED: '+(new Date()-global.date));\
 
335
                                     return (new Date()-global.date); }\n");
 
336
    f.close();
 
337
    
 
338
    cEngine->evaluate(script);
 
339
    EXPECT_FALSE(cEngine->hasErrors(script));
 
340
 
 
341
    EXPECT_TRUE(cEngine->execute("setUp"));
 
342
    usleep(500*1000);
 
343
 
 
344
    // Test passes if the JS prints it after 250ms
 
345
    //  TODO: Have the JS call a function in this test class
 
346
 
 
347
    f.remove();
 
348
}
 
349
*/
 
350
 
 
351
}