diff options
author | isherman@chromium.org <isherman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-11-28 02:41:47 +0000 |
---|---|---|
committer | isherman@chromium.org <isherman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-11-28 02:41:47 +0000 |
commit | aac23602db1391f06f0ac6b4eda5abbba4ee1083 (patch) | |
tree | 668655c492726c6679c4368c3d7073ece1feddf8 /media/midi/midi_message_queue_unittest.cc | |
parent | 10c6f09565830cbee5b1405d9b2c2689fb6d1c6c (diff) | |
download | chromium_src-aac23602db1391f06f0ac6b4eda5abbba4ee1083.zip chromium_src-aac23602db1391f06f0ac6b4eda5abbba4ee1083.tar.gz chromium_src-aac23602db1391f06f0ac6b4eda5abbba4ee1083.tar.bz2 |
Revert 237558 "Use MIDIMessageQueue/IsValidWebMIDIData for MIDI ..."
Seems to have caused issues running perf tests.
BUG=324160
> Use MIDIMessageQueue/IsValidWebMIDIData for MIDI byte stream validation
>
> WebMIDI spec draft: http://www.w3.org/TR/webmidi/
>
> WebMIDI API guarantees that MIDIInput::onmessage is called back with a single MIDI message. To guarantee this, this CL introduces MIDIMessageQueue class, which allows you to
> - maintain fragmented MIDI message.
> - Skip any invalid data sequence.
> - Reorder MIDI messages so that "System Real Time Message", which can be inserted at any point of the byte stream, can be placed at the boundary of complete MIDI messages.
> - (Optional) Reconstruct complete MIDI messages from data stream that is compressed with "running status".
>
> This CL also replaces existing System Exclusive message validation logic in MIDIHost::OnSendData with MIDIHost::IsValidWebMIDIData, which can detect SysEx message even when it is concatenated with non-SysEx messages.
>
> With this change, renderer/blink can be much simpler and free from this kind of data validation.
>
> BUG=303599, 317355
> TEST=media_unittests --gtest_filter=MIDI*, content_unittests --gtest_filter=MIDI*
>
> Review URL: https://codereview.chromium.org/68353002
TBR=yukawa@chromium.org
Review URL: https://codereview.chromium.org/93583002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@237660 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media/midi/midi_message_queue_unittest.cc')
-rw-r--r-- | media/midi/midi_message_queue_unittest.cc | 173 |
1 files changed, 0 insertions, 173 deletions
diff --git a/media/midi/midi_message_queue_unittest.cc b/media/midi/midi_message_queue_unittest.cc deleted file mode 100644 index a00eea6..0000000 --- a/media/midi/midi_message_queue_unittest.cc +++ /dev/null @@ -1,173 +0,0 @@ -// Copyright 2013 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "media/midi/midi_message_queue.h" - -#include "testing/gtest/include/gtest/gtest.h" - -namespace media { -namespace { - -const uint8 kGMOn[] = { 0xf0, 0x7e, 0x7f, 0x09, 0x01, 0xf7 }; -const uint8 kGSOn[] = { - 0xf0, 0x41, 0x10, 0x42, 0x12, 0x40, 0x00, 0x7f, 0x00, 0x41, 0xf7, -}; -const uint8 kNoteOn[] = { 0x90, 0x3c, 0x7f }; -const uint8 kNoteOnWithRunningStatus[] = { - 0x90, 0x3c, 0x7f, 0x3c, 0x7f, 0x3c, 0x7f, -}; -const uint8 kChannelPressure[] = { 0xd0, 0x01 }; -const uint8 kChannelPressureWithRunningStatus[] = { - 0xd0, 0x01, 0x01, 0x01, -}; -const uint8 kTimingClock[] = { 0xf8 }; -const uint8 kBrokenData1[] = { 0x90 }; -const uint8 kBrokenData2[] = { 0xf7 }; -const uint8 kBrokenData3[] = { 0xf2, 0x00 }; -const uint8 kDataByte0[] = { 0x00 }; - -template <typename T, size_t N> -void Add(MIDIMessageQueue* queue, const T(&array)[N]) { - queue->Add(array, N); -} - -template <typename T, size_t N> -::testing::AssertionResult ExpectEqualSequence( - const char* expr1, const char* expr2, - const T(&expected)[N], const std::vector<T>& actual) { - if (actual.size() != N) { - return ::testing::AssertionFailure() - << "expected: " << ::testing::PrintToString(expected) - << ", actual: " << ::testing::PrintToString(actual); - } - for (size_t i = 0; i < N; ++i) { - if (expected[i] != actual[i]) { - return ::testing::AssertionFailure() - << "expected: " << ::testing::PrintToString(expected) - << ", actual: " << ::testing::PrintToString(actual); - } - } - return ::testing::AssertionSuccess(); -} - -#define EXPECT_MESSAGE(expected, actual) \ - EXPECT_PRED_FORMAT2(ExpectEqualSequence, expected, actual) - -TEST(MIDIMessageQueueTest, EmptyData) { - MIDIMessageQueue queue(false); - std::vector<uint8> message; - queue.Get(&message); - EXPECT_TRUE(message.empty()); -} - -TEST(MIDIMessageQueueTest, RunningStatusDisabled) { - MIDIMessageQueue queue(false); - Add(&queue, kGMOn); - Add(&queue, kBrokenData1); - Add(&queue, kNoteOnWithRunningStatus); - Add(&queue, kBrokenData2); - Add(&queue, kChannelPressureWithRunningStatus); - Add(&queue, kBrokenData3); - Add(&queue, kNoteOn); - Add(&queue, kBrokenData1); - Add(&queue, kGSOn); - Add(&queue, kBrokenData2); - Add(&queue, kTimingClock); - Add(&queue, kBrokenData3); - - std::vector<uint8> message; - queue.Get(&message); - EXPECT_MESSAGE(kGMOn, message); - queue.Get(&message); - EXPECT_MESSAGE(kNoteOn, message) << "Running status should be ignored"; - queue.Get(&message); - EXPECT_MESSAGE(kChannelPressure, message) - << "Running status should be ignored"; - queue.Get(&message); - EXPECT_MESSAGE(kNoteOn, message); - queue.Get(&message); - EXPECT_MESSAGE(kGSOn, message); - queue.Get(&message); - EXPECT_MESSAGE(kTimingClock, message); - queue.Get(&message); - EXPECT_TRUE(message.empty()); -} - -TEST(MIDIMessageQueueTest, RunningStatusEnabled) { - MIDIMessageQueue queue(true); - Add(&queue, kGMOn); - Add(&queue, kBrokenData1); - Add(&queue, kNoteOnWithRunningStatus); - Add(&queue, kBrokenData2); - Add(&queue, kChannelPressureWithRunningStatus); - Add(&queue, kBrokenData3); - Add(&queue, kNoteOn); - Add(&queue, kBrokenData1); - Add(&queue, kGSOn); - Add(&queue, kBrokenData2); - Add(&queue, kTimingClock); - Add(&queue, kDataByte0); - - std::vector<uint8> message; - queue.Get(&message); - EXPECT_MESSAGE(kGMOn, message); - queue.Get(&message); - EXPECT_MESSAGE(kNoteOn, message); - queue.Get(&message); - EXPECT_MESSAGE(kNoteOn, message) - << "Running status should be converted into a canonical MIDI message"; - queue.Get(&message); - EXPECT_MESSAGE(kNoteOn, message) - << "Running status should be converted into a canonical MIDI message"; - queue.Get(&message); - EXPECT_MESSAGE(kChannelPressure, message); - queue.Get(&message); - EXPECT_MESSAGE(kChannelPressure, message) - << "Running status should be converted into a canonical MIDI message"; - queue.Get(&message); - EXPECT_MESSAGE(kChannelPressure, message) - << "Running status should be converted into a canonical MIDI message"; - queue.Get(&message); - EXPECT_MESSAGE(kNoteOn, message); - queue.Get(&message); - EXPECT_MESSAGE(kGSOn, message); - queue.Get(&message); - EXPECT_MESSAGE(kTimingClock, message); - queue.Get(&message); - EXPECT_TRUE(message.empty()) - << "Running status must not be applied to real time messages"; -} - -TEST(MIDIMessageQueueTest, RunningStatusEnabledWithRealTimeEvent) { - MIDIMessageQueue queue(true); - const uint8 kNoteOnWithRunningStatusWithkTimingClock[] = { - 0x90, 0xf8, 0x3c, 0xf8, 0x7f, 0xf8, 0x3c, 0xf8, 0x7f, 0xf8, 0x3c, 0xf8, - 0x7f, - }; - Add(&queue, kNoteOnWithRunningStatusWithkTimingClock); - std::vector<uint8> message; - queue.Get(&message); - EXPECT_MESSAGE(kTimingClock, message); - queue.Get(&message); - EXPECT_MESSAGE(kTimingClock, message); - queue.Get(&message); - EXPECT_MESSAGE(kNoteOn, message); - queue.Get(&message); - EXPECT_MESSAGE(kTimingClock, message); - queue.Get(&message); - EXPECT_MESSAGE(kTimingClock, message); - queue.Get(&message); - EXPECT_MESSAGE(kNoteOn, message); - queue.Get(&message); - EXPECT_MESSAGE(kTimingClock, message); - queue.Get(&message); - EXPECT_MESSAGE(kTimingClock, message); - queue.Get(&message); - EXPECT_MESSAGE(kNoteOn, message); - queue.Get(&message); - EXPECT_TRUE(message.empty()); -} - -} // namespace -} // namespace media |