blob: ce2c9fe513fab7709c73813e198f7a5ca833a9c7 [file] [log] [blame]
yukawa@chromium.org09ef89a2013-11-29 06:27:41 +00001// Copyright 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "media/midi/midi_message_queue.h"
6
7#include "testing/gtest/include/gtest/gtest.h"
8
9namespace media {
toyoshime147c5e2015-05-07 21:58:31 -070010namespace midi {
yukawa@chromium.org09ef89a2013-11-29 06:27:41 +000011namespace {
12
Avi Drissman3528fd02015-12-18 20:11:31 -050013const uint8_t kGMOn[] = {0xf0, 0x7e, 0x7f, 0x09, 0x01, 0xf7};
14const uint8_t kPartialGMOn1st[] = {0xf0};
15const uint8_t kPartialGMOn2nd[] = {0x7e, 0x7f, 0x09, 0x01};
16const uint8_t kPartialGMOn3rd[] = {0xf7};
17const uint8_t kGSOn[] = {
18 0xf0, 0x41, 0x10, 0x42, 0x12, 0x40, 0x00, 0x7f, 0x00, 0x41, 0xf7,
yukawa@chromium.org09ef89a2013-11-29 06:27:41 +000019};
Avi Drissman3528fd02015-12-18 20:11:31 -050020const uint8_t kNoteOn[] = {0x90, 0x3c, 0x7f};
21const uint8_t kPartialNoteOn1st[] = {0x90};
22const uint8_t kPartialNoteOn2nd[] = {0x3c};
23const uint8_t kPartialNoteOn3rd[] = {0x7f};
yukawaa0920f12015-10-08 00:09:59 -070024
Avi Drissman3528fd02015-12-18 20:11:31 -050025const uint8_t kNoteOnWithRunningStatus[] = {
26 0x90, 0x3c, 0x7f, 0x3c, 0x7f, 0x3c, 0x7f,
yukawa@chromium.org09ef89a2013-11-29 06:27:41 +000027};
Avi Drissman3528fd02015-12-18 20:11:31 -050028const uint8_t kChannelPressure[] = {0xd0, 0x01};
29const uint8_t kChannelPressureWithRunningStatus[] = {
30 0xd0, 0x01, 0x01, 0x01,
yukawa@chromium.org09ef89a2013-11-29 06:27:41 +000031};
Avi Drissman3528fd02015-12-18 20:11:31 -050032const uint8_t kTimingClock[] = {0xf8};
33const uint8_t kSystemCommonMessageTuneRequest[] = {0xf6};
34const uint8_t kMTCFrame[] = {0xf1, 0x00};
35const uint8_t kBrokenData1[] = {0x92};
36const uint8_t kBrokenData2[] = {0xf7};
37const uint8_t kBrokenData3[] = {0xf2, 0x00};
38const uint8_t kDataByte0[] = {0x00};
yukawa@chromium.org09ef89a2013-11-29 06:27:41 +000039
Avi Drissman3528fd02015-12-18 20:11:31 -050040const uint8_t kReservedMessage1[] = {0xf4};
41const uint8_t kReservedMessage2[] = {0xf5};
42const uint8_t kReservedMessage1WithDataBytes[] = {0xf4, 0x01, 0x01,
43 0x01, 0x01, 0x01};
yukawaa0920f12015-10-08 00:09:59 -070044
yukawa@chromium.org09ef89a2013-11-29 06:27:41 +000045template <typename T, size_t N>
toyoshim@chromium.orgc82e66e2014-02-04 07:05:47 +000046void Add(MidiMessageQueue* queue, const T(&array)[N]) {
yukawa@chromium.org09ef89a2013-11-29 06:27:41 +000047 queue->Add(array, N);
48}
49
50template <typename T, size_t N>
51::testing::AssertionResult ExpectEqualSequence(
52 const char* expr1, const char* expr2,
53 const T(&expected)[N], const std::vector<T>& actual) {
54 if (actual.size() != N) {
55 return ::testing::AssertionFailure()
56 << "expected: " << ::testing::PrintToString(expected)
57 << ", actual: " << ::testing::PrintToString(actual);
58 }
59 for (size_t i = 0; i < N; ++i) {
60 if (expected[i] != actual[i]) {
61 return ::testing::AssertionFailure()
62 << "expected: " << ::testing::PrintToString(expected)
63 << ", actual: " << ::testing::PrintToString(actual);
64 }
65 }
66 return ::testing::AssertionSuccess();
67}
68
69#define EXPECT_MESSAGE(expected, actual) \
70 EXPECT_PRED_FORMAT2(ExpectEqualSequence, expected, actual)
71
toyoshim@chromium.orgc82e66e2014-02-04 07:05:47 +000072TEST(MidiMessageQueueTest, EmptyData) {
73 MidiMessageQueue queue(false);
Avi Drissman3528fd02015-12-18 20:11:31 -050074 std::vector<uint8_t> message;
yukawa@chromium.org09ef89a2013-11-29 06:27:41 +000075 queue.Get(&message);
76 EXPECT_TRUE(message.empty());
77}
78
toyoshim@chromium.orgc82e66e2014-02-04 07:05:47 +000079TEST(MidiMessageQueueTest, RunningStatusDisabled) {
80 MidiMessageQueue queue(false);
yukawa@chromium.org09ef89a2013-11-29 06:27:41 +000081 Add(&queue, kGMOn);
82 Add(&queue, kBrokenData1);
83 Add(&queue, kNoteOnWithRunningStatus);
84 Add(&queue, kBrokenData2);
85 Add(&queue, kChannelPressureWithRunningStatus);
86 Add(&queue, kBrokenData3);
87 Add(&queue, kNoteOn);
88 Add(&queue, kBrokenData1);
89 Add(&queue, kGSOn);
90 Add(&queue, kBrokenData2);
91 Add(&queue, kTimingClock);
92 Add(&queue, kBrokenData3);
93
Avi Drissman3528fd02015-12-18 20:11:31 -050094 std::vector<uint8_t> message;
yukawa@chromium.org09ef89a2013-11-29 06:27:41 +000095 queue.Get(&message);
96 EXPECT_MESSAGE(kGMOn, message);
97 queue.Get(&message);
98 EXPECT_MESSAGE(kNoteOn, message) << "Running status should be ignored";
99 queue.Get(&message);
100 EXPECT_MESSAGE(kChannelPressure, message)
101 << "Running status should be ignored";
102 queue.Get(&message);
103 EXPECT_MESSAGE(kNoteOn, message);
104 queue.Get(&message);
105 EXPECT_MESSAGE(kGSOn, message);
106 queue.Get(&message);
107 EXPECT_MESSAGE(kTimingClock, message);
108 queue.Get(&message);
109 EXPECT_TRUE(message.empty());
110}
111
toyoshim@chromium.orgc82e66e2014-02-04 07:05:47 +0000112TEST(MidiMessageQueueTest, RunningStatusEnabled) {
113 MidiMessageQueue queue(true);
yukawa@chromium.org09ef89a2013-11-29 06:27:41 +0000114 Add(&queue, kGMOn);
115 Add(&queue, kBrokenData1);
116 Add(&queue, kNoteOnWithRunningStatus);
117 Add(&queue, kBrokenData2);
118 Add(&queue, kChannelPressureWithRunningStatus);
119 Add(&queue, kBrokenData3);
120 Add(&queue, kNoteOn);
121 Add(&queue, kBrokenData1);
122 Add(&queue, kGSOn);
123 Add(&queue, kBrokenData2);
124 Add(&queue, kTimingClock);
125 Add(&queue, kDataByte0);
126
Avi Drissman3528fd02015-12-18 20:11:31 -0500127 std::vector<uint8_t> message;
yukawa@chromium.org09ef89a2013-11-29 06:27:41 +0000128 queue.Get(&message);
129 EXPECT_MESSAGE(kGMOn, message);
130 queue.Get(&message);
131 EXPECT_MESSAGE(kNoteOn, message);
132 queue.Get(&message);
133 EXPECT_MESSAGE(kNoteOn, message)
134 << "Running status should be converted into a canonical MIDI message";
135 queue.Get(&message);
136 EXPECT_MESSAGE(kNoteOn, message)
137 << "Running status should be converted into a canonical MIDI message";
138 queue.Get(&message);
139 EXPECT_MESSAGE(kChannelPressure, message);
140 queue.Get(&message);
141 EXPECT_MESSAGE(kChannelPressure, message)
142 << "Running status should be converted into a canonical MIDI message";
143 queue.Get(&message);
144 EXPECT_MESSAGE(kChannelPressure, message)
145 << "Running status should be converted into a canonical MIDI message";
146 queue.Get(&message);
147 EXPECT_MESSAGE(kNoteOn, message);
148 queue.Get(&message);
149 EXPECT_MESSAGE(kGSOn, message);
150 queue.Get(&message);
151 EXPECT_MESSAGE(kTimingClock, message);
152 queue.Get(&message);
153 EXPECT_TRUE(message.empty())
154 << "Running status must not be applied to real time messages";
155}
156
toyoshim@chromium.orgc82e66e2014-02-04 07:05:47 +0000157TEST(MidiMessageQueueTest, RunningStatusEnabledWithRealTimeEvent) {
158 MidiMessageQueue queue(true);
Avi Drissman3528fd02015-12-18 20:11:31 -0500159 const uint8_t kNoteOnWithRunningStatusWithTimingClock[] = {
160 0x90, 0xf8, 0x3c, 0xf8, 0x7f, 0xf8, 0x3c,
161 0xf8, 0x7f, 0xf8, 0x3c, 0xf8, 0x7f,
yukawa@chromium.org09ef89a2013-11-29 06:27:41 +0000162 };
toyoshim73c3f412015-02-22 21:18:09 -0800163 Add(&queue, kNoteOnWithRunningStatusWithTimingClock);
Avi Drissman3528fd02015-12-18 20:11:31 -0500164 std::vector<uint8_t> message;
yukawa@chromium.org09ef89a2013-11-29 06:27:41 +0000165 queue.Get(&message);
166 EXPECT_MESSAGE(kTimingClock, message);
167 queue.Get(&message);
168 EXPECT_MESSAGE(kTimingClock, message);
169 queue.Get(&message);
170 EXPECT_MESSAGE(kNoteOn, message);
171 queue.Get(&message);
172 EXPECT_MESSAGE(kTimingClock, message);
173 queue.Get(&message);
174 EXPECT_MESSAGE(kTimingClock, message);
175 queue.Get(&message);
176 EXPECT_MESSAGE(kNoteOn, message);
177 queue.Get(&message);
178 EXPECT_MESSAGE(kTimingClock, message);
179 queue.Get(&message);
180 EXPECT_MESSAGE(kTimingClock, message);
181 queue.Get(&message);
182 EXPECT_MESSAGE(kNoteOn, message);
183 queue.Get(&message);
184 EXPECT_TRUE(message.empty());
185}
186
toyoshim73c3f412015-02-22 21:18:09 -0800187TEST(MidiMessageQueueTest, RunningStatusEnabledWithSystemCommonMessage) {
188 MidiMessageQueue queue(true);
Avi Drissman3528fd02015-12-18 20:11:31 -0500189 const uint8_t kNoteOnWithRunningStatusWithSystemCommonMessage[] = {
190 0x90, 0x3c, 0x7f, 0xf1, 0x00, 0x3c, 0x7f, 0xf8, 0x90, 0x3c, 0x7f,
toyoshim73c3f412015-02-22 21:18:09 -0800191 };
192 Add(&queue, kNoteOnWithRunningStatusWithSystemCommonMessage);
Avi Drissman3528fd02015-12-18 20:11:31 -0500193 std::vector<uint8_t> message;
toyoshim73c3f412015-02-22 21:18:09 -0800194 queue.Get(&message);
195 EXPECT_MESSAGE(kNoteOn, message);
196 queue.Get(&message);
197 EXPECT_MESSAGE(kMTCFrame, message);
198 queue.Get(&message);
199 EXPECT_MESSAGE(kTimingClock, message) << "Running status should be reset";
200 queue.Get(&message);
201 EXPECT_MESSAGE(kNoteOn, message);
202 queue.Get(&message);
203 EXPECT_TRUE(message.empty());
204}
205
yukawaa0920f12015-10-08 00:09:59 -0700206TEST(MidiMessageQueueTest, Issue540016) {
Avi Drissman3528fd02015-12-18 20:11:31 -0500207 const uint8_t kData[] = {0xf4, 0x3a};
yukawaa0920f12015-10-08 00:09:59 -0700208 MidiMessageQueue queue(false);
209 Add(&queue, kData);
Avi Drissman3528fd02015-12-18 20:11:31 -0500210 std::vector<uint8_t> message;
yukawaa0920f12015-10-08 00:09:59 -0700211 queue.Get(&message);
212 EXPECT_TRUE(message.empty());
213}
214
215TEST(MidiMessageQueueTest, ReconstructNonSysExMessage) {
216 MidiMessageQueue queue(true);
Avi Drissman3528fd02015-12-18 20:11:31 -0500217 std::vector<uint8_t> message;
yukawaa0920f12015-10-08 00:09:59 -0700218
219 Add(&queue, kPartialNoteOn1st);
220 queue.Get(&message);
221 EXPECT_TRUE(message.empty());
222
223 Add(&queue, kPartialNoteOn2nd);
224 queue.Get(&message);
225 EXPECT_TRUE(message.empty());
226
227 Add(&queue, kPartialNoteOn3rd);
228 queue.Get(&message);
229 EXPECT_MESSAGE(kNoteOn, message);
230
231 queue.Get(&message);
232 EXPECT_TRUE(message.empty());
233}
234
235TEST(MidiMessageQueueTest, ReconstructBrokenNonSysExMessage) {
236 MidiMessageQueue queue(true);
Avi Drissman3528fd02015-12-18 20:11:31 -0500237 std::vector<uint8_t> message;
yukawaa0920f12015-10-08 00:09:59 -0700238
239 Add(&queue, kPartialNoteOn1st);
240 queue.Get(&message);
241 EXPECT_TRUE(message.empty());
242
243 Add(&queue, kPartialNoteOn2nd);
244 queue.Get(&message);
245 EXPECT_TRUE(message.empty());
246
247 Add(&queue, kPartialGMOn1st);
248 queue.Get(&message);
249 EXPECT_TRUE(message.empty());
250
251 Add(&queue, kPartialNoteOn3rd);
252 queue.Get(&message);
253 EXPECT_TRUE(message.empty());
254}
255
256TEST(MidiMessageQueueTest, ReconstructSysExMessage) {
257 MidiMessageQueue queue(true);
Avi Drissman3528fd02015-12-18 20:11:31 -0500258 std::vector<uint8_t> message;
yukawaa0920f12015-10-08 00:09:59 -0700259
260 Add(&queue, kPartialGMOn1st);
261 queue.Get(&message);
262 EXPECT_TRUE(message.empty());
263
264 Add(&queue, kPartialGMOn2nd);
265 queue.Get(&message);
266 EXPECT_TRUE(message.empty());
267
268 Add(&queue, kPartialGMOn3rd);
269 queue.Get(&message);
270 EXPECT_MESSAGE(kGMOn, message);
271
272 queue.Get(&message);
273 EXPECT_TRUE(message.empty());
274}
275
276TEST(MidiMessageQueueTest, ReconstructBrokenSysExMessage) {
277 MidiMessageQueue queue(true);
Avi Drissman3528fd02015-12-18 20:11:31 -0500278 std::vector<uint8_t> message;
yukawaa0920f12015-10-08 00:09:59 -0700279
280 Add(&queue, kPartialGMOn1st);
281 queue.Get(&message);
282 EXPECT_TRUE(message.empty());
283
284 Add(&queue, kPartialGMOn2nd);
285 queue.Get(&message);
286 EXPECT_TRUE(message.empty());
287
288 Add(&queue, kPartialNoteOn1st);
289 queue.Get(&message);
290 EXPECT_TRUE(message.empty());
291
292 Add(&queue, kPartialGMOn3rd);
293 queue.Get(&message);
294 EXPECT_TRUE(message.empty());
295
296 queue.Get(&message);
297 EXPECT_TRUE(message.empty());
298}
299
300TEST(MidiMessageQueueTest, OneByteMessage) {
301 MidiMessageQueue queue(true);
Avi Drissman3528fd02015-12-18 20:11:31 -0500302 std::vector<uint8_t> message;
yukawaa0920f12015-10-08 00:09:59 -0700303
304 Add(&queue, kSystemCommonMessageTuneRequest);
305 Add(&queue, kSystemCommonMessageTuneRequest);
306 Add(&queue, kSystemCommonMessageTuneRequest);
307 Add(&queue, kSystemCommonMessageTuneRequest);
308 Add(&queue, kNoteOn);
309 Add(&queue, kSystemCommonMessageTuneRequest);
310 Add(&queue, kNoteOn);
311 Add(&queue, kNoteOn);
312 Add(&queue, kSystemCommonMessageTuneRequest);
313
314 queue.Get(&message);
315 EXPECT_MESSAGE(kSystemCommonMessageTuneRequest, message);
316 queue.Get(&message);
317 EXPECT_MESSAGE(kSystemCommonMessageTuneRequest, message);
318 queue.Get(&message);
319 EXPECT_MESSAGE(kSystemCommonMessageTuneRequest, message);
320 queue.Get(&message);
321 EXPECT_MESSAGE(kSystemCommonMessageTuneRequest, message);
322 queue.Get(&message);
323 EXPECT_MESSAGE(kNoteOn, message);
324 queue.Get(&message);
325 EXPECT_MESSAGE(kSystemCommonMessageTuneRequest, message);
326 queue.Get(&message);
327 EXPECT_MESSAGE(kNoteOn, message);
328 queue.Get(&message);
329 EXPECT_MESSAGE(kNoteOn, message);
330 queue.Get(&message);
331 EXPECT_MESSAGE(kSystemCommonMessageTuneRequest, message);
332 queue.Get(&message);
333 EXPECT_TRUE(message.empty());
334}
335
336TEST(MidiMessageQueueTest, OneByteMessageInjectedInNonSysExMessage) {
337 MidiMessageQueue queue(true);
Avi Drissman3528fd02015-12-18 20:11:31 -0500338 std::vector<uint8_t> message;
yukawaa0920f12015-10-08 00:09:59 -0700339
340 Add(&queue, kPartialNoteOn1st);
341 queue.Get(&message);
342 EXPECT_TRUE(message.empty());
343
344 Add(&queue, kPartialNoteOn2nd);
345 queue.Get(&message);
346 EXPECT_TRUE(message.empty());
347
348 Add(&queue, kSystemCommonMessageTuneRequest);
349 queue.Get(&message);
350 EXPECT_MESSAGE(kSystemCommonMessageTuneRequest, message);
351
352 queue.Get(&message);
353 EXPECT_TRUE(message.empty());
354
355 Add(&queue, kPartialNoteOn3rd);
356 queue.Get(&message);
357 EXPECT_TRUE(message.empty());
358}
359
360TEST(MidiMessageQueueTest, OneByteMessageInjectedInSysExMessage) {
361 MidiMessageQueue queue(true);
Avi Drissman3528fd02015-12-18 20:11:31 -0500362 std::vector<uint8_t> message;
yukawaa0920f12015-10-08 00:09:59 -0700363
364 Add(&queue, kPartialGMOn1st);
365 queue.Get(&message);
366 EXPECT_TRUE(message.empty());
367
368 Add(&queue, kPartialGMOn2nd);
369 queue.Get(&message);
370 EXPECT_TRUE(message.empty());
371
372 Add(&queue, kSystemCommonMessageTuneRequest);
373 queue.Get(&message);
374 EXPECT_MESSAGE(kSystemCommonMessageTuneRequest, message);
375
376 queue.Get(&message);
377 EXPECT_TRUE(message.empty());
378
379 Add(&queue, kPartialGMOn3rd);
380 queue.Get(&message);
381 EXPECT_TRUE(message.empty());
382}
383
384TEST(MidiMessageQueueTest, ReservedMessage) {
385 MidiMessageQueue queue(true);
Avi Drissman3528fd02015-12-18 20:11:31 -0500386 std::vector<uint8_t> message;
yukawaa0920f12015-10-08 00:09:59 -0700387
388 Add(&queue, kReservedMessage1);
389 Add(&queue, kNoteOn);
390 Add(&queue, kReservedMessage2);
391 Add(&queue, kNoteOn);
392 Add(&queue, kReservedMessage1WithDataBytes);
393 Add(&queue, kNoteOn);
394 Add(&queue, kReservedMessage2);
395 Add(&queue, kReservedMessage1WithDataBytes);
396 Add(&queue, kNoteOn);
397 Add(&queue, kReservedMessage1WithDataBytes);
398 Add(&queue, kReservedMessage2);
399 Add(&queue, kNoteOn);
400
401 queue.Get(&message);
402 EXPECT_MESSAGE(kNoteOn, message);
403 queue.Get(&message);
404 EXPECT_MESSAGE(kNoteOn, message);
405 queue.Get(&message);
406 EXPECT_MESSAGE(kNoteOn, message);
407 queue.Get(&message);
408 EXPECT_MESSAGE(kNoteOn, message);
409 queue.Get(&message);
410 EXPECT_MESSAGE(kNoteOn, message);
411
412 Add(&queue, kReservedMessage1);
413 queue.Get(&message);
414 EXPECT_TRUE(message.empty());
415 queue.Get(&message);
416 EXPECT_TRUE(message.empty());
417
418 Add(&queue, kNoteOn);
419 queue.Get(&message);
420 EXPECT_MESSAGE(kNoteOn, message);
421 queue.Get(&message);
422 EXPECT_TRUE(message.empty());
423
424 Add(&queue, kReservedMessage2);
425 queue.Get(&message);
426 EXPECT_TRUE(message.empty());
427 queue.Get(&message);
428 EXPECT_TRUE(message.empty());
429
430 Add(&queue, kNoteOn);
431 queue.Get(&message);
432 EXPECT_MESSAGE(kNoteOn, message);
433 queue.Get(&message);
434 EXPECT_TRUE(message.empty());
435
436 Add(&queue, kReservedMessage1WithDataBytes);
437 queue.Get(&message);
438 EXPECT_TRUE(message.empty());
439 queue.Get(&message);
440 EXPECT_TRUE(message.empty());
441
442 Add(&queue, kNoteOn);
443 queue.Get(&message);
444 EXPECT_MESSAGE(kNoteOn, message);
445 queue.Get(&message);
446 EXPECT_TRUE(message.empty());
447
448 Add(&queue, kReservedMessage2);
449 Add(&queue, kReservedMessage1WithDataBytes);
450 queue.Get(&message);
451 EXPECT_TRUE(message.empty());
452 queue.Get(&message);
453 EXPECT_TRUE(message.empty());
454
455 Add(&queue, kNoteOn);
456 queue.Get(&message);
457 EXPECT_MESSAGE(kNoteOn, message);
458 queue.Get(&message);
459 EXPECT_TRUE(message.empty());
460
461 Add(&queue, kReservedMessage1WithDataBytes);
462 Add(&queue, kReservedMessage2);
463 queue.Get(&message);
464 EXPECT_TRUE(message.empty());
465 queue.Get(&message);
466 EXPECT_TRUE(message.empty());
467
468 Add(&queue, kNoteOn);
469 queue.Get(&message);
470 EXPECT_MESSAGE(kNoteOn, message);
471 queue.Get(&message);
472 EXPECT_TRUE(message.empty());
473}
474
475TEST(MidiMessageQueueTest, ReservedMessageInjectedInNonSysExMessage) {
476 MidiMessageQueue queue(true);
Avi Drissman3528fd02015-12-18 20:11:31 -0500477 std::vector<uint8_t> message;
yukawaa0920f12015-10-08 00:09:59 -0700478
479 // Inject |kReservedMessage1|
480 Add(&queue, kPartialNoteOn1st);
481 queue.Get(&message);
482 EXPECT_TRUE(message.empty());
483 Add(&queue, kPartialNoteOn2nd);
484 queue.Get(&message);
485 EXPECT_TRUE(message.empty());
486 Add(&queue, kReservedMessage1);
487 queue.Get(&message);
488 EXPECT_TRUE(message.empty());
489 Add(&queue, kPartialNoteOn3rd);
490 queue.Get(&message);
491 EXPECT_TRUE(message.empty());
492
493 // Inject |kReservedMessage2|
494 Add(&queue, kPartialNoteOn1st);
495 queue.Get(&message);
496 EXPECT_TRUE(message.empty());
497 Add(&queue, kPartialNoteOn2nd);
498 queue.Get(&message);
499 EXPECT_TRUE(message.empty());
500 Add(&queue, kReservedMessage2);
501 queue.Get(&message);
502 EXPECT_TRUE(message.empty());
503 Add(&queue, kPartialNoteOn3rd);
504 queue.Get(&message);
505 EXPECT_TRUE(message.empty());
506
507 // Inject |kReservedMessage1WithDataBytes|
508 Add(&queue, kPartialNoteOn1st);
509 queue.Get(&message);
510 EXPECT_TRUE(message.empty());
511 Add(&queue, kPartialNoteOn2nd);
512 queue.Get(&message);
513 EXPECT_TRUE(message.empty());
514 Add(&queue, kReservedMessage1WithDataBytes);
515 queue.Get(&message);
516 EXPECT_TRUE(message.empty());
517 Add(&queue, kPartialNoteOn3rd);
518 queue.Get(&message);
519 EXPECT_TRUE(message.empty());
520}
521
522TEST(MidiMessageQueueTest, ReservedMessageInjectedInSysExMessage) {
523 MidiMessageQueue queue(true);
Avi Drissman3528fd02015-12-18 20:11:31 -0500524 std::vector<uint8_t> message;
yukawaa0920f12015-10-08 00:09:59 -0700525
526 // Inject |kReservedMessage1|
527 Add(&queue, kPartialGMOn1st);
528 queue.Get(&message);
529 EXPECT_TRUE(message.empty());
530 Add(&queue, kPartialGMOn2nd);
531 queue.Get(&message);
532 EXPECT_TRUE(message.empty());
533 Add(&queue, kReservedMessage1);
534 queue.Get(&message);
535 EXPECT_TRUE(message.empty());
536 Add(&queue, kPartialGMOn3rd);
537 queue.Get(&message);
538 EXPECT_TRUE(message.empty());
539
540 // Inject |kReservedMessage2|
541 Add(&queue, kPartialGMOn1st);
542 queue.Get(&message);
543 EXPECT_TRUE(message.empty());
544 Add(&queue, kPartialGMOn2nd);
545 queue.Get(&message);
546 EXPECT_TRUE(message.empty());
547 Add(&queue, kReservedMessage2);
548 queue.Get(&message);
549 EXPECT_TRUE(message.empty());
550 Add(&queue, kPartialGMOn3rd);
551 queue.Get(&message);
552 EXPECT_TRUE(message.empty());
553
554 // Inject |kReservedMessage1WithDataBytes|
555 Add(&queue, kPartialGMOn1st);
556 queue.Get(&message);
557 EXPECT_TRUE(message.empty());
558 Add(&queue, kPartialGMOn2nd);
559 queue.Get(&message);
560 EXPECT_TRUE(message.empty());
561 Add(&queue, kReservedMessage1WithDataBytes);
562 queue.Get(&message);
563 EXPECT_TRUE(message.empty());
564 Add(&queue, kPartialGMOn3rd);
565 queue.Get(&message);
566 EXPECT_TRUE(message.empty());
567}
568
yukawa@chromium.org09ef89a2013-11-29 06:27:41 +0000569} // namespace
toyoshime147c5e2015-05-07 21:58:31 -0700570} // namespace midi
yukawa@chromium.org09ef89a2013-11-29 06:27:41 +0000571} // namespace media