Skip to content

Commit fe37a9b

Browse files
committed
Implement touching clones methods
1 parent 195c531 commit fe37a9b

File tree

4 files changed

+57
-2
lines changed

4 files changed

+57
-2
lines changed

src/spritemodel.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ libscratchcpp::Rect SpriteModel::fastBoundingRect() const
152152

153153
bool SpriteModel::touchingClones(const std::vector<libscratchcpp::Sprite *> &clones) const
154154
{
155-
return false;
155+
return m_renderedTarget->touchingClones(clones);
156156
}
157157

158158
bool SpriteModel::touchingPoint(double x, double y) const

src/stagemodel.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ libscratchcpp::Rect StageModel::fastBoundingRect() const
8989

9090
bool StageModel::touchingClones(const std::vector<libscratchcpp::Sprite *> &clones) const
9191
{
92-
return false;
92+
return m_renderedTarget->touchingClones(clones);
9393
}
9494

9595
bool StageModel::touchingPoint(double x, double y) const

test/target_models/spritemodel_test.cpp

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,32 @@ TEST(SpriteModelTest, FastBoundingRect)
318318
ASSERT_EQ(bounds.bottom(), rect.bottom());
319319
}
320320

321+
TEST(SpriteModelTest, TouchingClones)
322+
{
323+
SpriteModel model;
324+
325+
RenderedTargetMock renderedTarget;
326+
model.setRenderedTarget(&renderedTarget);
327+
328+
Sprite clone1, clone2;
329+
std::vector<Sprite *> clones = { &clone1, &clone2 };
330+
std::vector<Sprite *> actualClones;
331+
332+
EXPECT_CALL(renderedTarget, touchingClones(_)).WillOnce(WithArgs<0>(Invoke([&actualClones](const std::vector<Sprite *> &candidates) {
333+
actualClones = candidates;
334+
return false;
335+
})));
336+
ASSERT_FALSE(model.touchingClones(clones));
337+
ASSERT_EQ(actualClones, clones);
338+
339+
EXPECT_CALL(renderedTarget, touchingClones(_)).WillOnce(WithArgs<0>(Invoke([&actualClones](const std::vector<Sprite *> &candidates) {
340+
actualClones = candidates;
341+
return true;
342+
})));
343+
ASSERT_TRUE(model.touchingClones(clones));
344+
ASSERT_EQ(actualClones, clones);
345+
}
346+
321347
TEST(SpriteModelTest, TouchingPoint)
322348
{
323349
SpriteModel model;

test/target_models/stagemodel_test.cpp

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@ using namespace scratchcpprender;
1010
using namespace libscratchcpp;
1111

1212
using ::testing::Return;
13+
using ::testing::WithArgs;
14+
using ::testing::Invoke;
15+
using ::testing::_;
1316

1417
TEST(StageModelTest, Constructors)
1518
{
@@ -108,6 +111,32 @@ TEST(StageModelTest, OnBubbleTextChanged)
108111
ASSERT_EQ(spy.count(), 2);
109112
}
110113

114+
TEST(SpriteModelTest, TouchingClones)
115+
{
116+
StageModel model;
117+
118+
RenderedTargetMock renderedTarget;
119+
model.setRenderedTarget(&renderedTarget);
120+
121+
Sprite clone1, clone2;
122+
std::vector<Sprite *> clones = { &clone1, &clone2 };
123+
std::vector<Sprite *> actualClones;
124+
125+
EXPECT_CALL(renderedTarget, touchingClones(_)).WillOnce(WithArgs<0>(Invoke([&actualClones](const std::vector<Sprite *> &candidates) {
126+
actualClones = candidates;
127+
return false;
128+
})));
129+
ASSERT_FALSE(model.touchingClones(clones));
130+
ASSERT_EQ(actualClones, clones);
131+
132+
EXPECT_CALL(renderedTarget, touchingClones(_)).WillOnce(WithArgs<0>(Invoke([&actualClones](const std::vector<Sprite *> &candidates) {
133+
actualClones = candidates;
134+
return true;
135+
})));
136+
ASSERT_TRUE(model.touchingClones(clones));
137+
ASSERT_EQ(actualClones, clones);
138+
}
139+
111140
TEST(StageModelTest, TouchingPoint)
112141
{
113142
StageModel model;

0 commit comments

Comments
 (0)