@@ -117,6 +117,7 @@ TEST_F(LooksBlocksTest, RegisterBlocks)
117117 EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " looks_switchbackdropto" , &LooksBlocks::compileSwitchBackdropTo));
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));
120+ EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " looks_gotofrontback" , &LooksBlocks::compileGoToFrontBack));
120121 EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " looks_costumenumbername" , &LooksBlocks::compileCostumeNumberName));
121122 EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " looks_backdropnumbername" , &LooksBlocks::compileBackdropNumberName));
122123
@@ -130,6 +131,7 @@ TEST_F(LooksBlocksTest, RegisterBlocks)
130131 // Fields
131132 EXPECT_CALL (m_engineMock, addField (m_section.get (), " NUMBER_NAME" , LooksBlocks::NUMBER_NAME));
132133 EXPECT_CALL (m_engineMock, addField (m_section.get (), " EFFECT" , LooksBlocks::EFFECT));
134+ EXPECT_CALL (m_engineMock, addField (m_section.get (), " FRONT_BACK" , LooksBlocks::FRONT_BACK));
133135
134136 // Field values
135137 EXPECT_CALL (m_engineMock, addFieldValue (m_section.get (), " number" , LooksBlocks::Number));
@@ -141,6 +143,8 @@ TEST_F(LooksBlocksTest, RegisterBlocks)
141143 EXPECT_CALL (m_engineMock, addFieldValue (m_section.get (), " MOSAIC" , LooksBlocks::MosaicEffect));
142144 EXPECT_CALL (m_engineMock, addFieldValue (m_section.get (), " BRIGHTNESS" , LooksBlocks::BrightnessEffect));
143145 EXPECT_CALL (m_engineMock, addFieldValue (m_section.get (), " GHOST" , LooksBlocks::GhostEffect));
146+ EXPECT_CALL (m_engineMock, addFieldValue (m_section.get (), " front" , LooksBlocks::Front));
147+ EXPECT_CALL (m_engineMock, addFieldValue (m_section.get (), " back" , LooksBlocks::Back));
144148
145149 m_section->registerBlocks (&m_engineMock);
146150}
@@ -2577,6 +2581,59 @@ TEST_F(LooksBlocksTest, RandomBackdropAndWait)
25772581 LooksBlocks::rng = RandomGenerator::instance ().get ();
25782582}
25792583
2584+ TEST_F (LooksBlocksTest, GoToFrontBack)
2585+ {
2586+ Compiler compiler (&m_engineMock);
2587+
2588+ // go to [front] layer
2589+ auto block1 = std::make_shared<Block>(" a" , " looks_gotofrontback" );
2590+ addDropdownField (block1, " FRONT_BACK" , LooksBlocks::FRONT_BACK, " front" , LooksBlocks::Front);
2591+
2592+ // go to [back] layer
2593+ auto block2 = std::make_shared<Block>(" b" , " looks_gotofrontback" );
2594+ addDropdownField (block2, " FRONT_BACK" , LooksBlocks::FRONT_BACK, " back" , LooksBlocks::Back);
2595+
2596+ compiler.init ();
2597+
2598+ EXPECT_CALL (m_engineMock, functionIndex (&LooksBlocks::goToFront)).WillOnce (Return (0 ));
2599+ compiler.setBlock (block1);
2600+ LooksBlocks::compileGoToFrontBack (&compiler);
2601+
2602+ EXPECT_CALL (m_engineMock, functionIndex (&LooksBlocks::goToBack)).WillOnce (Return (1 ));
2603+ compiler.setBlock (block2);
2604+ LooksBlocks::compileGoToFrontBack (&compiler);
2605+
2606+ compiler.end ();
2607+
2608+ ASSERT_EQ (compiler.bytecode (), std::vector<unsigned int >({ vm::OP_START, vm::OP_EXEC, 0 , vm::OP_EXEC, 1 , vm::OP_HALT }));
2609+ ASSERT_TRUE (compiler.constValues ().empty ());
2610+ }
2611+
2612+ TEST_F (LooksBlocksTest, GoToFrontBackImpl)
2613+ {
2614+ static unsigned int bytecode1[] = { vm::OP_START, vm::OP_EXEC, 0 , vm::OP_HALT };
2615+ static unsigned int bytecode2[] = { vm::OP_START, vm::OP_EXEC, 1 , vm::OP_HALT };
2616+ static BlockFunc functions[] = { &LooksBlocks::goToFront, &LooksBlocks::goToBack };
2617+
2618+ Sprite sprite;
2619+
2620+ VirtualMachine vm (&sprite, &m_engineMock, nullptr );
2621+ vm.setFunctions (functions);
2622+
2623+ EXPECT_CALL (m_engineMock, moveSpriteToFront (&sprite));
2624+ vm.setBytecode (bytecode1);
2625+ vm.run ();
2626+
2627+ ASSERT_EQ (vm.registerCount (), 0 );
2628+
2629+ EXPECT_CALL (m_engineMock, moveSpriteToBack (&sprite));
2630+ vm.reset ();
2631+ vm.setBytecode (bytecode2);
2632+ vm.run ();
2633+
2634+ ASSERT_EQ (vm.registerCount (), 0 );
2635+ }
2636+
25802637TEST_F (LooksBlocksTest, CostumeNumberName)
25812638{
25822639 Compiler compiler (&m_engineMock);
0 commit comments