99#include < enginemock.h>
1010#include < timermock.h>
1111#include < clockmock.h>
12+ #include < audioinputmock.h>
13+ #include < audioloudnessmock.h>
1214
1315#include " ../common.h"
1416#include " blocks/sensingblocks.h"
@@ -129,6 +131,7 @@ TEST_F(SensingBlocksTest, RegisterBlocks)
129131 EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " sensing_mousex" , &SensingBlocks::compileMouseX));
130132 EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " sensing_mousey" , &SensingBlocks::compileMouseY));
131133 EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " sensing_setdragmode" , &SensingBlocks::compileSetDragMode));
134+ EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " sensing_loudness" , &SensingBlocks::compileLoudness));
132135 EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " sensing_timer" , &SensingBlocks::compileTimer));
133136 EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " sensing_resettimer" , &SensingBlocks::compileResetTimer));
134137 EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " sensing_of" , &SensingBlocks::compileOf));
@@ -139,6 +142,7 @@ TEST_F(SensingBlocksTest, RegisterBlocks)
139142 EXPECT_CALL (m_engineMock, addMonitorNameFunction (m_section.get (), " sensing_mousedown" , &SensingBlocks::mouseDownMonitorName));
140143 EXPECT_CALL (m_engineMock, addMonitorNameFunction (m_section.get (), " sensing_mousex" , &SensingBlocks::mouseXMonitorName));
141144 EXPECT_CALL (m_engineMock, addMonitorNameFunction (m_section.get (), " sensing_mousey" , &SensingBlocks::mouseYMonitorName));
145+ EXPECT_CALL (m_engineMock, addMonitorNameFunction (m_section.get (), " sensing_loudness" , &SensingBlocks::loudnessMonitorName));
142146 EXPECT_CALL (m_engineMock, addMonitorNameFunction (m_section.get (), " sensing_timer" , &SensingBlocks::timerMonitorName));
143147 EXPECT_CALL (m_engineMock, addMonitorNameFunction (m_section.get (), " sensing_current" , &SensingBlocks::currentMonitorName));
144148 EXPECT_CALL (m_engineMock, addMonitorNameFunction (m_section.get (), " sensing_dayssince2000" , &SensingBlocks::daysSince2000MonitorName));
@@ -741,6 +745,65 @@ TEST_F(SensingBlocksTest, SetDragModeImpl)
741745 ASSERT_FALSE (sprite.draggable ());
742746}
743747
748+ TEST_F (SensingBlocksTest, Loudness)
749+ {
750+ Compiler compiler (&m_engineMock);
751+
752+ auto block = std::make_shared<Block>(" a" , " sensing_loudness" );
753+
754+ EXPECT_CALL (m_engineMock, functionIndex (&SensingBlocks::loudness)).WillOnce (Return (0 ));
755+ compiler.init ();
756+
757+ compiler.setBlock (block);
758+ SensingBlocks::compileLoudness (&compiler);
759+
760+ compiler.end ();
761+
762+ ASSERT_EQ (compiler.bytecode (), std::vector<unsigned int >({ vm::OP_START, vm::OP_EXEC, 0 , vm::OP_HALT }));
763+ ASSERT_TRUE (compiler.constValues ().empty ());
764+ }
765+
766+ TEST_F (SensingBlocksTest, LoudnessMonitorName)
767+ {
768+ ASSERT_EQ (SensingBlocks::loudnessMonitorName (nullptr ), " loudness" );
769+ }
770+
771+ TEST_F (SensingBlocksTest, LoudnessImpl)
772+ {
773+ static unsigned int bytecode[] = { vm::OP_START, vm::OP_EXEC, 0 , vm::OP_HALT };
774+ static BlockFunc functions[] = { &SensingBlocks::loudness };
775+
776+ VirtualMachine vm (nullptr , &m_engineMock, nullptr );
777+ vm.setFunctions (functions);
778+
779+ vm.setBytecode (bytecode);
780+ vm.run ();
781+
782+ ASSERT_EQ (vm.registerCount (), 1 );
783+
784+ AudioInputMock audioInput;
785+ auto audioLoudness = std::make_shared<AudioLoudnessMock>();
786+ SensingBlocks::audioInput = &audioInput;
787+
788+ EXPECT_CALL (audioInput, audioLoudness ()).WillOnce (Return (audioLoudness));
789+ EXPECT_CALL (*audioLoudness, getLoudness ()).WillOnce (Return (-1 ));
790+ vm.reset ();
791+ vm.run ();
792+
793+ ASSERT_EQ (vm.registerCount (), 1 );
794+ ASSERT_EQ (vm.getInput (0 , 1 )->toDouble (), -1 );
795+
796+ EXPECT_CALL (audioInput, audioLoudness ()).WillOnce (Return (audioLoudness));
797+ EXPECT_CALL (*audioLoudness, getLoudness ()).WillOnce (Return (62 ));
798+ vm.reset ();
799+ vm.run ();
800+
801+ ASSERT_EQ (vm.registerCount (), 1 );
802+ ASSERT_EQ (vm.getInput (0 , 1 )->toDouble (), 62 );
803+
804+ SensingBlocks::audioInput = nullptr ;
805+ }
806+
744807TEST_F (SensingBlocksTest, Timer)
745808{
746809 Compiler compiler (&m_engineMock);
0 commit comments