blob: 11077e7ad916a795e743f505b67c9e17ea84990d [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
avi793390d2015-12-22 22:22:36 -08007#include <stddef.h>
8#include <stdint.h>
9
yukawa@chromium.org09ef89a2013-11-29 06:27:41 +000010#include "testing/gtest/include/gtest/gtest.h"
11
toyoshime147c5e2015-05-07 21:58:31 -070012namespace midi {
yukawa@chromium.org09ef89a2013-11-29 06:27:41 +000013namespace {
14
Avi Drissman3528fd02015-12-18 20:11:31 -050015const uint8_t kGMOn[] = {0xf0, 0x7e, 0x7f, 0x09, 0x01, 0xf7};
16const uint8_t kPartialGMOn1st[] = {0xf0};
17const uint8_t kPartialGMOn2nd[] = {0x7e, 0x7f, 0x09, 0x01};
18const uint8_t kPartialGMOn3rd[] = {0xf7};
19const uint8_t kGSOn[] = {
20 0xf0, 0x41, 0x10, 0x42, 0x12, 0x40, 0x00, 0x7f, 0x00, 0x41, 0xf7,
yukawa@chromium.org09ef89a2013-11-29 06:27:41 +000021};
Avi Drissman3528fd02015-12-18 20:11:31 -050022const uint8_t kNoteOn[] = {0x90, 0x3c, 0x7f};
23const uint8_t kPartialNoteOn1st[] = {0x90};
24const uint8_t kPartialNoteOn2nd[] = {0x3c};
25const uint8_t kPartialNoteOn3rd[] = {0x7f};
yukawaa0920f12015-10-08 00:09:59 -070026
Avi Drissman3528fd02015-12-18 20:11:31 -050027const uint8_t kNoteOnWithRunningStatus[] = {
28 0x90, 0x3c, 0x7f, 0x3c, 0x7f, 0x3c, 0x7f,
yukawa@chromium.org09ef89a2013-11-29 06:27:41 +000029};
Avi Drissman3528fd02015-12-18 20:11:31 -050030const uint8_t kChannelPressure[] = {0xd0, 0x01};
31const uint8_t kChannelPressureWithRunningStatus[] = {
32 0xd0, 0x01, 0x01, 0x01,
yukawa@chromium.org09ef89a2013-11-29 06:27:41 +000033};
Avi Drissman3528fd02015-12-18 20:11:31 -050034const uint8_t kTimingClock[] = {0xf8};
35const uint8_t kSystemCommonMessageTuneRequest[] = {0xf6};
36const uint8_t kMTCFrame[] = {0xf1, 0x00};
37const uint8_t kBrokenData1[] = {0x92};
38const uint8_t kBrokenData2[] = {0xf7};
39const uint8_t kBrokenData3[] = {0xf2, 0x00};
40const uint8_t kDataByte0[] = {0x00};
yukawa@chromium.org09ef89a2013-11-29 06:27:41 +000041
Avi Drissman3528fd02015-12-18 20:11:31 -050042const uint8_t kReservedMessage1[] = {0xf4};
43const uint8_t kReservedMessage2[] = {0xf5};
44const uint8_t kReservedMessage1WithDataBytes[] = {0xf4, 0x01, 0x01,
45 0x01, 0x01, 0x01};
yukawaa0920f12015-10-08 00:09:59 -070046
yukawa@chromium.org09ef89a2013-11-29 06:27:41 +000047template <typename T, size_t N>
toyoshim@chromium.orgc82e66e2014-02-04 07:05:47 +000048void Add(MidiMessageQueue* queue, const T(&array)[N]) {
yukawa@chromium.org09ef89a2013-11-29 06:27:41 +000049 queue->Add(array, N);
50}
51
52template <typename T, size_t N>
53::testing::AssertionResult ExpectEqualSequence(
54 const char* expr1, const char* expr2,
55 const T(&expected)[N], const std::vector<T>& actual) {
56 if (actual.size() != N) {
57 return ::testing::AssertionFailure()
58 << "expected: " << ::testing::PrintToString(expected)
59 << ", actual: " << ::testing::PrintToString(actual);
60 }
61 for (size_t i = 0; i < N; ++i) {
62 if (expected[i] != actual[i]) {
63 return ::testing::AssertionFailure()
64 << "expected: " << ::testing::PrintToString(expected)
65 << ", actual: " << ::testing::PrintToString(actual);
66 }
67 }
68 return ::testing::AssertionSuccess();
69}
70
71#define EXPECT_MESSAGE(expected, actual) \
72 EXPECT_PRED_FORMAT2(ExpectEqualSequence, expected, actual)
73
toyoshim@chromium.orgc82e66e2014-02-04 07:05:47 +000074TEST(MidiMessageQueueTest, EmptyData) {
75 MidiMessageQueue queue(false);
Avi Drissman3528fd02015-12-18 20:11:31 -050076 std::vector<uint8_t> message;
yukawa@chromium.org09ef89a2013-11-29 06:27:41 +000077 queue.Get(&message);
78 EXPECT_TRUE(message.empty());
79}
80
toyoshim@chromium.orgc82e66e2014-02-04 07:05:47 +000081TEST(MidiMessageQueueTest, RunningStatusDisabled) {
82 MidiMessageQueue queue(false);
yukawa@chromium.org09ef89a2013-11-29 06:27:41 +000083 Add(&queue, kGMOn);
84 Add(&queue, kBrokenData1);
85 Add(&queue, kNoteOnWithRunningStatus);
86 Add(&queue, kBrokenData2);
87 Add(&queue, kChannelPressureWithRunningStatus);
88 Add(&queue, kBrokenData3);
89 Add(&queue, kNoteOn);
90 Add(&queue, kBrokenData1);
91 Add(&queue, kGSOn);
92 Add(&queue, kBrokenData2);
93 Add(&queue, kTimingClock);
94 Add(&queue, kBrokenData3);
95
Avi Drissman3528fd02015-12-18 20:11:31 -050096 std::vector<uint8_t> message;
yukawa@chromium.org09ef89a2013-11-29 06:27:41 +000097 queue.Get(&message);
98 EXPECT_MESSAGE(kGMOn, message);
99 queue.Get(&message);
100 EXPECT_MESSAGE(kNoteOn, message) << "Running status should be ignored";
101 queue.Get(&message);
102 EXPECT_MESSAGE(kChannelPressure, message)
103 << "Running status should be ignored";
104 queue.Get(&message);
105 EXPECT_MESSAGE(kNoteOn, message);
106 queue.Get(&message);
107 EXPECT_MESSAGE(kGSOn, message);
108 queue.Get(&message);
109 EXPECT_MESSAGE(kTimingClock, message);
110 queue.Get(&message);
111 EXPECT_TRUE(message.empty());
112}
113
toyoshim@chromium.orgc82e66e2014-02-04 07:05:47 +0000114TEST(MidiMessageQueueTest, RunningStatusEnabled) {
115 MidiMessageQueue queue(true);
yukawa@chromium.org09ef89a2013-11-29 06:27:41 +0000116 Add(&queue, kGMOn);
117 Add(&queue, kBrokenData1);
118 Add(&queue, kNoteOnWithRunningStatus);
119 Add(&queue, kBrokenData2);
120 Add(&queue, kChannelPressureWithRunningStatus);
121 Add(&queue, kBrokenData3);
122 Add(&queue, kNoteOn);
123 Add(&queue, kBrokenData1);
124 Add(&queue, kGSOn);
125 Add(&queue, kBrokenData2);
126 Add(&queue, kTimingClock);
127 Add(&queue, kDataByte0);
128
Avi Drissman3528fd02015-12-18 20:11:31 -0500129 std::vector<uint8_t> message;
yukawa@chromium.org09ef89a2013-11-29 06:27:41 +0000130 queue.Get(&message);
131 EXPECT_MESSAGE(kGMOn, message);
132 queue.Get(&message);
133 EXPECT_MESSAGE(kNoteOn, message);
134 queue.Get(&message);
135 EXPECT_MESSAGE(kNoteOn, message)
136 << "Running status should be converted into a canonical MIDI message";
137 queue.Get(&message);
138 EXPECT_MESSAGE(kNoteOn, message)
139 << "Running status should be converted into a canonical MIDI message";
140 queue.Get(&message);
141 EXPECT_MESSAGE(kChannelPressure, message);
142 queue.Get(&message);
143 EXPECT_MESSAGE(kChannelPressure, message)
144 << "Running status should be converted into a canonical MIDI message";
145 queue.Get(&message);
146 EXPECT_MESSAGE(kChannelPressure, message)
147 << "Running status should be converted into a canonical MIDI message";
148 queue.Get(&message);
149 EXPECT_MESSAGE(kNoteOn, message);
150 queue.Get(&message);
151 EXPECT_MESSAGE(kGSOn, message);
152 queue.Get(&message);
153 EXPECT_MESSAGE(kTimingClock, message);
154 queue.Get(&message);
155 EXPECT_TRUE(message.empty())
156 << "Running status must not be applied to real time messages";
157}
158
toyoshim@chromium.orgc82e66e2014-02-04 07:05:47 +0000159TEST(MidiMessageQueueTest, RunningStatusEnabledWithRealTimeEvent) {
160 MidiMessageQueue queue(true);
Avi Drissman3528fd02015-12-18 20:11:31 -0500161 const uint8_t kNoteOnWithRunningStatusWithTimingClock[] = {
162 0x90, 0xf8, 0x3c, 0xf8, 0x7f, 0xf8, 0x3c,
163 0xf8, 0x7f, 0xf8, 0x3c, 0xf8, 0x7f,
yukawa@chromium.org09ef89a2013-11-29 06:27:41 +0000164 };
toyoshim73c3f412015-02-22 21:18:09 -0800165 Add(&queue, kNoteOnWithRunningStatusWithTimingClock);
Avi Drissman3528fd02015-12-18 20:11:31 -0500166 std::vector<uint8_t> message;
yukawa@chromium.org09ef89a2013-11-29 06:27:41 +0000167 queue.Get(&message);
168 EXPECT_MESSAGE(kTimingClock, message);
169 queue.Get(&message);
170 EXPECT_MESSAGE(kTimingClock, message);
171 queue.Get(&message);
172 EXPECT_MESSAGE(kNoteOn, message);
173 queue.Get(&message);
174 EXPECT_MESSAGE(kTimingClock, message);
175 queue.Get(&message);
176 EXPECT_MESSAGE(kTimingClock, message);
177 queue.Get(&message);
178 EXPECT_MESSAGE(kNoteOn, message);
179 queue.Get(&message);
180 EXPECT_MESSAGE(kTimingClock, message);
181 queue.Get(&message);
182 EXPECT_MESSAGE(kTimingClock, message);
183 queue.Get(&message);
184 EXPECT_MESSAGE(kNoteOn, message);
185 queue.Get(&message);
186 EXPECT_TRUE(message.empty());
187}
188
toyoshim73c3f412015-02-22 21:18:09 -0800189TEST(MidiMessageQueueTest, RunningStatusEnabledWithSystemCommonMessage) {
190 MidiMessageQueue queue(true);
Avi Drissman3528fd02015-12-18 20:11:31 -0500191 const uint8_t kNoteOnWithRunningStatusWithSystemCommonMessage[] = {
192 0x90, 0x3c, 0x7f, 0xf1, 0x00, 0x3c, 0x7f, 0xf8, 0x90, 0x3c, 0x7f,
toyoshim73c3f412015-02-22 21:18:09 -0800193 };
194 Add(&queue, kNoteOnWithRunningStatusWithSystemCommonMessage);
Avi Drissman3528fd02015-12-18 20:11:31 -0500195 std::vector<uint8_t> message;
toyoshim73c3f412015-02-22 21:18:09 -0800196 queue.Get(&message);
197 EXPECT_MESSAGE(kNoteOn, message);
198 queue.Get(&message);
199 EXPECT_MESSAGE(kMTCFrame, message);
200 queue.Get(&message);
201 EXPECT_MESSAGE(kTimingClock, message) << "Running status should be reset";
202 queue.Get(&message);
203 EXPECT_MESSAGE(kNoteOn, message);
204 queue.Get(&message);
205 EXPECT_TRUE(message.empty());
206}
207
yukawaa0920f12015-10-08 00:09:59 -0700208TEST(MidiMessageQueueTest, Issue540016) {
Avi Drissman3528fd02015-12-18 20:11:31 -0500209 const uint8_t kData[] = {0xf4, 0x3a};
yukawaa0920f12015-10-08 00:09:59 -0700210 MidiMessageQueue queue(false);
211 Add(&queue, kData);
Avi Drissman3528fd02015-12-18 20:11:31 -0500212 std::vector<uint8_t> message;
yukawaa0920f12015-10-08 00:09:59 -0700213 queue.Get(&message);
214 EXPECT_TRUE(message.empty());
215}
216
217TEST(MidiMessageQueueTest, ReconstructNonSysExMessage) {
218 MidiMessageQueue queue(true);
Avi Drissman3528fd02015-12-18 20:11:31 -0500219 std::vector<uint8_t> message;
yukawaa0920f12015-10-08 00:09:59 -0700220
221 Add(&queue, kPartialNoteOn1st);
222 queue.Get(&message);
223 EXPECT_TRUE(message.empty());
224
225 Add(&queue, kPartialNoteOn2nd);
226 queue.Get(&message);
227 EXPECT_TRUE(message.empty());
228
229 Add(&queue, kPartialNoteOn3rd);
230 queue.Get(&message);
231 EXPECT_MESSAGE(kNoteOn, message);
232
233 queue.Get(&message);
234 EXPECT_TRUE(message.empty());
235}
236
237TEST(MidiMessageQueueTest, ReconstructBrokenNonSysExMessage) {
238 MidiMessageQueue queue(true);
Avi Drissman3528fd02015-12-18 20:11:31 -0500239 std::vector<uint8_t> message;
yukawaa0920f12015-10-08 00:09:59 -0700240
241 Add(&queue, kPartialNoteOn1st);
242 queue.Get(&message);
243 EXPECT_TRUE(message.empty());
244
245 Add(&queue, kPartialNoteOn2nd);
246 queue.Get(&message);
247 EXPECT_TRUE(message.empty());
248
249 Add(&queue, kPartialGMOn1st);
250 queue.Get(&message);
251 EXPECT_TRUE(message.empty());
252
253 Add(&queue, kPartialNoteOn3rd);
254 queue.Get(&message);
255 EXPECT_TRUE(message.empty());
256}
257
258TEST(MidiMessageQueueTest, ReconstructSysExMessage) {
259 MidiMessageQueue queue(true);
Avi Drissman3528fd02015-12-18 20:11:31 -0500260 std::vector<uint8_t> message;
yukawaa0920f12015-10-08 00:09:59 -0700261
262 Add(&queue, kPartialGMOn1st);
263 queue.Get(&message);
264 EXPECT_TRUE(message.empty());
265
266 Add(&queue, kPartialGMOn2nd);
267 queue.Get(&message);
268 EXPECT_TRUE(message.empty());
269
270 Add(&queue, kPartialGMOn3rd);
271 queue.Get(&message);
272 EXPECT_MESSAGE(kGMOn, message);
273
274 queue.Get(&message);
275 EXPECT_TRUE(message.empty());
276}
277
278TEST(MidiMessageQueueTest, ReconstructBrokenSysExMessage) {
279 MidiMessageQueue queue(true);
Avi Drissman3528fd02015-12-18 20:11:31 -0500280 std::vector<uint8_t> message;
yukawaa0920f12015-10-08 00:09:59 -0700281
282 Add(&queue, kPartialGMOn1st);
283 queue.Get(&message);
284 EXPECT_TRUE(message.empty());
285
286 Add(&queue, kPartialGMOn2nd);
287 queue.Get(&message);
288 EXPECT_TRUE(message.empty());
289
290 Add(&queue, kPartialNoteOn1st);
291 queue.Get(&message);
292 EXPECT_TRUE(message.empty());
293
294 Add(&queue, kPartialGMOn3rd);
295 queue.Get(&message);
296 EXPECT_TRUE(message.empty());
297
298 queue.Get(&message);
299 EXPECT_TRUE(message.empty());
300}
301
302TEST(MidiMessageQueueTest, OneByteMessage) {
303 MidiMessageQueue queue(true);
Avi Drissman3528fd02015-12-18 20:11:31 -0500304 std::vector<uint8_t> message;
yukawaa0920f12015-10-08 00:09:59 -0700305
306 Add(&queue, kSystemCommonMessageTuneRequest);
307 Add(&queue, kSystemCommonMessageTuneRequest);
308 Add(&queue, kSystemCommonMessageTuneRequest);
309 Add(&queue, kSystemCommonMessageTuneRequest);
310 Add(&queue, kNoteOn);
311 Add(&queue, kSystemCommonMessageTuneRequest);
312 Add(&queue, kNoteOn);
313 Add(&queue, kNoteOn);
314 Add(&queue, kSystemCommonMessageTuneRequest);
315
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(kSystemCommonMessageTuneRequest, message);
324 queue.Get(&message);
325 EXPECT_MESSAGE(kNoteOn, message);
326 queue.Get(&message);
327 EXPECT_MESSAGE(kSystemCommonMessageTuneRequest, message);
328 queue.Get(&message);
329 EXPECT_MESSAGE(kNoteOn, message);
330 queue.Get(&message);
331 EXPECT_MESSAGE(kNoteOn, message);
332 queue.Get(&message);
333 EXPECT_MESSAGE(kSystemCommonMessageTuneRequest, message);
334 queue.Get(&message);
335 EXPECT_TRUE(message.empty());
336}
337
338TEST(MidiMessageQueueTest, OneByteMessageInjectedInNonSysExMessage) {
339 MidiMessageQueue queue(true);
Avi Drissman3528fd02015-12-18 20:11:31 -0500340 std::vector<uint8_t> message;
yukawaa0920f12015-10-08 00:09:59 -0700341
342 Add(&queue, kPartialNoteOn1st);
343 queue.Get(&message);
344 EXPECT_TRUE(message.empty());
345
346 Add(&queue, kPartialNoteOn2nd);
347 queue.Get(&message);
348 EXPECT_TRUE(message.empty());
349
350 Add(&queue, kSystemCommonMessageTuneRequest);
351 queue.Get(&message);
352 EXPECT_MESSAGE(kSystemCommonMessageTuneRequest, message);
353
354 queue.Get(&message);
355 EXPECT_TRUE(message.empty());
356
357 Add(&queue, kPartialNoteOn3rd);
358 queue.Get(&message);
359 EXPECT_TRUE(message.empty());
360}
361
362TEST(MidiMessageQueueTest, OneByteMessageInjectedInSysExMessage) {
363 MidiMessageQueue queue(true);
Avi Drissman3528fd02015-12-18 20:11:31 -0500364 std::vector<uint8_t> message;
yukawaa0920f12015-10-08 00:09:59 -0700365
366 Add(&queue, kPartialGMOn1st);
367 queue.Get(&message);
368 EXPECT_TRUE(message.empty());
369
370 Add(&queue, kPartialGMOn2nd);
371 queue.Get(&message);
372 EXPECT_TRUE(message.empty());
373
374 Add(&queue, kSystemCommonMessageTuneRequest);
375 queue.Get(&message);
376 EXPECT_MESSAGE(kSystemCommonMessageTuneRequest, message);
377
378 queue.Get(&message);
379 EXPECT_TRUE(message.empty());
380
381 Add(&queue, kPartialGMOn3rd);
382 queue.Get(&message);
383 EXPECT_TRUE(message.empty());
384}
385
386TEST(MidiMessageQueueTest, ReservedMessage) {
387 MidiMessageQueue queue(true);
Avi Drissman3528fd02015-12-18 20:11:31 -0500388 std::vector<uint8_t> message;
yukawaa0920f12015-10-08 00:09:59 -0700389
390 Add(&queue, kReservedMessage1);
391 Add(&queue, kNoteOn);
392 Add(&queue, kReservedMessage2);
393 Add(&queue, kNoteOn);
394 Add(&queue, kReservedMessage1WithDataBytes);
395 Add(&queue, kNoteOn);
396 Add(&queue, kReservedMessage2);
397 Add(&queue, kReservedMessage1WithDataBytes);
398 Add(&queue, kNoteOn);
399 Add(&queue, kReservedMessage1WithDataBytes);
400 Add(&queue, kReservedMessage2);
401 Add(&queue, kNoteOn);
402
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 queue.Get(&message);
412 EXPECT_MESSAGE(kNoteOn, message);
413
414 Add(&queue, kReservedMessage1);
415 queue.Get(&message);
416 EXPECT_TRUE(message.empty());
417 queue.Get(&message);
418 EXPECT_TRUE(message.empty());
419
420 Add(&queue, kNoteOn);
421 queue.Get(&message);
422 EXPECT_MESSAGE(kNoteOn, message);
423 queue.Get(&message);
424 EXPECT_TRUE(message.empty());
425
426 Add(&queue, kReservedMessage2);
427 queue.Get(&message);
428 EXPECT_TRUE(message.empty());
429 queue.Get(&message);
430 EXPECT_TRUE(message.empty());
431
432 Add(&queue, kNoteOn);
433 queue.Get(&message);
434 EXPECT_MESSAGE(kNoteOn, message);
435 queue.Get(&message);
436 EXPECT_TRUE(message.empty());
437
438 Add(&queue, kReservedMessage1WithDataBytes);
439 queue.Get(&message);
440 EXPECT_TRUE(message.empty());
441 queue.Get(&message);
442 EXPECT_TRUE(message.empty());
443
444 Add(&queue, kNoteOn);
445 queue.Get(&message);
446 EXPECT_MESSAGE(kNoteOn, message);
447 queue.Get(&message);
448 EXPECT_TRUE(message.empty());
449
450 Add(&queue, kReservedMessage2);
451 Add(&queue, kReservedMessage1WithDataBytes);
452 queue.Get(&message);
453 EXPECT_TRUE(message.empty());
454 queue.Get(&message);
455 EXPECT_TRUE(message.empty());
456
457 Add(&queue, kNoteOn);
458 queue.Get(&message);
459 EXPECT_MESSAGE(kNoteOn, message);
460 queue.Get(&message);
461 EXPECT_TRUE(message.empty());
462
463 Add(&queue, kReservedMessage1WithDataBytes);
464 Add(&queue, kReservedMessage2);
465 queue.Get(&message);
466 EXPECT_TRUE(message.empty());
467 queue.Get(&message);
468 EXPECT_TRUE(message.empty());
469
470 Add(&queue, kNoteOn);
471 queue.Get(&message);
472 EXPECT_MESSAGE(kNoteOn, message);
473 queue.Get(&message);
474 EXPECT_TRUE(message.empty());
475}
476
477TEST(MidiMessageQueueTest, ReservedMessageInjectedInNonSysExMessage) {
478 MidiMessageQueue queue(true);
Avi Drissman3528fd02015-12-18 20:11:31 -0500479 std::vector<uint8_t> message;
yukawaa0920f12015-10-08 00:09:59 -0700480
481 // Inject |kReservedMessage1|
482 Add(&queue, kPartialNoteOn1st);
483 queue.Get(&message);
484 EXPECT_TRUE(message.empty());
485 Add(&queue, kPartialNoteOn2nd);
486 queue.Get(&message);
487 EXPECT_TRUE(message.empty());
488 Add(&queue, kReservedMessage1);
489 queue.Get(&message);
490 EXPECT_TRUE(message.empty());
491 Add(&queue, kPartialNoteOn3rd);
492 queue.Get(&message);
493 EXPECT_TRUE(message.empty());
494
495 // Inject |kReservedMessage2|
496 Add(&queue, kPartialNoteOn1st);
497 queue.Get(&message);
498 EXPECT_TRUE(message.empty());
499 Add(&queue, kPartialNoteOn2nd);
500 queue.Get(&message);
501 EXPECT_TRUE(message.empty());
502 Add(&queue, kReservedMessage2);
503 queue.Get(&message);
504 EXPECT_TRUE(message.empty());
505 Add(&queue, kPartialNoteOn3rd);
506 queue.Get(&message);
507 EXPECT_TRUE(message.empty());
508
509 // Inject |kReservedMessage1WithDataBytes|
510 Add(&queue, kPartialNoteOn1st);
511 queue.Get(&message);
512 EXPECT_TRUE(message.empty());
513 Add(&queue, kPartialNoteOn2nd);
514 queue.Get(&message);
515 EXPECT_TRUE(message.empty());
516 Add(&queue, kReservedMessage1WithDataBytes);
517 queue.Get(&message);
518 EXPECT_TRUE(message.empty());
519 Add(&queue, kPartialNoteOn3rd);
520 queue.Get(&message);
521 EXPECT_TRUE(message.empty());
522}
523
524TEST(MidiMessageQueueTest, ReservedMessageInjectedInSysExMessage) {
525 MidiMessageQueue queue(true);
Avi Drissman3528fd02015-12-18 20:11:31 -0500526 std::vector<uint8_t> message;
yukawaa0920f12015-10-08 00:09:59 -0700527
528 // Inject |kReservedMessage1|
529 Add(&queue, kPartialGMOn1st);
530 queue.Get(&message);
531 EXPECT_TRUE(message.empty());
532 Add(&queue, kPartialGMOn2nd);
533 queue.Get(&message);
534 EXPECT_TRUE(message.empty());
535 Add(&queue, kReservedMessage1);
536 queue.Get(&message);
537 EXPECT_TRUE(message.empty());
538 Add(&queue, kPartialGMOn3rd);
539 queue.Get(&message);
540 EXPECT_TRUE(message.empty());
541
542 // Inject |kReservedMessage2|
543 Add(&queue, kPartialGMOn1st);
544 queue.Get(&message);
545 EXPECT_TRUE(message.empty());
546 Add(&queue, kPartialGMOn2nd);
547 queue.Get(&message);
548 EXPECT_TRUE(message.empty());
549 Add(&queue, kReservedMessage2);
550 queue.Get(&message);
551 EXPECT_TRUE(message.empty());
552 Add(&queue, kPartialGMOn3rd);
553 queue.Get(&message);
554 EXPECT_TRUE(message.empty());
555
556 // Inject |kReservedMessage1WithDataBytes|
557 Add(&queue, kPartialGMOn1st);
558 queue.Get(&message);
559 EXPECT_TRUE(message.empty());
560 Add(&queue, kPartialGMOn2nd);
561 queue.Get(&message);
562 EXPECT_TRUE(message.empty());
563 Add(&queue, kReservedMessage1WithDataBytes);
564 queue.Get(&message);
565 EXPECT_TRUE(message.empty());
566 Add(&queue, kPartialGMOn3rd);
567 queue.Get(&message);
568 EXPECT_TRUE(message.empty());
569}
570
yukawa@chromium.org09ef89a2013-11-29 06:27:41 +0000571} // namespace
toyoshime147c5e2015-05-07 21:58:31 -0700572} // namespace midi