123 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			123 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			C++
		
	
	
	
| #include "unit-tests.h"
 | |
| #include <src/MIDI.h>
 | |
| #include <test/mocks/test-mocks_SerialMock.h>
 | |
| 
 | |
| BEGIN_MIDI_NAMESPACE
 | |
| 
 | |
| END_MIDI_NAMESPACE
 | |
| 
 | |
| // -----------------------------------------------------------------------------
 | |
| 
 | |
| BEGIN_UNNAMED_NAMESPACE
 | |
| 
 | |
| typedef test_mocks::SerialMock<32> SerialMock;
 | |
| typedef midi::MidiInterface<SerialMock> MidiInterface;
 | |
| 
 | |
| TEST(MidiInput, getTypeFromStatusByte)
 | |
| {
 | |
|     // Channel Messages
 | |
|     EXPECT_EQ(MidiInterface::getTypeFromStatusByte(0x81), midi::NoteOff);
 | |
|     EXPECT_EQ(MidiInterface::getTypeFromStatusByte(0x92), midi::NoteOn);
 | |
|     EXPECT_EQ(MidiInterface::getTypeFromStatusByte(0xa3), midi::AfterTouchPoly);
 | |
|     EXPECT_EQ(MidiInterface::getTypeFromStatusByte(0xb4), midi::ControlChange);
 | |
|     EXPECT_EQ(MidiInterface::getTypeFromStatusByte(0xc5), midi::ProgramChange);
 | |
|     EXPECT_EQ(MidiInterface::getTypeFromStatusByte(0xd6), midi::AfterTouchChannel);
 | |
|     EXPECT_EQ(MidiInterface::getTypeFromStatusByte(0xe7), midi::PitchBend);
 | |
| 
 | |
|     // System Messages
 | |
|     EXPECT_EQ(MidiInterface::getTypeFromStatusByte(0xf0), midi::SystemExclusive);
 | |
|     EXPECT_EQ(MidiInterface::getTypeFromStatusByte(0xf1), midi::TimeCodeQuarterFrame);
 | |
|     EXPECT_EQ(MidiInterface::getTypeFromStatusByte(0xf2), midi::SongPosition);
 | |
|     EXPECT_EQ(MidiInterface::getTypeFromStatusByte(0xf3), midi::SongSelect);
 | |
|     EXPECT_EQ(MidiInterface::getTypeFromStatusByte(0xf6), midi::TuneRequest);
 | |
|     EXPECT_EQ(MidiInterface::getTypeFromStatusByte(0xf8), midi::Clock);
 | |
|     EXPECT_EQ(MidiInterface::getTypeFromStatusByte(0xfa), midi::Start);
 | |
|     EXPECT_EQ(MidiInterface::getTypeFromStatusByte(0xfb), midi::Continue);
 | |
|     EXPECT_EQ(MidiInterface::getTypeFromStatusByte(0xfc), midi::Stop);
 | |
|     EXPECT_EQ(MidiInterface::getTypeFromStatusByte(0xfe), midi::ActiveSensing);
 | |
|     EXPECT_EQ(MidiInterface::getTypeFromStatusByte(0xff), midi::SystemReset);
 | |
| 
 | |
|     // Invalid Messages
 | |
|     for (int i = 0; i < 0x80; ++i)
 | |
|     {
 | |
|         EXPECT_EQ(MidiInterface::getTypeFromStatusByte(i), midi::InvalidType);
 | |
|     }
 | |
|     EXPECT_EQ(MidiInterface::getTypeFromStatusByte(0xf4), midi::InvalidType);
 | |
|     EXPECT_EQ(MidiInterface::getTypeFromStatusByte(0xf5), midi::InvalidType);
 | |
|     EXPECT_EQ(MidiInterface::getTypeFromStatusByte(0xf9), midi::InvalidType);
 | |
|     EXPECT_EQ(MidiInterface::getTypeFromStatusByte(0xfd), midi::InvalidType);
 | |
| }
 | |
| 
 | |
| TEST(MidiInput, getChannelFromStatusByte)
 | |
| {
 | |
|     EXPECT_EQ(MidiInterface::getChannelFromStatusByte(0x00), 1);
 | |
|     EXPECT_EQ(MidiInterface::getChannelFromStatusByte(0x80), 1);
 | |
|     EXPECT_EQ(MidiInterface::getChannelFromStatusByte(0x94), 5);
 | |
|     EXPECT_EQ(MidiInterface::getChannelFromStatusByte(0xaf), 16);
 | |
| }
 | |
| 
 | |
| TEST(MidiInput, isChannelMessage)
 | |
| {
 | |
|     EXPECT_EQ(MidiInterface::isChannelMessage(midi::InvalidType),           false);
 | |
|     EXPECT_EQ(MidiInterface::isChannelMessage(midi::NoteOff),               true);
 | |
|     EXPECT_EQ(MidiInterface::isChannelMessage(midi::NoteOn),                true);
 | |
|     EXPECT_EQ(MidiInterface::isChannelMessage(midi::AfterTouchPoly),        true);
 | |
|     EXPECT_EQ(MidiInterface::isChannelMessage(midi::ControlChange),         true);
 | |
|     EXPECT_EQ(MidiInterface::isChannelMessage(midi::ProgramChange),         true);
 | |
|     EXPECT_EQ(MidiInterface::isChannelMessage(midi::AfterTouchChannel),     true);
 | |
|     EXPECT_EQ(MidiInterface::isChannelMessage(midi::PitchBend),             true);
 | |
|     EXPECT_EQ(MidiInterface::isChannelMessage(midi::SystemExclusive),       false);
 | |
|     EXPECT_EQ(MidiInterface::isChannelMessage(midi::TimeCodeQuarterFrame),  false);
 | |
|     EXPECT_EQ(MidiInterface::isChannelMessage(midi::SongPosition),          false);
 | |
|     EXPECT_EQ(MidiInterface::isChannelMessage(midi::SongSelect),            false);
 | |
|     EXPECT_EQ(MidiInterface::isChannelMessage(midi::TuneRequest),           false);
 | |
|     EXPECT_EQ(MidiInterface::isChannelMessage(midi::Clock),                 false);
 | |
|     EXPECT_EQ(MidiInterface::isChannelMessage(midi::Start),                 false);
 | |
|     EXPECT_EQ(MidiInterface::isChannelMessage(midi::Continue),              false);
 | |
|     EXPECT_EQ(MidiInterface::isChannelMessage(midi::Stop),                  false);
 | |
|     EXPECT_EQ(MidiInterface::isChannelMessage(midi::ActiveSensing),         false);
 | |
|     EXPECT_EQ(MidiInterface::isChannelMessage(midi::SystemReset),           false);
 | |
| }
 | |
| 
 | |
| // --
 | |
| 
 | |
| TEST(MidiInput, begin)
 | |
| {
 | |
|     SerialMock serial;
 | |
|     MidiInterface midi(serial);
 | |
| 
 | |
|     // Default channel
 | |
|     midi.begin();
 | |
|     EXPECT_EQ(serial.mBaudrate, 31250);
 | |
|     EXPECT_EQ(midi.getInputChannel(), 1);
 | |
| 
 | |
|     // Specific channel
 | |
|     midi.begin(12);
 | |
|     EXPECT_EQ(serial.mBaudrate, 31250);
 | |
|     EXPECT_EQ(midi.getInputChannel(), 12);
 | |
| }
 | |
| 
 | |
| TEST(MidiInput, initInputChannel)
 | |
| {
 | |
|     SerialMock serial;
 | |
|     MidiInterface midi(serial);
 | |
| 
 | |
|     EXPECT_EQ(midi.getInputChannel(), 0);
 | |
|     midi.setInputChannel(12);
 | |
|     EXPECT_EQ(midi.getInputChannel(), 12);
 | |
| }
 | |
| 
 | |
| TEST(MidiInput, initMessage)
 | |
| {
 | |
|     SerialMock serial;
 | |
|     MidiInterface midi(serial);
 | |
|     EXPECT_EQ(midi.getType(),               midi::InvalidType);
 | |
|     EXPECT_EQ(midi.getChannel(),            0);
 | |
|     EXPECT_EQ(midi.getData1(),              0);
 | |
|     EXPECT_EQ(midi.getData2(),              0);
 | |
|     EXPECT_EQ(midi.getSysExArrayLength(),   0);
 | |
|     EXPECT_EQ(midi.check(),                 false);
 | |
| }
 | |
| 
 | |
| END_UNNAMED_NAMESPACE
 |