diff --git a/test/unit-tests/CMakeLists.txt b/test/unit-tests/CMakeLists.txt index e99276a..39f4bb3 100644 --- a/test/unit-tests/CMakeLists.txt +++ b/test/unit-tests/CMakeLists.txt @@ -20,6 +20,7 @@ add_executable(unit-tests tests/unit-tests_SysExCodec.cpp tests/unit-tests_SerialMock.cpp tests/unit-tests_MidiInput.cpp + tests/unit-tests_MidiInputCallbacks.cpp tests/unit-tests_MidiOutput.cpp tests/unit-tests_MidiThru.cpp tests/unit-tests_MidiUsb.cpp diff --git a/test/unit-tests/tests/unit-tests_MidiInputCallbacks.cpp b/test/unit-tests/tests/unit-tests_MidiInputCallbacks.cpp new file mode 100644 index 0000000..4198016 --- /dev/null +++ b/test/unit-tests/tests/unit-tests_MidiInputCallbacks.cpp @@ -0,0 +1,65 @@ +#include "unit-tests.h" +#include "unit-tests_Settings.h" +#include +#include + +BEGIN_MIDI_NAMESPACE + +END_MIDI_NAMESPACE + +// ----------------------------------------------------------------------------- + +BEGIN_UNNAMED_NAMESPACE + +using namespace testing; +USING_NAMESPACE_UNIT_TESTS +typedef test_mocks::SerialMock<32> SerialMock; +typedef midi::MidiInterface MidiInterface; + +template +struct VariableSysExSettings : midi::DefaultSettings +{ + static const unsigned SysExMaxSize = Size; +}; + +MidiInterface* midi; + +// -- + +void handleNoteOn(byte inChannel, byte inPitch, byte inVelocity) +{ + EXPECT_NE(midi, nullptr); + midi->sendNoteOn(inPitch, inVelocity, inChannel); +} + +TEST(MidiInputCallbacks, noteOn) +{ + EXPECT_EQ(midi, nullptr); + SerialMock serial; + midi = new MidiInterface(serial); + + + midi->setHandleNoteOn(handleNoteOn); + midi->begin(MIDI_CHANNEL_OMNI); + midi->turnThruOff(); + + static const unsigned rxSize = 3; + static const byte rxData[rxSize] = { 0x9b, 12, 34 }; + serial.mRxBuffer.write(rxData, rxSize); + + EXPECT_EQ(midi->read(), false); + EXPECT_EQ(midi->read(), false); + EXPECT_EQ(midi->read(), true); + EXPECT_EQ(midi->getType(), midi::NoteOn); + EXPECT_EQ(midi->getChannel(), 12); + EXPECT_EQ(midi->getData1(), 12); + EXPECT_EQ(midi->getData2(), 34); + + EXPECT_EQ(serial.mTxBuffer.getLength(), 3); + + + delete midi; + midi = nullptr; +} + +END_UNNAMED_NAMESPACE diff --git a/test/unit-tests/tests/unit-tests_MidiThru.cpp b/test/unit-tests/tests/unit-tests_MidiThru.cpp index e69de29..a04ea03 100644 --- a/test/unit-tests/tests/unit-tests_MidiThru.cpp +++ b/test/unit-tests/tests/unit-tests_MidiThru.cpp @@ -0,0 +1,82 @@ +#include "unit-tests.h" +#include "unit-tests_Settings.h" +#include +#include + +BEGIN_MIDI_NAMESPACE + +END_MIDI_NAMESPACE + +// ----------------------------------------------------------------------------- + +BEGIN_UNNAMED_NAMESPACE + +using namespace testing; +USING_NAMESPACE_UNIT_TESTS +typedef test_mocks::SerialMock<32> SerialMock; +typedef midi::MidiInterface MidiInterface; + +template +struct VariableSysExSettings : midi::DefaultSettings +{ + static const unsigned SysExMaxSize = Size; +}; + +// ----------------------------------------------------------------------------- + +TEST(MidiThru, defaultValues) +{ + SerialMock serial; + MidiInterface midi(serial); + + EXPECT_EQ(midi.getThruState(), true); + EXPECT_EQ(midi.getFilterMode(), midi::Full); + midi.begin(); // Should not change the state + EXPECT_EQ(midi.getThruState(), true); + EXPECT_EQ(midi.getFilterMode(), midi::Full); +} + +TEST(MidiThru, beginEnablesThru) +{ + SerialMock serial; + MidiInterface midi(serial); + + midi.turnThruOff(); + EXPECT_EQ(midi.getThruState(), false); + EXPECT_EQ(midi.getFilterMode(), midi::Off); + midi.begin(); + EXPECT_EQ(midi.getThruState(), true); + EXPECT_EQ(midi.getFilterMode(), midi::Full); +} + +TEST(MidiThru, setGet) +{ + SerialMock serial; + MidiInterface midi(serial); + + midi.turnThruOff(); + EXPECT_EQ(midi.getThruState(), false); + EXPECT_EQ(midi.getFilterMode(), midi::Off); + + midi.turnThruOn(); + EXPECT_EQ(midi.getThruState(), true); + EXPECT_EQ(midi.getFilterMode(), midi::Full); + midi.turnThruOn(midi::SameChannel); + EXPECT_EQ(midi.getThruState(), true); + EXPECT_EQ(midi.getFilterMode(), midi::SameChannel); + midi.turnThruOn(midi::DifferentChannel); + EXPECT_EQ(midi.getThruState(), true); + EXPECT_EQ(midi.getFilterMode(), midi::DifferentChannel); + + midi.setThruFilterMode(midi::Full); + EXPECT_EQ(midi.getThruState(), true); + EXPECT_EQ(midi.getFilterMode(), midi::Full); + midi.setThruFilterMode(midi::SameChannel); + EXPECT_EQ(midi.getThruState(), true); + EXPECT_EQ(midi.getFilterMode(), midi::SameChannel); + midi.setThruFilterMode(midi::DifferentChannel); + EXPECT_EQ(midi.getThruState(), true); + EXPECT_EQ(midi.getFilterMode(), midi::DifferentChannel); +} + +END_UNNAMED_NAMESPACE