@@ -707,4 +707,41 @@ TEST_F(ButtonsTest, PresetChange)
707707 ASSERT_EQ (0 , _listener._event .size ());
708708}
709709
710+ TEST_F (ButtonsTest, MMCStartStop)
711+ {
712+ if (!buttons::Collection::SIZE (buttons::GROUP_DIGITAL_INPUTS ))
713+ {
714+ return ;
715+ }
716+
717+ MidiDispatcher.listen (messaging::eventType_t::SYSTEM ,
718+ [this ](const messaging::Event& dispatchMessage)
719+ {
720+ _listener.messageListener (dispatchMessage);
721+ });
722+
723+ // configure one button to MMC_PLAY_STOP message type
724+ static constexpr size_t BUTTON_INDEX = 0 ;
725+
726+ ASSERT_TRUE (_buttons._database .update (database::Config::Section::button_t ::MESSAGE_TYPE , BUTTON_INDEX , buttons::messageType_t::MMC_PLAY_STOP ));
727+ _buttons._instance .reset (BUTTON_INDEX );
728+
729+ // simulate button press
730+ stateChangeRegisterSingle (BUTTON_INDEX , true );
731+
732+ ASSERT_EQ (1 , _listener._event .size ());
733+ ASSERT_EQ (midi::messageType_t::MMC_PLAY , _listener._event .at (0 ).message );
734+
735+ // verify that no new events are generated on button release
736+ stateChangeRegisterSingle (BUTTON_INDEX , false );
737+ ASSERT_EQ (0 , _listener._event .size ());
738+
739+ // simulate a new button press
740+ stateChangeRegisterSingle (BUTTON_INDEX , true );
741+
742+ // the message should be MMC_STOP now
743+ ASSERT_EQ (1 , _listener._event .size ());
744+ ASSERT_EQ (midi::messageType_t::MMC_STOP , _listener._event .at (0 ).message );
745+ }
746+
710747#endif
0 commit comments