#include "unit-tests.h" #include BEGIN_MIDI_NAMESPACE // Declare references: // http://stackoverflow.com/questions/4891067/weird-undefined-symbols-of-static-constants-inside-a-struct-class template const unsigned Message::sSysExMaxSize; END_MIDI_NAMESPACE // ----------------------------------------------------------------------------- BEGIN_UNNAMED_NAMESPACE TEST(MidiMessage, hasTheRightProperties) { typedef midi::Message<42> Message; const Message message = Message(); EXPECT_EQ(message.channel, 0); EXPECT_EQ(message.type, 0); EXPECT_EQ(message.data1, 0); EXPECT_EQ(message.data2, 0); EXPECT_EQ(message.valid, false); EXPECT_EQ(message.getSysExSize(), unsigned(0)); } template inline void setSysExSize(Message& ioMessage, unsigned inSize) { ioMessage.data2 = inSize >> 8; // MSB ioMessage.data1 = inSize & 0xff; // LSB } TEST(MidiMessage, getSysExSize) { // Small message { typedef midi::Message<32> Message; ASSERT_EQ(Message::sSysExMaxSize, unsigned(32)); Message message = Message(); const unsigned sizeUnder = 20; setSysExSize(message, sizeUnder); ASSERT_EQ(message.getSysExSize(), sizeUnder); const unsigned sizeOver = 64; setSysExSize(message, sizeOver); ASSERT_EQ(message.getSysExSize(), unsigned(32)); } // Medium message { typedef midi::Message<256> Message; ASSERT_EQ(Message::sSysExMaxSize, unsigned(256)); Message message = Message(); const unsigned sizeUnder = 200; setSysExSize(message, sizeUnder); ASSERT_EQ(message.getSysExSize(), sizeUnder); const unsigned sizeOver = 300; setSysExSize(message, sizeOver); ASSERT_EQ(message.getSysExSize(), unsigned(256)); } // Large message { typedef midi::Message<1024> Message; ASSERT_EQ(Message::sSysExMaxSize, unsigned(1024)); Message message = Message(); const unsigned sizeUnder = 1000; setSysExSize(message, sizeUnder); ASSERT_EQ(message.getSysExSize(), sizeUnder); const unsigned sizeOver = 2000; setSysExSize(message, sizeOver); ASSERT_EQ(message.getSysExSize(), unsigned(1024)); } } END_UNNAMED_NAMESPACE