blob: 97c6e1cf510df6d79de3d015f500f7d351278089 [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
12namespace media {
toyoshime147c5e2015-05-07 21:58:31 -070013namespace midi {
yukawa@chromium.org09ef89a2013-11-29 06:27:41 +000014namespace {
15
Avi Drissman3528fd02015-12-18 20:11:31 -050016const uint8_t kGMOn[] = {0xf0, 0x7e, 0x7f, 0x09, 0x01, 0xf7};
17const uint8_t kPartialGMOn1st[] = {0xf0};
18const uint8_t kPartialGMOn2nd[] = {0x7e, 0x7f, 0x09, 0x01};
19const uint8_t kPartialGMOn3rd[] = {0xf7};
20const uint8_t kGSOn[] = {
21 0xf0, 0x41, 0x10, 0x42, 0x12, 0x40, 0x00, 0x7f, 0x00, 0x41, 0xf7,
yukawa@chromium.org09ef89a2013-11-29 06:27:41 +000022};
Avi Drissman3528fd02015-12-18 20:11:31 -050023const uint8_t kNoteOn[] = {0x90, 0x3c, 0x7f};
24const uint8_t kPartialNoteOn1st[] = {0x90};
25const uint8_t kPartialNoteOn2nd[] = {0x3c};
26const uint8_t kPartialNoteOn3rd[] = {0x7f};
yukawaa0920f12015-10-08 00:09:59 -070027
Avi Drissman3528fd02015-12-18 20:11:31 -050028const uint8_t kNoteOnWithRunningStatus[] = {
29 0x90, 0x3c, 0x7f, 0x3c, 0x7f, 0x3c, 0x7f,
yukawa@chromium.org09ef89a2013-11-29 06:27:41 +000030};
Avi Drissman3528fd02015-12-18 20:11:31 -050031const uint8_t kChannelPressure[] = {0xd0, 0x01};
32const uint8_t kChannelPressureWithRunningStatus[] = {
33 0xd0, 0x01, 0x01, 0x01,
yukawa@chromium.org09ef89a2013-11-29 06:27:41 +000034};
Avi Drissman3528fd02015-12-18 20:11:31 -050035const uint8_t kTimingClock[] = {0xf8};
36const uint8_t kSystemCommonMessageTuneRequest[] = {0xf6};
37const uint8_t kMTCFrame[] = {0xf1, 0x00};
38const uint8_t kBrokenData1[] = {0x92};
39const uint8_t kBrokenData2[] = {0xf7};
40const uint8_t kBrokenData3[] = {0xf2, 0x00};
41const uint8_t kDataByte0[] = {0x00};
yukawa@chromium.org09ef89a2013-11-29 06:27:41 +000042
Avi Drissman3528fd02015-12-18 20:11:31 -050043const uint8_t kReservedMessage1[] = {0xf4};
44const uint8_t kReservedMessage2[] = {0xf5};
45const uint8_t kReservedMessage1WithDataBytes[] = {0xf4, 0x01, 0x01,
46 0x01, 0x01, 0x01};
yukawaa0920f12015-10-08 00:09:59 -070047
yukawa@chromium.org09ef89a2013-11-29 06:27:41 +000048template <typename T, size_t N>
toyoshim@chromium.orgc82e66e2014-02-04 07:05:47 +000049void Add(MidiMessageQueue* queue, const T(&array)[N]) {
yukawa@chromium.org09ef89a2013-11-29 06:27:41 +000050 queue->Add(array, N);
51}
52
53template <typename T, size_t N>
54::testing::AssertionResult ExpectEqualSequence(
55 const char* expr1, const char* expr2,
56 const T(&expected)[N], const std::vector<T>& actual) {
57 if (actual.size() != N) {
58 return ::testing::AssertionFailure()
59 << "expected: " << ::testing::PrintToString(expected)
60 << ", actual: " << ::testing::PrintToString(actual);
61 }
62 for (size_t i = 0; i < N; ++i) {
63 if (expected[i] != actual[i]) {
64 return ::testing::AssertionFailure()
65 << "expected: " << ::testing::PrintToString(expected)
66 << ", actual: " << ::testing::PrintToString(actual);
67 }
68 }
69 return ::testing::AssertionSuccess();
70}
71
72#define EXPECT_MESSAGE(expected, actual) \
73 EXPECT_PRED_FORMAT2(ExpectEqualSequence, expected, actual)
74
toyoshim@chromium.orgc82e66e2014-02-04 07:05:47 +000075TEST(MidiMessageQueueTest, EmptyData) {
76 MidiMessageQueue queue(false);
Avi Drissman3528fd02015-12-18 20:11:31 -050077 std::vector<uint8_t> message;
yukawa@chromium.org09ef89a2013-11-29 06:27:41 +000078 queue.Get(&message);
79 EXPECT_TRUE(message.empty());
80}
81
toyoshim@chromium.orgc82e66e2014-02-04 07:05:47 +000082TEST(MidiMessageQueueTest, RunningStatusDisabled) {
83 MidiMessageQueue queue(false);
yukawa@chromium.org09ef89a2013-11-29 06:27:41 +000084 Add(&queue, kGMOn);
85 Add(&queue, kBrokenData1);
86 Add(&queue, kNoteOnWithRunningStatus);
87 Add(&queue, kBrokenData2);
88 Add(&queue, kChannelPressureWithRunningStatus);
89 Add(&queue, kBrokenData3);
90 Add(&queue, kNoteOn);
91 Add(&queue, kBrokenData1);
92 Add(&queue, kGSOn);
93 Add(&queue, kBrokenData2);
94 Add(&queue, kTimingClock);
95 Add(&queue, kBrokenData3);
96
Avi Drissman3528fd02015-12-18 20:11:31 -050097 std::vector<uint8_t> message;
yukawa@chromium.org09ef89a2013-11-29 06:27:41 +000098 queue.Get(&message);
99 EXPECT_MESSAGE(kGMOn, message);
100 queue.Get(&message);
101 EXPECT_MESSAGE(kNoteOn, message) << "Running status should be ignored";
102 queue.Get(&message);
103 EXPECT_MESSAGE(kChannelPressure, message)
104 << "Running status should be ignored";
105 queue.Get(&message);
106 EXPECT_MESSAGE(kNoteOn, message);
107 queue.Get(&message);
108 EXPECT_MESSAGE(kGSOn, message);
109 queue.Get(&message);
110 EXPECT_MESSAGE(kTimingClock, message);
111 queue.Get(&message);
112 EXPECT_TRUE(message.empty());
113}
114
toyoshim@chromium.orgc82e66e2014-02-04 07:05:47 +0000115TEST(MidiMessageQueueTest, RunningStatusEnabled) {
116 MidiMessageQueue queue(true);
yukawa@chromium.org09ef89a2013-11-29 06:27:41 +0000117 Add(&queue, kGMOn);
118 Add(&queue, kBrokenData1);
119 Add(&queue, kNoteOnWithRunningStatus);
120 Add(&queue, kBrokenData2);
121 Add(&queue, kChannelPressureWithRunningStatus);
122 Add(&queue, kBrokenData3);
123 Add(&queue, kNoteOn);
124 Add(&queue, kBrokenData1);
125 Add(&queue, kGSOn);
126 Add(&queue, kBrokenData2);
127 Add(&queue, kTimingClock);
128 Add(&queue, kDataByte0);
129
Avi Drissman3528fd02015-12-18 20:11:31 -0500130 std::vector<uint8_t> message;
yukawa@chromium.org09ef89a2013-11-29 06:27:41 +0000131 queue.Get(&message);
132 EXPECT_MESSAGE(kGMOn, message);
133 queue.Get(&message);
134 EXPECT_MESSAGE(kNoteOn, 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(kNoteOn, message)
140 << "Running status should be converted into a canonical MIDI message";
141 queue.Get(&message);
142 EXPECT_MESSAGE(kChannelPressure, 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(kChannelPressure, message)
148 << "Running status should be converted into a canonical MIDI message";
149 queue.Get(&message);
150 EXPECT_MESSAGE(kNoteOn, message);
151 queue.Get(&message);
152 EXPECT_MESSAGE(kGSOn, message);
153 queue.Get(&message);
154 EXPECT_MESSAGE(kTimingClock, message);
155 queue.Get(&message);
156 EXPECT_TRUE(message.empty())
157 << "Running status must not be applied to real time messages";
158}
159
toyoshim@chromium.orgc82e66e2014-02-04 07:05:47 +0000160TEST(MidiMessageQueueTest, RunningStatusEnabledWithRealTimeEvent) {
161 MidiMessageQueue queue(true);
Avi Drissman3528fd02015-12-18 20:11:31 -0500162 const uint8_t kNoteOnWithRunningStatusWithTimingClock[] = {
163 0x90, 0xf8, 0x3c, 0xf8, 0x7f, 0xf8, 0x3c,
164 0xf8, 0x7f, 0xf8, 0x3c, 0xf8, 0x7f,
yukawa@chromium.org09ef89a2013-11-29 06:27:41 +0000165 };
toyoshim73c3f412015-02-22 21:18:09 -0800166 Add(&queue, kNoteOnWithRunningStatusWithTimingClock);
Avi Drissman3528fd02015-12-18 20:11:31 -0500167 std::vector<uint8_t> message;
yukawa@chromium.org09ef89a2013-11-29 06:27:41 +0000168 queue.Get(&message);
169 EXPECT_MESSAGE(kTimingClock, message);
170 queue.Get(&message);
171 EXPECT_MESSAGE(kTimingClock, message);
172 queue.Get(&message);
173 EXPECT_MESSAGE(kNoteOn, message);
174 queue.Get(&message);
175 EXPECT_MESSAGE(kTimingClock, message);
176 queue.Get(&message);
177 EXPECT_MESSAGE(kTimingClock, message);
178 queue.Get(&message);
179 EXPECT_MESSAGE(kNoteOn, message);
180 queue.Get(&message);
181 EXPECT_MESSAGE(kTimingClock, message);
182 queue.Get(&message);
183 EXPECT_MESSAGE(kTimingClock, message);
184 queue.Get(&message);
185 EXPECT_MESSAGE(kNoteOn, message);
186 queue.Get(&message);
187 EXPECT_TRUE(message.empty());
188}
189
toyoshim73c3f412015-02-22 21:18:09 -0800190TEST(MidiMessageQueueTest, RunningStatusEnabledWithSystemCommonMessage) {
191 MidiMessageQueue queue(true);
Avi Drissman3528fd02015-12-18 20:11:31 -0500192 const uint8_t kNoteOnWithRunningStatusWithSystemCommonMessage[] = {
193 0x90, 0x3c, 0x7f, 0xf1, 0x00, 0x3c, 0x7f, 0xf8, 0x90, 0x3c, 0x7f,
toyoshim73c3f412015-02-22 21:18:09 -0800194 };
195 Add(&queue, kNoteOnWithRunningStatusWithSystemCommonMessage);
Avi Drissman3528fd02015-12-18 20:11:31 -0500196 std::vector<uint8_t> message;
toyoshim73c3f412015-02-22 21:18:09 -0800197 queue.Get(&message);
198 EXPECT_MESSAGE(kNoteOn, message);
199 queue.Get(&message);
200 EXPECT_MESSAGE(kMTCFrame, message);
201 queue.Get(&message);
202 EXPECT_MESSAGE(kTimingClock, message) << "Running status should be reset";
203 queue.Get(&message);
204 EXPECT_MESSAGE(kNoteOn, message);
205 queue.Get(&message);
206 EXPECT_TRUE(message.empty());
207}
208
yukawaa0920f12015-10-08 00:09:59 -0700209TEST(MidiMessageQueueTest, Issue540016) {
Avi Drissman3528fd02015-12-18 20:11:31 -0500210 const uint8_t kData[] = {0xf4, 0x3a};
yukawaa0920f12015-10-08 00:09:59 -0700211 MidiMessageQueue queue(false);
212 Add(&queue, kData);
Avi Drissman3528fd02015-12-18 20:11:31 -0500213 std::vector<uint8_t> message;
yukawaa0920f12015-10-08 00:09:59 -0700214 queue.Get(&message);
215 EXPECT_TRUE(message.empty());
216}
217
218TEST(MidiMessageQueueTest, ReconstructNonSysExMessage) {
219 MidiMessageQueue queue(true);
Avi Drissman3528fd02015-12-18 20:11:31 -0500220 std::vector<uint8_t> message;
yukawaa0920f12015-10-08 00:09:59 -0700221
222 Add(&queue, kPartialNoteOn1st);
223 queue.Get(&message);
224 EXPECT_TRUE(message.empty());
225
226 Add(&queue, kPartialNoteOn2nd);
227 queue.Get(&message);
228 EXPECT_TRUE(message.empty());
229
230 Add(&queue, kPartialNoteOn3rd);
231 queue.Get(&message);
232 EXPECT_MESSAGE(kNoteOn, message);
233
234 queue.Get(&message);
235 EXPECT_TRUE(message.empty());
236}
237
238TEST(MidiMessageQueueTest, ReconstructBrokenNonSysExMessage) {
239 MidiMessageQueue queue(true);
Avi Drissman3528fd02015-12-18 20:11:31 -0500240 std::vector<uint8_t> message;
yukawaa0920f12015-10-08 00:09:59 -0700241
242 Add(&queue, kPartialNoteOn1st);
243 queue.Get(&message);
244 EXPECT_TRUE(message.empty());
245
246 Add(&queue, kPartialNoteOn2nd);
247 queue.Get(&message);
248 EXPECT_TRUE(message.empty());
249
250 Add(&queue, kPartialGMOn1st);
251 queue.Get(&message);
252 EXPECT_TRUE(message.empty());
253
254 Add(&queue, kPartialNoteOn3rd);
255 queue.Get(&message);
256 EXPECT_TRUE(message.empty());
257}
258
259TEST(MidiMessageQueueTest, ReconstructSysExMessage) {
260 MidiMessageQueue queue(true);
Avi Drissman3528fd02015-12-18 20:11:31 -0500261 std::vector<uint8_t> message;
yukawaa0920f12015-10-08 00:09:59 -0700262
263 Add(&queue, kPartialGMOn1st);
264 queue.Get(&message);
265 EXPECT_TRUE(message.empty());
266
267 Add(&queue, kPartialGMOn2nd);
268 queue.Get(&message);
269 EXPECT_TRUE(message.empty());
270
271 Add(&queue, kPartialGMOn3rd);
272 queue.Get(&message);
273 EXPECT_MESSAGE(kGMOn, message);
274
275 queue.Get(&message);
276 EXPECT_TRUE(message.empty());
277}
278
279TEST(MidiMessageQueueTest, ReconstructBrokenSysExMessage) {
280 MidiMessageQueue queue(true);
Avi Drissman3528fd02015-12-18 20:11:31 -0500281 std::vector<uint8_t> message;
yukawaa0920f12015-10-08 00:09:59 -0700282
283 Add(&queue, kPartialGMOn1st);
284 queue.Get(&message);
285 EXPECT_TRUE(message.empty());
286
287 Add(&queue, kPartialGMOn2nd);
288 queue.Get(&message);
289 EXPECT_TRUE(message.empty());
290
291 Add(&queue, kPartialNoteOn1st);
292 queue.Get(&message);
293 EXPECT_TRUE(message.empty());
294
295 Add(&queue, kPartialGMOn3rd);
296 queue.Get(&message);
297 EXPECT_TRUE(message.empty());
298
299 queue.Get(&message);
300 EXPECT_TRUE(message.empty());
301}
302
303TEST(MidiMessageQueueTest, OneByteMessage) {
304 MidiMessageQueue queue(true);
Avi Drissman3528fd02015-12-18 20:11:31 -0500305 std::vector<uint8_t> message;
yukawaa0920f12015-10-08 00:09:59 -0700306
307 Add(&queue, kSystemCommonMessageTuneRequest);
308 Add(&queue, kSystemCommonMessageTuneRequest);
309 Add(&queue, kSystemCommonMessageTuneRequest);
310 Add(&queue, kSystemCommonMessageTuneRequest);
311 Add(&queue, kNoteOn);
312 Add(&queue, kSystemCommonMessageTuneRequest);
313 Add(&queue, kNoteOn);
314 Add(&queue, kNoteOn);
315 Add(&queue, kSystemCommonMessageTuneRequest);
316
317 queue.Get(&message);
318 EXPECT_MESSAGE(kSystemCommonMessageTuneRequest, message);
319 queue.Get(&message);
320 EXPECT_MESSAGE(kSystemCommonMessageTuneRequest, message);
321 queue.Get(&message);
322 EXPECT_MESSAGE(kSystemCommonMessageTuneRequest, message);
323 queue.Get(&message);
324 EXPECT_MESSAGE(kSystemCommonMessageTuneRequest, message);
325 queue.Get(&message);
326 EXPECT_MESSAGE(kNoteOn, message);
327 queue.Get(&message);
328 EXPECT_MESSAGE(kSystemCommonMessageTuneRequest, message);
329 queue.Get(&message);
330 EXPECT_MESSAGE(kNoteOn, message);
331 queue.Get(&message);
332 EXPECT_MESSAGE(kNoteOn, message);
333 queue.Get(&message);
334 EXPECT_MESSAGE(kSystemCommonMessageTuneRequest, message);
335 queue.Get(&message);
336 EXPECT_TRUE(message.empty());
337}
338
339TEST(MidiMessageQueueTest, OneByteMessageInjectedInNonSysExMessage) {
340 MidiMessageQueue queue(true);
Avi Drissman3528fd02015-12-18 20:11:31 -0500341 std::vector<uint8_t> message;
yukawaa0920f12015-10-08 00:09:59 -0700342
343 Add(&queue, kPartialNoteOn1st);
344 queue.Get(&message);
345 EXPECT_TRUE(message.empty());
346
347 Add(&queue, kPartialNoteOn2nd);
348 queue.Get(&message);
349 EXPECT_TRUE(message.empty());
350
351 Add(&queue, kSystemCommonMessageTuneRequest);
352 queue.Get(&message);
353 EXPECT_MESSAGE(kSystemCommonMessageTuneRequest, message);
354
355 queue.Get(&message);
356 EXPECT_TRUE(message.empty());
357
358 Add(&queue, kPartialNoteOn3rd);
359 queue.Get(&message);
360 EXPECT_TRUE(message.empty());
361}
362
363TEST(MidiMessageQueueTest, OneByteMessageInjectedInSysExMessage) {
364 MidiMessageQueue queue(true);
Avi Drissman3528fd02015-12-18 20:11:31 -0500365 std::vector<uint8_t> message;
yukawaa0920f12015-10-08 00:09:59 -0700366
367 Add(&queue, kPartialGMOn1st);
368 queue.Get(&message);
369 EXPECT_TRUE(message.empty());
370
371 Add(&queue, kPartialGMOn2nd);
372 queue.Get(&message);
373 EXPECT_TRUE(message.empty());
374
375 Add(&queue, kSystemCommonMessageTuneRequest);
376 queue.Get(&message);
377 EXPECT_MESSAGE(kSystemCommonMessageTuneRequest, message);
378
379 queue.Get(&message);
380 EXPECT_TRUE(message.empty());
381
382 Add(&queue, kPartialGMOn3rd);
383 queue.Get(&message);
384 EXPECT_TRUE(message.empty());
385}
386
387TEST(MidiMessageQueueTest, ReservedMessage) {
388 MidiMessageQueue queue(true);
Avi Drissman3528fd02015-12-18 20:11:31 -0500389 std::vector<uint8_t> message;
yukawaa0920f12015-10-08 00:09:59 -0700390
391 Add(&queue, kReservedMessage1);
392 Add(&queue, kNoteOn);
393 Add(&queue, kReservedMessage2);
394 Add(&queue, kNoteOn);
395 Add(&queue, kReservedMessage1WithDataBytes);
396 Add(&queue, kNoteOn);
397 Add(&queue, kReservedMessage2);
398 Add(&queue, kReservedMessage1WithDataBytes);
399 Add(&queue, kNoteOn);
400 Add(&queue, kReservedMessage1WithDataBytes);
401 Add(&queue, kReservedMessage2);
402 Add(&queue, kNoteOn);
403
404 queue.Get(&message);
405 EXPECT_MESSAGE(kNoteOn, message);
406 queue.Get(&message);
407 EXPECT_MESSAGE(kNoteOn, message);
408 queue.Get(&message);
409 EXPECT_MESSAGE(kNoteOn, message);
410 queue.Get(&message);
411 EXPECT_MESSAGE(kNoteOn, message);
412 queue.Get(&message);
413 EXPECT_MESSAGE(kNoteOn, message);
414
415 Add(&queue, kReservedMessage1);
416 queue.Get(&message);
417 EXPECT_TRUE(message.empty());
418 queue.Get(&message);
419 EXPECT_TRUE(message.empty());
420
421 Add(&queue, kNoteOn);
422 queue.Get(&message);
423 EXPECT_MESSAGE(kNoteOn, message);
424 queue.Get(&message);
425 EXPECT_TRUE(message.empty());
426
427 Add(&queue, kReservedMessage2);
428 queue.Get(&message);
429 EXPECT_TRUE(message.empty());
430 queue.Get(&message);
431 EXPECT_TRUE(message.empty());
432
433 Add(&queue, kNoteOn);
434 queue.Get(&message);
435 EXPECT_MESSAGE(kNoteOn, message);
436 queue.Get(&message);
437 EXPECT_TRUE(message.empty());
438
439 Add(&queue, kReservedMessage1WithDataBytes);
440 queue.Get(&message);
441 EXPECT_TRUE(message.empty());
442 queue.Get(&message);
443 EXPECT_TRUE(message.empty());
444
445 Add(&queue, kNoteOn);
446 queue.Get(&message);
447 EXPECT_MESSAGE(kNoteOn, message);
448 queue.Get(&message);
449 EXPECT_TRUE(message.empty());
450
451 Add(&queue, kReservedMessage2);
452 Add(&queue, kReservedMessage1WithDataBytes);
453 queue.Get(&message);
454 EXPECT_TRUE(message.empty());
455 queue.Get(&message);
456 EXPECT_TRUE(message.empty());
457
458 Add(&queue, kNoteOn);
459 queue.Get(&message);
460 EXPECT_MESSAGE(kNoteOn, message);
461 queue.Get(&message);
462 EXPECT_TRUE(message.empty());
463
464 Add(&queue, kReservedMessage1WithDataBytes);
465 Add(&queue, kReservedMessage2);
466 queue.Get(&message);
467 EXPECT_TRUE(message.empty());
468 queue.Get(&message);
469 EXPECT_TRUE(message.empty());
470
471 Add(&queue, kNoteOn);
472 queue.Get(&message);
473 EXPECT_MESSAGE(kNoteOn, message);
474 queue.Get(&message);
475 EXPECT_TRUE(message.empty());
476}
477
478TEST(MidiMessageQueueTest, ReservedMessageInjectedInNonSysExMessage) {
479 MidiMessageQueue queue(true);
Avi Drissman3528fd02015-12-18 20:11:31 -0500480 std::vector<uint8_t> message;
yukawaa0920f12015-10-08 00:09:59 -0700481
482 // Inject |kReservedMessage1|
483 Add(&queue, kPartialNoteOn1st);
484 queue.Get(&message);
485 EXPECT_TRUE(message.empty());
486 Add(&queue, kPartialNoteOn2nd);
487 queue.Get(&message);
488 EXPECT_TRUE(message.empty());
489 Add(&queue, kReservedMessage1);
490 queue.Get(&message);
491 EXPECT_TRUE(message.empty());
492 Add(&queue, kPartialNoteOn3rd);
493 queue.Get(&message);
494 EXPECT_TRUE(message.empty());
495
496 // Inject |kReservedMessage2|
497 Add(&queue, kPartialNoteOn1st);
498 queue.Get(&message);
499 EXPECT_TRUE(message.empty());
500 Add(&queue, kPartialNoteOn2nd);
501 queue.Get(&message);
502 EXPECT_TRUE(message.empty());
503 Add(&queue, kReservedMessage2);
504 queue.Get(&message);
505 EXPECT_TRUE(message.empty());
506 Add(&queue, kPartialNoteOn3rd);
507 queue.Get(&message);
508 EXPECT_TRUE(message.empty());
509
510 // Inject |kReservedMessage1WithDataBytes|
511 Add(&queue, kPartialNoteOn1st);
512 queue.Get(&message);
513 EXPECT_TRUE(message.empty());
514 Add(&queue, kPartialNoteOn2nd);
515 queue.Get(&message);
516 EXPECT_TRUE(message.empty());
517 Add(&queue, kReservedMessage1WithDataBytes);
518 queue.Get(&message);
519 EXPECT_TRUE(message.empty());
520 Add(&queue, kPartialNoteOn3rd);
521 queue.Get(&message);
522 EXPECT_TRUE(message.empty());
523}
524
525TEST(MidiMessageQueueTest, ReservedMessageInjectedInSysExMessage) {
526 MidiMessageQueue queue(true);
Avi Drissman3528fd02015-12-18 20:11:31 -0500527 std::vector<uint8_t> message;
yukawaa0920f12015-10-08 00:09:59 -0700528
529 // Inject |kReservedMessage1|
530 Add(&queue, kPartialGMOn1st);
531 queue.Get(&message);
532 EXPECT_TRUE(message.empty());
533 Add(&queue, kPartialGMOn2nd);
534 queue.Get(&message);
535 EXPECT_TRUE(message.empty());
536 Add(&queue, kReservedMessage1);
537 queue.Get(&message);
538 EXPECT_TRUE(message.empty());
539 Add(&queue, kPartialGMOn3rd);
540 queue.Get(&message);
541 EXPECT_TRUE(message.empty());
542
543 // Inject |kReservedMessage2|
544 Add(&queue, kPartialGMOn1st);
545 queue.Get(&message);
546 EXPECT_TRUE(message.empty());
547 Add(&queue, kPartialGMOn2nd);
548 queue.Get(&message);
549 EXPECT_TRUE(message.empty());
550 Add(&queue, kReservedMessage2);
551 queue.Get(&message);
552 EXPECT_TRUE(message.empty());
553 Add(&queue, kPartialGMOn3rd);
554 queue.Get(&message);
555 EXPECT_TRUE(message.empty());
556
557 // Inject |kReservedMessage1WithDataBytes|
558 Add(&queue, kPartialGMOn1st);
559 queue.Get(&message);
560 EXPECT_TRUE(message.empty());
561 Add(&queue, kPartialGMOn2nd);
562 queue.Get(&message);
563 EXPECT_TRUE(message.empty());
564 Add(&queue, kReservedMessage1WithDataBytes);
565 queue.Get(&message);
566 EXPECT_TRUE(message.empty());
567 Add(&queue, kPartialGMOn3rd);
568 queue.Get(&message);
569 EXPECT_TRUE(message.empty());
570}
571
yukawa@chromium.org09ef89a2013-11-29 06:27:41 +0000572} // namespace
toyoshime147c5e2015-05-07 21:58:31 -0700573} // namespace midi
yukawa@chromium.org09ef89a2013-11-29 06:27:41 +0000574} // namespace media