2929#include " engine/internal/clock.h"
3030
3131// TODO: Remove this
32- #include " blocks/variableblocks.h"
33- #include " blocks/listblocks.h"
3432#include " blocks/eventblocks.h"
3533
3634using namespace libscratchcpp ;
@@ -1708,6 +1706,14 @@ TEST(EngineTest, Monitors)
17081706
17091707TEST (EngineTest, CreateMissingMonitors)
17101708{
1709+ static constexpr const char *VARIABLE_OPCODE = " data_variable" ;
1710+ static constexpr const char *VARIABLE_FIELD_NAME = " VARIABLE" ;
1711+ static constexpr int VARIABLE_FIELD_ID = 1 ;
1712+
1713+ static constexpr const char *LIST_OPCODE = " data_listcontents" ;
1714+ static constexpr const char *LIST_FIELD_NAME = " LIST" ;
1715+ static constexpr int LIST_FIELD_ID = 2 ;
1716+
17111717 auto var1 = std::make_shared<Variable>(" a" , " var1" );
17121718 auto var2 = std::make_shared<Variable>(" b" , " var2" );
17131719 auto var3 = std::make_shared<Variable>(" c" , " var3" );
@@ -1730,6 +1736,8 @@ TEST(EngineTest, CreateMissingMonitors)
17301736 auto m3 = std::make_shared<Monitor>(list2->id (), " data_listcontents" );
17311737
17321738 auto checkVariableMonitor = [](std::shared_ptr<Monitor> monitor, std::shared_ptr<Variable> var) {
1739+ ASSERT_EQ (var->monitor (), monitor.get ());
1740+
17331741 auto block = monitor->block ();
17341742 ASSERT_EQ (monitor->id (), var->id ());
17351743 ASSERT_EQ (monitor->opcode (), " data_variable" );
@@ -1738,8 +1746,8 @@ TEST(EngineTest, CreateMissingMonitors)
17381746 ASSERT_EQ (block->fields ().size (), 1 );
17391747
17401748 auto field = block->fieldAt (0 );
1741- ASSERT_EQ (field->name (), " VARIABLE " );
1742- ASSERT_EQ (field->fieldId (), VariableBlocks::VARIABLE );
1749+ ASSERT_EQ (field->name (), VARIABLE_FIELD_NAME );
1750+ ASSERT_EQ (field->fieldId (), VARIABLE_FIELD_ID );
17431751 ASSERT_EQ (field->value (), var->name ());
17441752 ASSERT_EQ (field->valuePtr (), var);
17451753
@@ -1750,6 +1758,8 @@ TEST(EngineTest, CreateMissingMonitors)
17501758 };
17511759
17521760 auto checkListMonitor = [](std::shared_ptr<Monitor> monitor, std::shared_ptr<List> list) {
1761+ ASSERT_EQ (list->monitor (), monitor.get ());
1762+
17531763 auto block = monitor->block ();
17541764 ASSERT_EQ (monitor->id (), list->id ());
17551765 ASSERT_EQ (monitor->opcode (), " data_listcontents" );
@@ -1758,8 +1768,8 @@ TEST(EngineTest, CreateMissingMonitors)
17581768 ASSERT_EQ (block->fields ().size (), 1 );
17591769
17601770 auto field = block->fieldAt (0 );
1761- ASSERT_EQ (field->name (), " LIST " );
1762- ASSERT_EQ (field->fieldId (), ListBlocks::LIST );
1771+ ASSERT_EQ (field->name (), LIST_FIELD_NAME );
1772+ ASSERT_EQ (field->fieldId (), LIST_FIELD_ID );
17631773 ASSERT_EQ (field->value (), list->name ());
17641774 ASSERT_EQ (field->valuePtr (), list);
17651775
@@ -1769,40 +1779,34 @@ TEST(EngineTest, CreateMissingMonitors)
17691779 ASSERT_EQ (monitor->sprite (), dynamic_cast <Sprite *>(list->target ()));
17701780 };
17711781
1772- // Set monitors after setting targets
17731782 {
17741783 Engine engine;
17751784 engine.setTargets ({ target1, target2 });
17761785 engine.setMonitors ({ m1, m2, m3 });
17771786
17781787 const auto &monitors = engine.monitors ();
1779- ASSERT_EQ (monitors.size (), 7 );
1788+ ASSERT_EQ (monitors.size (), 3 );
17801789 ASSERT_EQ (monitors[0 ], m1);
17811790 ASSERT_EQ (monitors[1 ], m2);
17821791 ASSERT_EQ (monitors[2 ], m3);
1783- checkVariableMonitor (monitors[3 ], var2);
1784- checkListMonitor (monitors[4 ], list1);
1785- checkVariableMonitor (monitors[5 ], var4);
1786- checkVariableMonitor (monitors[6 ], var5);
1787- }
17881792
1789- // Set monitors before setting targets
1790- {
1791- Engine engine;
1792- engine.setMonitors ({ m1, m2, m3 });
1793- engine.setTargets ({ target1, target2 });
1793+ engine.createVariableMonitor (var2, VARIABLE_OPCODE, VARIABLE_FIELD_NAME, VARIABLE_FIELD_ID);
1794+ engine.createListMonitor (list1, LIST_OPCODE, LIST_FIELD_NAME, LIST_FIELD_ID);
1795+ engine.createVariableMonitor (var4, VARIABLE_OPCODE, VARIABLE_FIELD_NAME, VARIABLE_FIELD_ID);
1796+ engine.createVariableMonitor (var5, VARIABLE_OPCODE, VARIABLE_FIELD_NAME, VARIABLE_FIELD_ID);
17941797
1795- const auto &monitors = engine.monitors ();
17961798 ASSERT_EQ (monitors.size (), 7 );
1797- ASSERT_EQ (monitors[0 ], m1);
1798- ASSERT_EQ (monitors[1 ], m2);
1799- ASSERT_EQ (monitors[2 ], m3);
18001799 checkVariableMonitor (monitors[3 ], var2);
18011800 checkListMonitor (monitors[4 ], list1);
18021801 checkVariableMonitor (monitors[5 ], var4);
18031802 checkVariableMonitor (monitors[6 ], var5);
18041803 }
18051804
1805+ var2->setMonitor (nullptr );
1806+ list1->setMonitor (nullptr );
1807+ var4->setMonitor (nullptr );
1808+ var5->setMonitor (nullptr );
1809+
18061810 {
18071811 Engine engine;
18081812 AddRemoveMonitorMock addMonitorMock;
@@ -1816,7 +1820,11 @@ TEST(EngineTest, CreateMissingMonitors)
18161820
18171821 Monitor *m4, *m5, *m6, *m7;
18181822 EXPECT_CALL (addMonitorMock, monitorAdded (_)).WillOnce (SaveArg<0 >(&m4)).WillOnce (SaveArg<0 >(&m5)).WillOnce (SaveArg<0 >(&m6)).WillOnce (SaveArg<0 >(&m7));
1819- engine.setTargets ({ target1, target2 });
1823+
1824+ engine.createVariableMonitor (var2, VARIABLE_OPCODE, VARIABLE_FIELD_NAME, VARIABLE_FIELD_ID);
1825+ engine.createListMonitor (list1, LIST_OPCODE, LIST_FIELD_NAME, LIST_FIELD_ID);
1826+ engine.createVariableMonitor (var4, VARIABLE_OPCODE, VARIABLE_FIELD_NAME, VARIABLE_FIELD_ID);
1827+ engine.createVariableMonitor (var5, VARIABLE_OPCODE, VARIABLE_FIELD_NAME, VARIABLE_FIELD_ID);
18201828
18211829 const auto &monitors = engine.monitors ();
18221830 ASSERT_EQ (monitors.size (), 7 );
0 commit comments