Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(273)

Side by Side Diff: media/midi/midi_message_queue_unittest.cc

Issue 68353002: Use MIDIMessageQueue/IsValidWebMIDIData for MIDI byte stream validation (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Use ScopedVector<T> instead to make legacy compilers happy. Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« media/midi/midi_manager.cc ('K') | « media/midi/midi_message_queue.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // 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 #include "testing/gtest/include/gtest/gtest.h"
7
8 namespace media {
9 namespace {
10
11 const uint8 kGMOn[] = { 0xf0, 0x7e, 0x7f, 0x09, 0x01, 0xf7 };
12 const uint8 kGSOn[] = {
13 0xf0, 0x41, 0x10, 0x42, 0x12, 0x40, 0x00, 0x7f, 0x00, 0x41, 0xf7,
14 };
15 const uint8 kNoteOn[] = { 0x90, 0x3c, 0x7f };
16 const uint8 kNoteOnWithRunningStatus[] = {
17 0x90, 0x3c, 0x7f, 0x3c, 0x7f, 0x3c, 0x7f,
18 };
19 const uint8 kChannelPressure[] = { 0xd0, 0x01 };
20 const uint8 kChannelPressureWithRunningStatus[] = {
21 0xd0, 0x01, 0x01, 0x01,
22 };
23 const uint8 kTimingClock[] = { 0xf8 };
24 const uint8 kBrokenData1[] = { 0x90 };
25 const uint8 kBrokenData2[] = { 0xf7 };
26 const uint8 kBrokenData3[] = { 0xf2, 0x00 };
27 const uint8 kDataByte0[] = { 0x00 };
28
29 template <typename T, size_t N>
30 void Add(MIDIMessageQueue* queue, const T(&array)[N]) {
31 queue->Add(array, N);
32 }
33
34 template <typename T, size_t N>
35 ::testing::AssertionResult ExpectEqualSequence(
36 const char* expr1, const char* expr2,
37 const T(&expected)[N], const std::vector<T>& actual) {
38 if (actual.size() != N) {
39 return ::testing::AssertionFailure()
40 << "expected: " << ::testing::PrintToString(expected)
41 << ", actual: " << ::testing::PrintToString(actual);
42 }
43 for (size_t i = 0; i < N; ++i) {
44 if (expected[i] != actual[i]) {
45 return ::testing::AssertionFailure()
46 << "expected: " << ::testing::PrintToString(expected)
47 << ", actual: " << ::testing::PrintToString(actual);
48 }
49 }
50 return ::testing::AssertionSuccess();
51 }
52
53 #define EXPECT_MESSAGE(expected, actual) \
54 EXPECT_PRED_FORMAT2(ExpectEqualSequence, expected, actual)
55
56 TEST(MIDIMessageQueueTest, EmptyData) {
57 MIDIMessageQueue queue(false);
58 std::vector<uint8> message;
59 queue.Get(&message);
60 EXPECT_TRUE(message.empty());
61 }
62
63 TEST(MIDIMessageQueueTest, RunningStatusDisabled) {
64 MIDIMessageQueue queue(false);
65 Add(&queue, kGMOn);
66 Add(&queue, kBrokenData1);
67 Add(&queue, kNoteOnWithRunningStatus);
68 Add(&queue, kBrokenData2);
69 Add(&queue, kChannelPressureWithRunningStatus);
70 Add(&queue, kBrokenData3);
71 Add(&queue, kNoteOn);
72 Add(&queue, kBrokenData1);
73 Add(&queue, kGSOn);
74 Add(&queue, kBrokenData2);
75 Add(&queue, kTimingClock);
76 Add(&queue, kBrokenData3);
77
78 std::vector<uint8> message;
79 queue.Get(&message);
80 EXPECT_MESSAGE(kGMOn, message);
81 queue.Get(&message);
82 EXPECT_MESSAGE(kNoteOn, message) << "Running status should be ignored";
83 queue.Get(&message);
84 EXPECT_MESSAGE(kChannelPressure, message)
85 << "Running status should be ignored";
86 queue.Get(&message);
87 EXPECT_MESSAGE(kNoteOn, message);
88 queue.Get(&message);
89 EXPECT_MESSAGE(kGSOn, message);
90 queue.Get(&message);
91 EXPECT_MESSAGE(kTimingClock, message);
92 queue.Get(&message);
93 EXPECT_TRUE(message.empty());
94 }
95
96 TEST(MIDIMessageQueueTest, RunningStatusEnabled) {
97 MIDIMessageQueue queue(true);
98 Add(&queue, kGMOn);
99 Add(&queue, kBrokenData1);
100 Add(&queue, kNoteOnWithRunningStatus);
101 Add(&queue, kBrokenData2);
102 Add(&queue, kChannelPressureWithRunningStatus);
103 Add(&queue, kBrokenData3);
104 Add(&queue, kNoteOn);
105 Add(&queue, kBrokenData1);
106 Add(&queue, kGSOn);
107 Add(&queue, kBrokenData2);
108 Add(&queue, kTimingClock);
109 Add(&queue, kDataByte0);
110
111 std::vector<uint8> message;
112 queue.Get(&message);
113 EXPECT_MESSAGE(kGMOn, message);
114 queue.Get(&message);
115 EXPECT_MESSAGE(kNoteOn, message);
116 queue.Get(&message);
117 EXPECT_MESSAGE(kNoteOn, message)
118 << "Running status should be converted into a canonical MIDI message";
119 queue.Get(&message);
120 EXPECT_MESSAGE(kNoteOn, message)
121 << "Running status should be converted into a canonical MIDI message";
122 queue.Get(&message);
123 EXPECT_MESSAGE(kChannelPressure, message);
124 queue.Get(&message);
125 EXPECT_MESSAGE(kChannelPressure, message)
126 << "Running status should be converted into a canonical MIDI message";
127 queue.Get(&message);
128 EXPECT_MESSAGE(kChannelPressure, message)
129 << "Running status should be converted into a canonical MIDI message";
130 queue.Get(&message);
131 EXPECT_MESSAGE(kNoteOn, message);
132 queue.Get(&message);
133 EXPECT_MESSAGE(kGSOn, message);
134 queue.Get(&message);
135 EXPECT_MESSAGE(kTimingClock, message);
136 queue.Get(&message);
137 EXPECT_TRUE(message.empty())
138 << "Running status must not be applied to real time messages";
139 }
140
141 TEST(MIDIMessageQueueTest, RunningStatusEnabledWithRealTimeEvent) {
142 MIDIMessageQueue queue(true);
143 const uint8 kNoteOnWithRunningStatusWithkTimingClock[] = {
144 0x90, 0xf8, 0x3c, 0xf8, 0x7f, 0xf8, 0x3c, 0xf8, 0x7f, 0xf8, 0x3c, 0xf8,
145 0x7f,
146 };
147 Add(&queue, kNoteOnWithRunningStatusWithkTimingClock);
148 std::vector<uint8> message;
149 queue.Get(&message);
150 EXPECT_MESSAGE(kTimingClock, message);
151 queue.Get(&message);
152 EXPECT_MESSAGE(kTimingClock, message);
153 queue.Get(&message);
154 EXPECT_MESSAGE(kNoteOn, message);
155 queue.Get(&message);
156 EXPECT_MESSAGE(kTimingClock, message);
157 queue.Get(&message);
158 EXPECT_MESSAGE(kTimingClock, message);
159 queue.Get(&message);
160 EXPECT_MESSAGE(kNoteOn, message);
161 queue.Get(&message);
162 EXPECT_MESSAGE(kTimingClock, message);
163 queue.Get(&message);
164 EXPECT_MESSAGE(kTimingClock, message);
165 queue.Get(&message);
166 EXPECT_MESSAGE(kNoteOn, message);
167 queue.Get(&message);
168 EXPECT_TRUE(message.empty());
169 }
170
171 } // namespace
172 } // namespace media
OLDNEW
« media/midi/midi_manager.cc ('K') | « media/midi/midi_message_queue.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698