@@ -118,6 +118,7 @@ TEST_F(LooksBlocksTest, RegisterBlocks)
118118 EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " looks_switchbackdroptoandwait" , &LooksBlocks::compileSwitchBackdropToAndWait));
119119 EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " looks_nextbackdrop" , &LooksBlocks::compileNextBackdrop));
120120 EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " looks_gotofrontback" , &LooksBlocks::compileGoToFrontBack));
121+ EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " looks_goforwardbackwardlayers" , &LooksBlocks::compileGoForwardBackwardLayers));
121122 EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " looks_costumenumbername" , &LooksBlocks::compileCostumeNumberName));
122123 EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " looks_backdropnumbername" , &LooksBlocks::compileBackdropNumberName));
123124
@@ -132,6 +133,7 @@ TEST_F(LooksBlocksTest, RegisterBlocks)
132133 EXPECT_CALL (m_engineMock, addField (m_section.get (), " NUMBER_NAME" , LooksBlocks::NUMBER_NAME));
133134 EXPECT_CALL (m_engineMock, addField (m_section.get (), " EFFECT" , LooksBlocks::EFFECT));
134135 EXPECT_CALL (m_engineMock, addField (m_section.get (), " FRONT_BACK" , LooksBlocks::FRONT_BACK));
136+ EXPECT_CALL (m_engineMock, addField (m_section.get (), " FORWARD_BACKWARD" , LooksBlocks::FORWARD_BACKWARD));
135137
136138 // Field values
137139 EXPECT_CALL (m_engineMock, addFieldValue (m_section.get (), " number" , LooksBlocks::Number));
@@ -145,6 +147,8 @@ TEST_F(LooksBlocksTest, RegisterBlocks)
145147 EXPECT_CALL (m_engineMock, addFieldValue (m_section.get (), " GHOST" , LooksBlocks::GhostEffect));
146148 EXPECT_CALL (m_engineMock, addFieldValue (m_section.get (), " front" , LooksBlocks::Front));
147149 EXPECT_CALL (m_engineMock, addFieldValue (m_section.get (), " back" , LooksBlocks::Back));
150+ EXPECT_CALL (m_engineMock, addFieldValue (m_section.get (), " forward" , LooksBlocks::Forward));
151+ EXPECT_CALL (m_engineMock, addFieldValue (m_section.get (), " backward" , LooksBlocks::Backward));
148152
149153 m_section->registerBlocks (&m_engineMock);
150154}
@@ -2634,6 +2638,63 @@ TEST_F(LooksBlocksTest, GoToFrontBackImpl)
26342638 ASSERT_EQ (vm.registerCount (), 0 );
26352639}
26362640
2641+ TEST_F (LooksBlocksTest, GoForwardBackwardLayers)
2642+ {
2643+ Compiler compiler (&m_engineMock);
2644+
2645+ // go [forward] (5) layers
2646+ auto block1 = std::make_shared<Block>(" a" , " looks_goforwardbackwardlayers" );
2647+ addDropdownField (block1, " FORWARD_BACKWARD" , LooksBlocks::FORWARD_BACKWARD, " forward" , LooksBlocks::Forward);
2648+ addValueInput (block1, " NUM" , LooksBlocks::NUM, 5 );
2649+
2650+ // go [backward] (3) layers
2651+ auto block2 = std::make_shared<Block>(" b" , " looks_goforwardbackwardlayers" );
2652+ addDropdownField (block2, " FORWARD_BACKWARD" , LooksBlocks::FORWARD_BACKWARD, " backward" , LooksBlocks::Backward);
2653+ addValueInput (block2, " NUM" , LooksBlocks::NUM, 3 );
2654+
2655+ compiler.init ();
2656+
2657+ EXPECT_CALL (m_engineMock, functionIndex (&LooksBlocks::goForwardLayers)).WillOnce (Return (0 ));
2658+ compiler.setBlock (block1);
2659+ LooksBlocks::compileGoForwardBackwardLayers (&compiler);
2660+
2661+ EXPECT_CALL (m_engineMock, functionIndex (&LooksBlocks::goBackwardLayers)).WillOnce (Return (1 ));
2662+ compiler.setBlock (block2);
2663+ LooksBlocks::compileGoForwardBackwardLayers (&compiler);
2664+
2665+ compiler.end ();
2666+
2667+ ASSERT_EQ (compiler.bytecode (), std::vector<unsigned int >({ vm::OP_START, vm::OP_CONST, 0 , vm::OP_EXEC, 0 , vm::OP_CONST, 1 , vm::OP_EXEC, 1 , vm::OP_HALT }));
2668+ ASSERT_EQ (compiler.constValues (), std::vector<Value>({ 5 , 3 }));
2669+ }
2670+
2671+ TEST_F (LooksBlocksTest, GoForwardBackwardLayersImpl)
2672+ {
2673+ static unsigned int bytecode1[] = { vm::OP_START, vm::OP_CONST, 0 , vm::OP_EXEC, 0 , vm::OP_HALT };
2674+ static unsigned int bytecode2[] = { vm::OP_START, vm::OP_CONST, 1 , vm::OP_EXEC, 1 , vm::OP_HALT };
2675+ static BlockFunc functions[] = { &LooksBlocks::goForwardLayers, &LooksBlocks::goBackwardLayers };
2676+ static Value constValues[] = { 5 , 3 };
2677+
2678+ Sprite sprite;
2679+
2680+ VirtualMachine vm (&sprite, &m_engineMock, nullptr );
2681+ vm.setFunctions (functions);
2682+ vm.setConstValues (constValues);
2683+
2684+ EXPECT_CALL (m_engineMock, moveSpriteForwardLayers (&sprite, 5 ));
2685+ vm.setBytecode (bytecode1);
2686+ vm.run ();
2687+
2688+ ASSERT_EQ (vm.registerCount (), 0 );
2689+
2690+ EXPECT_CALL (m_engineMock, moveSpriteBackwardLayers (&sprite, 3 ));
2691+ vm.reset ();
2692+ vm.setBytecode (bytecode2);
2693+ vm.run ();
2694+
2695+ ASSERT_EQ (vm.registerCount (), 0 );
2696+ }
2697+
26372698TEST_F (LooksBlocksTest, CostumeNumberName)
26382699{
26392700 Compiler compiler (&m_engineMock);
0 commit comments