@@ -106,6 +106,7 @@ TEST_F(LooksBlocksTest, RegisterBlocks)
106106 EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " looks_nextcostume" , &LooksBlocks::compileNextCostume));
107107 EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " looks_switchbackdropto" , &LooksBlocks::compileSwitchBackdropTo));
108108 EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " looks_costumenumbername" , &LooksBlocks::compileCostumeNumberName));
109+ EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " looks_backdropnumbername" , &LooksBlocks::compileBackdropNumberName));
109110
110111 // Inputs
111112 EXPECT_CALL (m_engineMock, addInput (m_section.get (), " CHANGE" , LooksBlocks::CHANGE));
@@ -117,8 +118,8 @@ TEST_F(LooksBlocksTest, RegisterBlocks)
117118 EXPECT_CALL (m_engineMock, addField (m_section.get (), " NUMBER_NAME" , LooksBlocks::NUMBER_NAME));
118119
119120 // Field values
120- EXPECT_CALL (m_engineMock, addFieldValue (m_section.get (), " number" , LooksBlocks::CostumeNumber ));
121- EXPECT_CALL (m_engineMock, addFieldValue (m_section.get (), " name" , LooksBlocks::CostumeName ));
121+ EXPECT_CALL (m_engineMock, addFieldValue (m_section.get (), " number" , LooksBlocks::Number ));
122+ EXPECT_CALL (m_engineMock, addFieldValue (m_section.get (), " name" , LooksBlocks::Name ));
122123
123124 m_section->registerBlocks (&m_engineMock);
124125}
@@ -1249,11 +1250,11 @@ TEST_F(LooksBlocksTest, CostumeNumberName)
12491250
12501251 // costume [number]
12511252 auto block1 = std::make_shared<Block>(" a" , " looks_costumenumbername" );
1252- addDropdownField (block1, " NUMBER_NAME" , LooksBlocks::NUMBER_NAME, " number" , LooksBlocks::CostumeNumber );
1253+ addDropdownField (block1, " NUMBER_NAME" , LooksBlocks::NUMBER_NAME, " number" , LooksBlocks::Number );
12531254
12541255 // costume [name]
12551256 auto block2 = std::make_shared<Block>(" b" , " looks_costumenumbername" );
1256- addDropdownField (block2, " NUMBER_NAME" , LooksBlocks::NUMBER_NAME, " name" , LooksBlocks::CostumeName );
1257+ addDropdownField (block2, " NUMBER_NAME" , LooksBlocks::NUMBER_NAME, " name" , LooksBlocks::Name );
12571258
12581259 compiler.init ();
12591260
@@ -1320,3 +1321,87 @@ TEST_F(LooksBlocksTest, CostumeNumberNameImpl)
13201321 ASSERT_EQ (vm.registerCount (), 1 );
13211322 ASSERT_EQ (vm.getInput (0 , 1 )->toString (), " costume3" );
13221323}
1324+
1325+ TEST_F (LooksBlocksTest, BackdropNumberName)
1326+ {
1327+ Compiler compiler (&m_engineMock);
1328+
1329+ // backdrop [number]
1330+ auto block1 = std::make_shared<Block>(" a" , " looks_backdropnumbername" );
1331+ addDropdownField (block1, " NUMBER_NAME" , LooksBlocks::NUMBER_NAME, " number" , LooksBlocks::Number);
1332+
1333+ // backdrop [name]
1334+ auto block2 = std::make_shared<Block>(" b" , " looks_backdropnumbername" );
1335+ addDropdownField (block2, " NUMBER_NAME" , LooksBlocks::NUMBER_NAME, " name" , LooksBlocks::Name);
1336+
1337+ compiler.init ();
1338+
1339+ EXPECT_CALL (m_engineMock, functionIndex (&LooksBlocks::backdropNumber)).WillOnce (Return (0 ));
1340+ compiler.setBlock (block1);
1341+ LooksBlocks::compileBackdropNumberName (&compiler);
1342+
1343+ EXPECT_CALL (m_engineMock, functionIndex (&LooksBlocks::backdropName)).WillOnce (Return (1 ));
1344+ compiler.setBlock (block2);
1345+ LooksBlocks::compileBackdropNumberName (&compiler);
1346+
1347+ compiler.end ();
1348+
1349+ ASSERT_EQ (compiler.bytecode (), std::vector<unsigned int >({ vm::OP_START, vm::OP_EXEC, 0 , vm::OP_EXEC, 1 , vm::OP_HALT }));
1350+ ASSERT_TRUE (compiler.constValues ().empty ());
1351+ }
1352+
1353+ TEST_F (LooksBlocksTest, BackdropNumberNameImpl)
1354+ {
1355+ static unsigned int bytecode1[] = { vm::OP_START, vm::OP_EXEC, 0 , vm::OP_HALT };
1356+ static unsigned int bytecode2[] = { vm::OP_START, vm::OP_EXEC, 1 , vm::OP_HALT };
1357+ static BlockFunc functions[] = { &LooksBlocks::backdropNumber, &LooksBlocks::backdropName };
1358+
1359+ auto b1 = std::make_shared<Costume>(" backdrop1" , " b1" , " svg" );
1360+ auto b2 = std::make_shared<Costume>(" backdrop2" , " b2" , " svg" );
1361+ auto b3 = std::make_shared<Costume>(" backdrop3" , " b3" , " svg" );
1362+
1363+ Target target;
1364+
1365+ Stage stage;
1366+ stage.addCostume (b1);
1367+ stage.addCostume (b2);
1368+ stage.addCostume (b3);
1369+
1370+ VirtualMachine vm (&target, &m_engineMock, nullptr );
1371+ vm.setFunctions (functions);
1372+
1373+ stage.setCurrentCostume (2 );
1374+
1375+ EXPECT_CALL (m_engineMock, stage ()).WillOnce (Return (&stage));
1376+ vm.setBytecode (bytecode1);
1377+ vm.run ();
1378+
1379+ ASSERT_EQ (vm.registerCount (), 1 );
1380+ ASSERT_EQ (vm.getInput (0 , 1 )->toDouble (), 2 );
1381+
1382+ EXPECT_CALL (m_engineMock, stage ()).WillOnce (Return (&stage));
1383+ vm.reset ();
1384+ vm.setBytecode (bytecode2);
1385+ vm.run ();
1386+
1387+ ASSERT_EQ (vm.registerCount (), 1 );
1388+ ASSERT_EQ (vm.getInput (0 , 1 )->toString (), " backdrop2" );
1389+
1390+ stage.setCurrentCostume (3 );
1391+
1392+ EXPECT_CALL (m_engineMock, stage ()).WillOnce (Return (&stage));
1393+ vm.reset ();
1394+ vm.setBytecode (bytecode1);
1395+ vm.run ();
1396+
1397+ ASSERT_EQ (vm.registerCount (), 1 );
1398+ ASSERT_EQ (vm.getInput (0 , 1 )->toDouble (), 3 );
1399+
1400+ EXPECT_CALL (m_engineMock, stage ()).WillOnce (Return (&stage));
1401+ vm.reset ();
1402+ vm.setBytecode (bytecode2);
1403+ vm.run ();
1404+
1405+ ASSERT_EQ (vm.registerCount (), 1 );
1406+ ASSERT_EQ (vm.getInput (0 , 1 )->toString (), " backdrop3" );
1407+ }
0 commit comments