OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "media/midi/midi_message_queue.h" | 5 #include "media/midi/midi_message_queue.h" |
6 | 6 |
7 #include "testing/gtest/include/gtest/gtest.h" | 7 #include "testing/gtest/include/gtest/gtest.h" |
8 | 8 |
9 namespace media { | 9 namespace media { |
10 namespace { | 10 namespace { |
(...skipping 10 matching lines...) Expand all Loading... |
21 const uint8 kChannelPressureWithRunningStatus[] = { | 21 const uint8 kChannelPressureWithRunningStatus[] = { |
22 0xd0, 0x01, 0x01, 0x01, | 22 0xd0, 0x01, 0x01, 0x01, |
23 }; | 23 }; |
24 const uint8 kTimingClock[] = { 0xf8 }; | 24 const uint8 kTimingClock[] = { 0xf8 }; |
25 const uint8 kBrokenData1[] = { 0x90 }; | 25 const uint8 kBrokenData1[] = { 0x90 }; |
26 const uint8 kBrokenData2[] = { 0xf7 }; | 26 const uint8 kBrokenData2[] = { 0xf7 }; |
27 const uint8 kBrokenData3[] = { 0xf2, 0x00 }; | 27 const uint8 kBrokenData3[] = { 0xf2, 0x00 }; |
28 const uint8 kDataByte0[] = { 0x00 }; | 28 const uint8 kDataByte0[] = { 0x00 }; |
29 | 29 |
30 template <typename T, size_t N> | 30 template <typename T, size_t N> |
31 void Add(MIDIMessageQueue* queue, const T(&array)[N]) { | 31 void Add(MidiMessageQueue* queue, const T(&array)[N]) { |
32 queue->Add(array, N); | 32 queue->Add(array, N); |
33 } | 33 } |
34 | 34 |
35 template <typename T, size_t N> | 35 template <typename T, size_t N> |
36 ::testing::AssertionResult ExpectEqualSequence( | 36 ::testing::AssertionResult ExpectEqualSequence( |
37 const char* expr1, const char* expr2, | 37 const char* expr1, const char* expr2, |
38 const T(&expected)[N], const std::vector<T>& actual) { | 38 const T(&expected)[N], const std::vector<T>& actual) { |
39 if (actual.size() != N) { | 39 if (actual.size() != N) { |
40 return ::testing::AssertionFailure() | 40 return ::testing::AssertionFailure() |
41 << "expected: " << ::testing::PrintToString(expected) | 41 << "expected: " << ::testing::PrintToString(expected) |
42 << ", actual: " << ::testing::PrintToString(actual); | 42 << ", actual: " << ::testing::PrintToString(actual); |
43 } | 43 } |
44 for (size_t i = 0; i < N; ++i) { | 44 for (size_t i = 0; i < N; ++i) { |
45 if (expected[i] != actual[i]) { | 45 if (expected[i] != actual[i]) { |
46 return ::testing::AssertionFailure() | 46 return ::testing::AssertionFailure() |
47 << "expected: " << ::testing::PrintToString(expected) | 47 << "expected: " << ::testing::PrintToString(expected) |
48 << ", actual: " << ::testing::PrintToString(actual); | 48 << ", actual: " << ::testing::PrintToString(actual); |
49 } | 49 } |
50 } | 50 } |
51 return ::testing::AssertionSuccess(); | 51 return ::testing::AssertionSuccess(); |
52 } | 52 } |
53 | 53 |
54 #define EXPECT_MESSAGE(expected, actual) \ | 54 #define EXPECT_MESSAGE(expected, actual) \ |
55 EXPECT_PRED_FORMAT2(ExpectEqualSequence, expected, actual) | 55 EXPECT_PRED_FORMAT2(ExpectEqualSequence, expected, actual) |
56 | 56 |
57 TEST(MIDIMessageQueueTest, EmptyData) { | 57 TEST(MidiMessageQueueTest, EmptyData) { |
58 MIDIMessageQueue queue(false); | 58 MidiMessageQueue queue(false); |
59 std::vector<uint8> message; | 59 std::vector<uint8> message; |
60 queue.Get(&message); | 60 queue.Get(&message); |
61 EXPECT_TRUE(message.empty()); | 61 EXPECT_TRUE(message.empty()); |
62 } | 62 } |
63 | 63 |
64 TEST(MIDIMessageQueueTest, RunningStatusDisabled) { | 64 TEST(MidiMessageQueueTest, RunningStatusDisabled) { |
65 MIDIMessageQueue queue(false); | 65 MidiMessageQueue queue(false); |
66 Add(&queue, kGMOn); | 66 Add(&queue, kGMOn); |
67 Add(&queue, kBrokenData1); | 67 Add(&queue, kBrokenData1); |
68 Add(&queue, kNoteOnWithRunningStatus); | 68 Add(&queue, kNoteOnWithRunningStatus); |
69 Add(&queue, kBrokenData2); | 69 Add(&queue, kBrokenData2); |
70 Add(&queue, kChannelPressureWithRunningStatus); | 70 Add(&queue, kChannelPressureWithRunningStatus); |
71 Add(&queue, kBrokenData3); | 71 Add(&queue, kBrokenData3); |
72 Add(&queue, kNoteOn); | 72 Add(&queue, kNoteOn); |
73 Add(&queue, kBrokenData1); | 73 Add(&queue, kBrokenData1); |
74 Add(&queue, kGSOn); | 74 Add(&queue, kGSOn); |
75 Add(&queue, kBrokenData2); | 75 Add(&queue, kBrokenData2); |
(...skipping 11 matching lines...) Expand all Loading... |
87 queue.Get(&message); | 87 queue.Get(&message); |
88 EXPECT_MESSAGE(kNoteOn, message); | 88 EXPECT_MESSAGE(kNoteOn, message); |
89 queue.Get(&message); | 89 queue.Get(&message); |
90 EXPECT_MESSAGE(kGSOn, message); | 90 EXPECT_MESSAGE(kGSOn, message); |
91 queue.Get(&message); | 91 queue.Get(&message); |
92 EXPECT_MESSAGE(kTimingClock, message); | 92 EXPECT_MESSAGE(kTimingClock, message); |
93 queue.Get(&message); | 93 queue.Get(&message); |
94 EXPECT_TRUE(message.empty()); | 94 EXPECT_TRUE(message.empty()); |
95 } | 95 } |
96 | 96 |
97 TEST(MIDIMessageQueueTest, RunningStatusEnabled) { | 97 TEST(MidiMessageQueueTest, RunningStatusEnabled) { |
98 MIDIMessageQueue queue(true); | 98 MidiMessageQueue queue(true); |
99 Add(&queue, kGMOn); | 99 Add(&queue, kGMOn); |
100 Add(&queue, kBrokenData1); | 100 Add(&queue, kBrokenData1); |
101 Add(&queue, kNoteOnWithRunningStatus); | 101 Add(&queue, kNoteOnWithRunningStatus); |
102 Add(&queue, kBrokenData2); | 102 Add(&queue, kBrokenData2); |
103 Add(&queue, kChannelPressureWithRunningStatus); | 103 Add(&queue, kChannelPressureWithRunningStatus); |
104 Add(&queue, kBrokenData3); | 104 Add(&queue, kBrokenData3); |
105 Add(&queue, kNoteOn); | 105 Add(&queue, kNoteOn); |
106 Add(&queue, kBrokenData1); | 106 Add(&queue, kBrokenData1); |
107 Add(&queue, kGSOn); | 107 Add(&queue, kGSOn); |
108 Add(&queue, kBrokenData2); | 108 Add(&queue, kBrokenData2); |
(...skipping 23 matching lines...) Expand all Loading... |
132 EXPECT_MESSAGE(kNoteOn, message); | 132 EXPECT_MESSAGE(kNoteOn, message); |
133 queue.Get(&message); | 133 queue.Get(&message); |
134 EXPECT_MESSAGE(kGSOn, message); | 134 EXPECT_MESSAGE(kGSOn, message); |
135 queue.Get(&message); | 135 queue.Get(&message); |
136 EXPECT_MESSAGE(kTimingClock, message); | 136 EXPECT_MESSAGE(kTimingClock, message); |
137 queue.Get(&message); | 137 queue.Get(&message); |
138 EXPECT_TRUE(message.empty()) | 138 EXPECT_TRUE(message.empty()) |
139 << "Running status must not be applied to real time messages"; | 139 << "Running status must not be applied to real time messages"; |
140 } | 140 } |
141 | 141 |
142 TEST(MIDIMessageQueueTest, RunningStatusEnabledWithRealTimeEvent) { | 142 TEST(MidiMessageQueueTest, RunningStatusEnabledWithRealTimeEvent) { |
143 MIDIMessageQueue queue(true); | 143 MidiMessageQueue queue(true); |
144 const uint8 kNoteOnWithRunningStatusWithkTimingClock[] = { | 144 const uint8 kNoteOnWithRunningStatusWithkTimingClock[] = { |
145 0x90, 0xf8, 0x3c, 0xf8, 0x7f, 0xf8, 0x3c, 0xf8, 0x7f, 0xf8, 0x3c, 0xf8, | 145 0x90, 0xf8, 0x3c, 0xf8, 0x7f, 0xf8, 0x3c, 0xf8, 0x7f, 0xf8, 0x3c, 0xf8, |
146 0x7f, | 146 0x7f, |
147 }; | 147 }; |
148 Add(&queue, kNoteOnWithRunningStatusWithkTimingClock); | 148 Add(&queue, kNoteOnWithRunningStatusWithkTimingClock); |
149 std::vector<uint8> message; | 149 std::vector<uint8> message; |
150 queue.Get(&message); | 150 queue.Get(&message); |
151 EXPECT_MESSAGE(kTimingClock, message); | 151 EXPECT_MESSAGE(kTimingClock, message); |
152 queue.Get(&message); | 152 queue.Get(&message); |
153 EXPECT_MESSAGE(kTimingClock, message); | 153 EXPECT_MESSAGE(kTimingClock, message); |
(...skipping 10 matching lines...) Expand all Loading... |
164 queue.Get(&message); | 164 queue.Get(&message); |
165 EXPECT_MESSAGE(kTimingClock, message); | 165 EXPECT_MESSAGE(kTimingClock, message); |
166 queue.Get(&message); | 166 queue.Get(&message); |
167 EXPECT_MESSAGE(kNoteOn, message); | 167 EXPECT_MESSAGE(kNoteOn, message); |
168 queue.Get(&message); | 168 queue.Get(&message); |
169 EXPECT_TRUE(message.empty()); | 169 EXPECT_TRUE(message.empty()); |
170 } | 170 } |
171 | 171 |
172 } // namespace | 172 } // namespace |
173 } // namespace media | 173 } // namespace media |
OLD | NEW |