2727using namespace libscratchcpp ;
2828
2929using ::testing::Return;
30+ using ::testing::SaveArg;
31+ using ::testing::_;
3032
3133// NOTE: resolveIds() and compile() are tested in load_project_test
3234
@@ -36,6 +38,12 @@ class RedrawMock
3638 MOCK_METHOD (void , redraw, ());
3739};
3840
41+ class AddMonitorMock
42+ {
43+ public:
44+ MOCK_METHOD (void , monitorAdded, (Monitor *));
45+ };
46+
3947TEST (EngineTest, Clock)
4048{
4149 Engine engine;
@@ -1144,6 +1152,16 @@ TEST(EngineTest, Monitors)
11441152
11451153 engine.setMonitors ({ m1, m2, m3 });
11461154 ASSERT_EQ (engine.monitors (), std::vector<std::shared_ptr<Monitor>>({ m1, m2, m3 }));
1155+
1156+ AddMonitorMock addMonitorMock;
1157+ auto handler = std::bind (&AddMonitorMock::monitorAdded, &addMonitorMock, std::placeholders::_1);
1158+ engine.setAddMonitorHandler (std::function<void (Monitor *)>(handler));
1159+ engine.setMonitors ({});
1160+
1161+ EXPECT_CALL (addMonitorMock, monitorAdded (m1.get ()));
1162+ EXPECT_CALL (addMonitorMock, monitorAdded (m2.get ()));
1163+ EXPECT_CALL (addMonitorMock, monitorAdded (m3.get ()));
1164+ engine.setMonitors ({ m1, m2, m3 });
11471165}
11481166
11491167TEST (EngineTest, CreateMissingMonitors)
@@ -1242,6 +1260,29 @@ TEST(EngineTest, CreateMissingMonitors)
12421260 checkVariableMonitor (monitors[5 ], var4);
12431261 checkVariableMonitor (monitors[6 ], var5);
12441262 }
1263+
1264+ {
1265+ Engine engine;
1266+ AddMonitorMock addMonitorMock;
1267+ auto handler = std::bind (&AddMonitorMock::monitorAdded, &addMonitorMock, std::placeholders::_1);
1268+ engine.setAddMonitorHandler (std::function<void (Monitor *)>(handler));
1269+
1270+ EXPECT_CALL (addMonitorMock, monitorAdded (m1.get ()));
1271+ EXPECT_CALL (addMonitorMock, monitorAdded (m2.get ()));
1272+ EXPECT_CALL (addMonitorMock, monitorAdded (m3.get ()));
1273+ engine.setMonitors ({ m1, m2, m3 });
1274+
1275+ Monitor *m4, *m5, *m6, *m7;
1276+ EXPECT_CALL (addMonitorMock, monitorAdded (_)).WillOnce (SaveArg<0 >(&m4)).WillOnce (SaveArg<0 >(&m5)).WillOnce (SaveArg<0 >(&m6)).WillOnce (SaveArg<0 >(&m7));
1277+ engine.setTargets ({ target1, target2 });
1278+
1279+ const auto &monitors = engine.monitors ();
1280+ ASSERT_EQ (monitors.size (), 7 );
1281+ ASSERT_EQ (monitors[3 ].get (), m4);
1282+ ASSERT_EQ (monitors[4 ].get (), m5);
1283+ ASSERT_EQ (monitors[5 ].get (), m6);
1284+ ASSERT_EQ (monitors[6 ].get (), m7);
1285+ }
12451286}
12461287
12471288TEST (EngineTest, Clones)
0 commit comments