@@ -102,6 +102,7 @@ TEST_F(SensingBlocksTest, RegisterBlocks)
102102 EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " sensing_mousedown" , &SensingBlocks::compileMouseDown));
103103 EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " sensing_mousex" , &SensingBlocks::compileMouseX));
104104 EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " sensing_mousey" , &SensingBlocks::compileMouseY));
105+ EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " sensing_setdragmode" , &SensingBlocks::compileSetDragMode));
105106 EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " sensing_timer" , &SensingBlocks::compileTimer));
106107 EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " sensing_resettimer" , &SensingBlocks::compileResetTimer));
107108 EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " sensing_current" , &SensingBlocks::compileCurrent));
@@ -113,6 +114,7 @@ TEST_F(SensingBlocksTest, RegisterBlocks)
113114
114115 // Fields
115116 EXPECT_CALL (m_engineMock, addField (m_section.get (), " CURRENTMENU" , SensingBlocks::CURRENTMENU));
117+ EXPECT_CALL (m_engineMock, addField (m_section.get (), " DRAG_MODE" , SensingBlocks::DRAG_MODE));
116118
117119 // Field values
118120 EXPECT_CALL (m_engineMock, addFieldValue (m_section.get (), " YEAR" , SensingBlocks::YEAR));
@@ -122,6 +124,8 @@ TEST_F(SensingBlocksTest, RegisterBlocks)
122124 EXPECT_CALL (m_engineMock, addFieldValue (m_section.get (), " HOUR" , SensingBlocks::HOUR));
123125 EXPECT_CALL (m_engineMock, addFieldValue (m_section.get (), " MINUTE" , SensingBlocks::MINUTE));
124126 EXPECT_CALL (m_engineMock, addFieldValue (m_section.get (), " SECOND" , SensingBlocks::SECOND));
127+ EXPECT_CALL (m_engineMock, addFieldValue (m_section.get (), " draggable" , SensingBlocks::Draggable));
128+ EXPECT_CALL (m_engineMock, addFieldValue (m_section.get (), " not draggable" , SensingBlocks::NotDraggable));
125129
126130 m_section->registerBlocks (&m_engineMock);
127131}
@@ -465,6 +469,60 @@ TEST_F(SensingBlocksTest, MouseYImpl)
465469 ASSERT_EQ (vm.getInput (0 , 1 )->toDouble (), -95.564 );
466470}
467471
472+ TEST_F (SensingBlocksTest, SetDragMode)
473+ {
474+ Compiler compiler (&m_engineMock);
475+
476+ // set drag mode [draggable]
477+ auto block1 = std::make_shared<Block>(" a" , " sensing_setdragmode" );
478+ addDropdownField (block1, " DRAG_MODE" , SensingBlocks::DRAG_MODE, " draggable" , SensingBlocks::Draggable);
479+
480+ // set drag mode [not draggable]
481+ auto block2 = std::make_shared<Block>(" b" , " sensing_setdragmode" );
482+ addDropdownField (block2, " DRAG_MODE" , SensingBlocks::DRAG_MODE, " not draggable" , SensingBlocks::NotDraggable);
483+
484+ compiler.init ();
485+
486+ EXPECT_CALL (m_engineMock, functionIndex (&SensingBlocks::setDraggableMode)).WillOnce (Return (0 ));
487+ compiler.setBlock (block1);
488+ SensingBlocks::compileSetDragMode (&compiler);
489+
490+ EXPECT_CALL (m_engineMock, functionIndex (&SensingBlocks::setNotDraggableMode)).WillOnce (Return (1 ));
491+ compiler.setBlock (block2);
492+ SensingBlocks::compileSetDragMode (&compiler);
493+
494+ compiler.end ();
495+
496+ ASSERT_EQ (compiler.bytecode (), std::vector<unsigned int >({ vm::OP_START, vm::OP_EXEC, 0 , vm::OP_EXEC, 1 , vm::OP_HALT }));
497+ ASSERT_TRUE (compiler.constValues ().empty ());
498+ }
499+
500+ TEST_F (SensingBlocksTest, SetDragModeImpl)
501+ {
502+ static unsigned int bytecode1[] = { vm::OP_START, vm::OP_EXEC, 0 , vm::OP_HALT };
503+ static unsigned int bytecode2[] = { vm::OP_START, vm::OP_EXEC, 1 , vm::OP_HALT };
504+ static BlockFunc functions[] = { &SensingBlocks::setDraggableMode, &SensingBlocks::setNotDraggableMode };
505+
506+ Sprite sprite;
507+ sprite.setDraggable (false );
508+
509+ VirtualMachine vm (&sprite, &m_engineMock, nullptr );
510+ vm.setFunctions (functions);
511+
512+ vm.setBytecode (bytecode1);
513+ vm.run ();
514+
515+ ASSERT_EQ (vm.registerCount (), 0 );
516+ ASSERT_TRUE (sprite.draggable ());
517+
518+ vm.reset ();
519+ vm.setBytecode (bytecode2);
520+ vm.run ();
521+
522+ ASSERT_EQ (vm.registerCount (), 0 );
523+ ASSERT_FALSE (sprite.draggable ());
524+ }
525+
468526TEST_F (SensingBlocksTest, Timer)
469527{
470528 Compiler compiler (&m_engineMock);
0 commit comments