Skip to content

Commit f303062

Browse files
committed
Replace question asked/answered handlers with signals
1 parent d33c48f commit f303062

File tree

5 files changed

+12
-62
lines changed

5 files changed

+12
-62
lines changed

include/scratchcpp/iengine.h

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -352,17 +352,11 @@ class LIBSCRATCHCPP_EXPORT IEngine
352352
/*! Emits when a monitor is removed. */
353353
virtual sigslot::signal<Monitor *, IMonitorHandler *> &monitorRemoved() = 0;
354354

355-
/*! Returns the function which is called when a question is asked, for example using the 'ask and wait' block. */
356-
virtual const std::function<void(const std::string &)> &questionAsked() const = 0;
355+
/*! Emits when a question is asked, for example using the 'ask and wait' block. */
356+
virtual sigslot::signal<const std::string &> &questionAsked() = 0;
357357

358-
/*! Sets the function which is called when a question is asked, for example using the 'ask and wait' block. */
359-
virtual void setQuestionAsked(const std::function<void(const std::string &)> &f) = 0;
360-
361-
/*! Returns the function which should be called when a question is answered. */
362-
virtual const std::function<void(const std::string &)> &questionAnswered() const = 0;
363-
364-
/*! Sets the function which should be called when a question is answered. */
365-
virtual void setQuestionAnswered(const std::function<void(const std::string &)> &f) = 0;
358+
/*! Emits when a question is answered. */
359+
virtual sigslot::signal<const std::string &> &questionAnswered() = 0;
366360

367361
/*! Returns the list of extension names. */
368362
virtual const std::vector<std::string> &extensions() const = 0;

src/engine/internal/engine.cpp

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1239,26 +1239,16 @@ sigslot::signal<Monitor *, IMonitorHandler *> &Engine::monitorRemoved()
12391239
return m_monitorRemoved;
12401240
}
12411241

1242-
const std::function<void(const std::string &)> &Engine::questionAsked() const
1242+
sigslot::signal<const std::string &> &Engine::questionAsked()
12431243
{
12441244
return m_questionAsked;
12451245
}
12461246

1247-
void Engine::setQuestionAsked(const std::function<void(const std::string &)> &f)
1248-
{
1249-
m_questionAsked = f;
1250-
}
1251-
1252-
const std::function<void(const std::string &)> &Engine::questionAnswered() const
1247+
sigslot::signal<const std::string &> &Engine::questionAnswered()
12531248
{
12541249
return m_questionAnswered;
12551250
}
12561251

1257-
void Engine::setQuestionAnswered(const std::function<void(const std::string &)> &f)
1258-
{
1259-
m_questionAnswered = f;
1260-
}
1261-
12621252
const std::vector<std::string> &Engine::extensions() const
12631253
{
12641254
return m_extensions;

src/engine/internal/engine.h

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -146,11 +146,8 @@ class Engine : public IEngine
146146
sigslot::signal<Monitor *> &monitorAdded() override;
147147
sigslot::signal<Monitor *, IMonitorHandler *> &monitorRemoved() override;
148148

149-
const std::function<void(const std::string &)> &questionAsked() const override;
150-
void setQuestionAsked(const std::function<void(const std::string &)> &f) override;
151-
152-
const std::function<void(const std::string &)> &questionAnswered() const override;
153-
void setQuestionAnswered(const std::function<void(const std::string &)> &f) override;
149+
sigslot::signal<const std::string &> &questionAsked() override;
150+
sigslot::signal<const std::string &> &questionAnswered() override;
154151

155152
const std::vector<std::string> &extensions() const override;
156153
void setExtensions(const std::vector<std::string> &newExtensions) override;
@@ -274,8 +271,8 @@ class Engine : public IEngine
274271

275272
sigslot::signal<Monitor *> m_monitorAdded;
276273
sigslot::signal<Monitor *, IMonitorHandler *> m_monitorRemoved;
277-
std::function<void(const std::string &)> m_questionAsked = nullptr;
278-
std::function<void(const std::string &)> m_questionAnswered = nullptr;
274+
sigslot::signal<const std::string &> m_questionAsked;
275+
sigslot::signal<const std::string &> m_questionAnswered;
279276
};
280277

281278
} // namespace libscratchcpp

test/engine/engine_test.cpp

Lines changed: 0 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -54,14 +54,6 @@ class AddRemoveMonitorMock
5454
MOCK_METHOD(void, monitorRemoved, (Monitor *, IMonitorHandler *));
5555
};
5656

57-
template<typename T, typename... U>
58-
size_t getAddress(std::function<T(U...)> f)
59-
{
60-
typedef T(fnType)(U...);
61-
fnType **fnPointer = f.template target<fnType *>();
62-
return (size_t)*fnPointer;
63-
}
64-
6557
TEST(EngineTest, Clock)
6658
{
6759
Engine engine;
@@ -1715,26 +1707,6 @@ void questionFunction(const std::string &)
17151707
{
17161708
}
17171709

1718-
TEST(EngineTest, QuestionAsked)
1719-
{
1720-
Engine engine;
1721-
ASSERT_EQ(engine.questionAsked(), nullptr);
1722-
1723-
static const std::function<void(const std::string &)> f = &questionFunction;
1724-
engine.setQuestionAsked(&questionFunction);
1725-
ASSERT_EQ(getAddress(engine.questionAsked()), getAddress(f));
1726-
}
1727-
1728-
TEST(EngineTest, QuestionAnswered)
1729-
{
1730-
Engine engine;
1731-
ASSERT_EQ(engine.questionAnswered(), nullptr);
1732-
1733-
static const std::function<void(const std::string &)> f = &questionFunction;
1734-
engine.setQuestionAnswered(f);
1735-
ASSERT_EQ(getAddress(engine.questionAnswered()), getAddress(f));
1736-
}
1737-
17381710
TEST(EngineTest, Clones)
17391711
{
17401712
Project p("clones.sb3");

test/mocks/enginemock.h

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -127,11 +127,8 @@ class EngineMock : public IEngine
127127
MOCK_METHOD(sigslot::signal<Monitor *> &, monitorAdded, (), (override));
128128
MOCK_METHOD((sigslot::signal<Monitor *, IMonitorHandler *> &), monitorRemoved, (), (override));
129129

130-
MOCK_METHOD(const std::function<void(const std::string &)> &, questionAsked, (), (const, override));
131-
MOCK_METHOD(void, setQuestionAsked, (const std::function<void(const std::string &)> &), (override));
132-
133-
MOCK_METHOD(const std::function<void(const std::string &)> &, questionAnswered, (), (const, override));
134-
MOCK_METHOD(void, setQuestionAnswered, (const std::function<void(const std::string &)> &), (override));
130+
MOCK_METHOD(sigslot::signal<const std::string &> &, questionAsked, (), (override));
131+
MOCK_METHOD(sigslot::signal<const std::string &> &, questionAnswered, (), (override));
135132

136133
MOCK_METHOD(std::vector<std::string> &, extensions, (), (const, override));
137134
MOCK_METHOD(void, setExtensions, (const std::vector<std::string> &), (override));

0 commit comments

Comments
 (0)