Skip to content

Commit bc84aad

Browse files
committed
Add onCloned method to sprite interface
1 parent ead9140 commit bc84aad

File tree

4 files changed

+26
-0
lines changed

4 files changed

+26
-0
lines changed

include/scratchcpp/ispritehandler.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ class LIBSCRATCHCPP_EXPORT ISpriteHandler
1616

1717
virtual void onSpriteChanged(Sprite *sprite) = 0;
1818

19+
virtual void onCloned(Sprite *clone) = 0;
20+
1921
virtual void onCostumeChanged(const char *data) = 0;
2022

2123
virtual void onVisibleChanged(bool visible) = 0;

src/scratch/sprite.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,9 @@ std::shared_ptr<Sprite> Sprite::clone()
8585
// Call "when I start as clone" scripts
8686
eng->initClone(clone.get());
8787

88+
if (impl->iface)
89+
impl->iface->onCloned(clone.get());
90+
8891
return clone;
8992
}
9093

test/mocks/spritehandlermock.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ class SpriteHandlerMock : public ISpriteHandler
1010
public:
1111
MOCK_METHOD(void, onSpriteChanged, (Sprite *), (override));
1212

13+
MOCK_METHOD(void, onCloned, (Sprite *), (override));
14+
1315
MOCK_METHOD(void, onCostumeChanged, (const char *), (override));
1416

1517
MOCK_METHOD(void, onVisibleChanged, (bool), (override));

test/target_interfaces/ispritehandler_test.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,41 @@
11
#include <spritehandlermock.h>
2+
#include <enginemock.h>
23

34
#include "../common.h"
45

56
using namespace libscratchcpp;
67

8+
using ::testing::Return;
9+
using ::testing::_;
10+
using ::testing::SaveArg;
11+
712
class ISpriteHandlerTest : public testing::Test
813
{
914
public:
1015
void SetUp() override
1116
{
1217
EXPECT_CALL(m_handler, onSpriteChanged(&m_sprite)).Times(1);
1318
m_sprite.setInterface(&m_handler);
19+
m_sprite.setEngine(&m_engine);
1420
}
1521

1622
Sprite m_sprite;
1723
SpriteHandlerMock m_handler;
24+
EngineMock m_engine;
1825
};
1926

27+
TEST_F(ISpriteHandlerTest, Clone)
28+
{
29+
Sprite *clone;
30+
Sprite *cloneArg;
31+
EXPECT_CALL(m_engine, initClone(_)).WillOnce(SaveArg<0>(&clone));
32+
EXPECT_CALL(m_handler, onCloned(_)).WillOnce(SaveArg<0>(&cloneArg));
33+
34+
m_sprite.clone();
35+
ASSERT_TRUE(clone);
36+
ASSERT_EQ(cloneArg, clone);
37+
}
38+
2039
TEST_F(ISpriteHandlerTest, Visible)
2140
{
2241
EXPECT_CALL(m_handler, onVisibleChanged(false)).Times(1);

0 commit comments

Comments
 (0)