Skip to content

Commit b54961b

Browse files
committed
Set change function of monitors
1 parent 8718296 commit b54961b

File tree

2 files changed

+26
-6
lines changed

2 files changed

+26
-6
lines changed

src/engine/internal/engine.cpp

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -229,10 +229,13 @@ void Engine::compile()
229229
auto container = blockSectionContainer(block->opcode());
230230

231231
if (container) {
232-
MonitorNameFunc f = container->resolveMonitorNameFunc(block->opcode());
232+
MonitorNameFunc nameFunc = container->resolveMonitorNameFunc(block->opcode());
233233

234-
if (f)
235-
monitor->impl->name = f(block.get());
234+
if (nameFunc)
235+
monitor->impl->name = nameFunc(block.get());
236+
237+
MonitorChangeFunc changeFunc = container->resolveMonitorChangeFunc(block->opcode());
238+
monitor->setValueChangeFunction(changeFunc);
236239
}
237240

238241
if (section) {
@@ -1466,10 +1469,13 @@ void Engine::addVarOrListMonitor(std::shared_ptr<Monitor> monitor, Target *targe
14661469
auto container = blockSectionContainer(monitor->opcode());
14671470

14681471
if (container) {
1469-
MonitorNameFunc f = container->resolveMonitorNameFunc(monitor->opcode());
1472+
MonitorNameFunc nameFunc = container->resolveMonitorNameFunc(monitor->opcode());
1473+
1474+
if (nameFunc)
1475+
monitor->impl->name = nameFunc(monitor->block().get());
14701476

1471-
if (f)
1472-
monitor->impl->name = f(monitor->block().get());
1477+
MonitorChangeFunc changeFunc = container->resolveMonitorChangeFunc(monitor->opcode());
1478+
monitor->setValueChangeFunction(changeFunc);
14731479
}
14741480

14751481
// Auto-position the monitor

test/engine/engine_test.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,9 @@ TEST(EngineTest, CompileAndExecuteMonitors)
130130

131131
engine.addMonitorNameFunction(section.get(), m2->opcode(), [](Block *block) -> const std::string & { return block->opcode(); });
132132

133+
engine.addMonitorChangeFunction(section.get(), m1->opcode(), [](Block *block, const Value &newValue) { std::cout << "change 1!" << std::endl; });
134+
engine.addMonitorChangeFunction(section.get(), m2->opcode(), [](Block *block, const Value &newValue) { std::cout << "change 2!" << std::endl; });
135+
133136
// Compile the monitor blocks
134137
engine.compile();
135138
auto script1 = m1->script();
@@ -170,6 +173,17 @@ TEST(EngineTest, CompileAndExecuteMonitors)
170173
})));
171174
EXPECT_CALL(iface3, onValueChanged).Times(0);
172175
engine.updateMonitors();
176+
177+
// Change the monitor values
178+
testing::internal::CaptureStdout();
179+
EXPECT_CALL(iface1, onValueChanged);
180+
m1->changeValue(0);
181+
ASSERT_EQ(testing::internal::GetCapturedStdout(), "change 1!\n");
182+
183+
testing::internal::CaptureStdout();
184+
EXPECT_CALL(iface2, onValueChanged);
185+
m2->changeValue(0);
186+
ASSERT_EQ(testing::internal::GetCapturedStdout(), "change 2!\n");
173187
}
174188

175189
TEST(EngineTest, IsRunning)

0 commit comments

Comments
 (0)