From f653d21ca11e431abf908063117e68e71c00d367 Mon Sep 17 00:00:00 2001 From: Francois Best Date: Sat, 29 Oct 2016 12:20:54 +0200 Subject: [PATCH] Thru tests. #55 --- test/unit-tests/tests/unit-tests_MidiThru.cpp | 265 ++++++++++++++++++ 1 file changed, 265 insertions(+) diff --git a/test/unit-tests/tests/unit-tests_MidiThru.cpp b/test/unit-tests/tests/unit-tests_MidiThru.cpp index 8f301dc..62c3e38 100644 --- a/test/unit-tests/tests/unit-tests_MidiThru.cpp +++ b/test/unit-tests/tests/unit-tests_MidiThru.cpp @@ -15,6 +15,7 @@ using namespace testing; USING_NAMESPACE_UNIT_TESTS typedef test_mocks::SerialMock<32> SerialMock; typedef midi::MidiInterface MidiInterface; +typedef std::vector Buffer; template struct VariableSysExSettings : midi::DefaultSettings @@ -82,4 +83,268 @@ TEST(MidiThru, setGet) EXPECT_EQ(midi.getFilterMode(), midi::Thru::Off); } +TEST(MidiThru, off) +{ + SerialMock serial; + MidiInterface midi(serial); + + midi.begin(MIDI_CHANNEL_OMNI); + midi.turnThruOff(); + + static const unsigned rxSize = 5; + static const byte rxData[rxSize] = { 0x9b, 12, 34, 56, 78 }; + serial.mRxBuffer.write(rxData, rxSize); + EXPECT_EQ(midi.read(), false); + EXPECT_EQ(midi.read(), false); + EXPECT_EQ(midi.read(), true); + EXPECT_EQ(midi.read(), false); + EXPECT_EQ(midi.read(), true); + + EXPECT_EQ(serial.mTxBuffer.getLength(), 0); +} + +TEST(MidiThru, full) +{ + SerialMock serial; + MidiInterface midi(serial); + Buffer buffer; + + midi.begin(MIDI_CHANNEL_OMNI); + midi.setThruFilterMode(midi::Thru::Full); + + static const unsigned rxSize = 6; + static const byte rxData[rxSize] = { 0x9b, 12, 34, 0x9c, 56, 78 }; + serial.mRxBuffer.write(rxData, rxSize); + + EXPECT_EQ(midi.read(), false); + EXPECT_EQ(serial.mTxBuffer.getLength(), 0); + EXPECT_EQ(midi.read(), false); + EXPECT_EQ(serial.mTxBuffer.getLength(), 0); + EXPECT_EQ(midi.read(), true); + + buffer.clear(); + buffer.resize(3); + EXPECT_EQ(serial.mTxBuffer.getLength(), 3); + serial.mTxBuffer.read(&buffer[0], 3); + EXPECT_THAT(buffer, ElementsAreArray({ + 0x9b, 12, 34 + })); + + EXPECT_EQ(midi.read(), false); + EXPECT_EQ(serial.mTxBuffer.getLength(), 0); + EXPECT_EQ(midi.read(), false); + EXPECT_EQ(serial.mTxBuffer.getLength(), 0); + EXPECT_EQ(midi.read(), true); + + buffer.clear(); + buffer.resize(3); + EXPECT_EQ(serial.mTxBuffer.getLength(), 3); + serial.mTxBuffer.read(&buffer[0], 3); + EXPECT_THAT(buffer, ElementsAreArray({ + 0x9c, 56, 78 + })); +} + +TEST(MidiThru, sameChannel) +{ + SerialMock serial; + MidiInterface midi(serial); + Buffer buffer; + + midi.begin(12); + midi.setThruFilterMode(midi::Thru::SameChannel); + + static const unsigned rxSize = 6; + static const byte rxData[rxSize] = { 0x9b, 12, 34, 0x9c, 56, 78 }; + serial.mRxBuffer.write(rxData, rxSize); + + EXPECT_EQ(midi.read(), false); + EXPECT_EQ(midi.read(), false); + EXPECT_EQ(midi.read(), true); + EXPECT_EQ(midi.read(), false); + EXPECT_EQ(midi.read(), false); + EXPECT_EQ(midi.read(), false); + + buffer.clear(); + buffer.resize(3); + EXPECT_EQ(serial.mTxBuffer.getLength(), 3); + serial.mTxBuffer.read(&buffer[0], 3); + EXPECT_THAT(buffer, ElementsAreArray({ + 0x9b, 12, 34 + })); +} + +TEST(MidiThru, sameChannelOmni) // Acts like full +{ + SerialMock serial; + MidiInterface midi(serial); + Buffer buffer; + + midi.begin(MIDI_CHANNEL_OMNI); + midi.setThruFilterMode(midi::Thru::SameChannel); + + static const unsigned rxSize = 6; + static const byte rxData[rxSize] = { 0x9b, 12, 34, 0x9c, 56, 78 }; + serial.mRxBuffer.write(rxData, rxSize); + + EXPECT_EQ(midi.read(), false); + EXPECT_EQ(serial.mTxBuffer.getLength(), 0); + EXPECT_EQ(midi.read(), false); + EXPECT_EQ(serial.mTxBuffer.getLength(), 0); + EXPECT_EQ(midi.read(), true); + + buffer.clear(); + buffer.resize(3); + EXPECT_EQ(serial.mTxBuffer.getLength(), 3); + serial.mTxBuffer.read(&buffer[0], 3); + EXPECT_THAT(buffer, ElementsAreArray({ + 0x9b, 12, 34 + })); + + buffer.clear(); + buffer.resize(3); + EXPECT_EQ(midi.read(), false); + EXPECT_EQ(serial.mTxBuffer.getLength(), 0); + EXPECT_EQ(midi.read(), false); + EXPECT_EQ(serial.mTxBuffer.getLength(), 0); + EXPECT_EQ(midi.read(), true); + + EXPECT_EQ(serial.mTxBuffer.getLength(), 3); // Not using TX running status + serial.mTxBuffer.read(&buffer[0], 3); + EXPECT_THAT(buffer, ElementsAreArray({ + 0x9c, 56, 78 + })); +} + +TEST(MidiThru, differentChannel) +{ + SerialMock serial; + MidiInterface midi(serial); + Buffer buffer; + + midi.begin(12); + midi.setThruFilterMode(midi::Thru::DifferentChannel); + + static const unsigned rxSize = 6; + static const byte rxData[rxSize] = { 0x9b, 12, 34, 0x9c, 56, 78 }; + serial.mRxBuffer.write(rxData, rxSize); + + EXPECT_EQ(midi.read(), false); + EXPECT_EQ(midi.read(), false); + EXPECT_EQ(midi.read(), true); + EXPECT_EQ(midi.read(), false); + EXPECT_EQ(midi.read(), false); + EXPECT_EQ(midi.read(), false); + + buffer.clear(); + buffer.resize(3); + EXPECT_EQ(serial.mTxBuffer.getLength(), 3); + serial.mTxBuffer.read(&buffer[0], 3); + EXPECT_THAT(buffer, ElementsAreArray({ + 0x9c, 56, 78 + })); +} + +TEST(MidiThru, differentChannelOmni) // Acts like off +{ + SerialMock serial; + MidiInterface midi(serial); + Buffer buffer; + + midi.begin(MIDI_CHANNEL_OMNI); + midi.setThruFilterMode(midi::Thru::DifferentChannel); + + static const unsigned rxSize = 6; + static const byte rxData[rxSize] = { 0x9b, 12, 34, 0x9c, 56, 78 }; + serial.mRxBuffer.write(rxData, rxSize); + + EXPECT_EQ(midi.read(), false); + EXPECT_EQ(serial.mTxBuffer.getLength(), 0); + EXPECT_EQ(midi.read(), false); + EXPECT_EQ(serial.mTxBuffer.getLength(), 0); + EXPECT_EQ(midi.read(), true); + EXPECT_EQ(serial.mTxBuffer.getLength(), 0); + + EXPECT_EQ(midi.read(), false); + EXPECT_EQ(serial.mTxBuffer.getLength(), 0); + EXPECT_EQ(midi.read(), false); + EXPECT_EQ(serial.mTxBuffer.getLength(), 0); + EXPECT_EQ(midi.read(), true); + EXPECT_EQ(serial.mTxBuffer.getLength(), 0); +} + +TEST(MidiThru, multiByteThru) +{ + typedef VariableSettings Settings; + typedef test_mocks::SerialMock<32> SerialMock; + typedef midi::MidiInterface MidiInterface; + + SerialMock serial; + MidiInterface midi(serial); + Buffer buffer; + + midi.begin(MIDI_CHANNEL_OMNI); + midi.setThruFilterMode(midi::Thru::Full); + + static const unsigned rxSize = 6; + static const byte rxData[rxSize] = { 0x9b, 12, 34, 56, 78 }; + serial.mRxBuffer.write(rxData, rxSize); + + EXPECT_EQ(midi.read(), true); + EXPECT_EQ(serial.mTxBuffer.getLength(), 3); + EXPECT_EQ(midi.read(), true); + EXPECT_EQ(serial.mTxBuffer.getLength(), 6); + + buffer.clear(); + buffer.resize(6); + serial.mTxBuffer.read(&buffer[0], 6); + EXPECT_THAT(buffer, ElementsAreArray({ + 0x9b, 12, 34, 0x9b, 56, 78 + })); +} + +TEST(MidiThru, withTxRunningStatus) +{ + typedef VariableSettings Settings; + typedef test_mocks::SerialMock<32> SerialMock; + typedef midi::MidiInterface MidiInterface; + + SerialMock serial; + MidiInterface midi(serial); + Buffer buffer; + + midi.begin(MIDI_CHANNEL_OMNI); + midi.setThruFilterMode(midi::Thru::Full); + + static const unsigned rxSize = 5; + static const byte rxData[rxSize] = { 0x9b, 12, 34, 56, 78 }; + serial.mRxBuffer.write(rxData, rxSize); + + EXPECT_EQ(midi.read(), false); + EXPECT_EQ(serial.mTxBuffer.getLength(), 0); + EXPECT_EQ(midi.read(), false); + EXPECT_EQ(serial.mTxBuffer.getLength(), 0); + EXPECT_EQ(midi.read(), true); + + buffer.clear(); + buffer.resize(3); + EXPECT_EQ(serial.mTxBuffer.getLength(), 3); + serial.mTxBuffer.read(&buffer[0], 3); + EXPECT_THAT(buffer, ElementsAreArray({ + 0x9b, 12, 34 + })); + + EXPECT_EQ(midi.read(), false); + EXPECT_EQ(serial.mTxBuffer.getLength(), 0); + EXPECT_EQ(midi.read(), true); + + buffer.clear(); + buffer.resize(2); + EXPECT_EQ(serial.mTxBuffer.getLength(), 2); + serial.mTxBuffer.read(&buffer[0], 2); + EXPECT_THAT(buffer, ElementsAreArray({ + 56, 78 + })); +} + END_UNNAMED_NAMESPACE