Skip to content

Commit a8156fa

Browse files
committed
Force current costume to be in range
1 parent cd78df4 commit a8156fa

File tree

4 files changed

+29
-4
lines changed

4 files changed

+29
-4
lines changed

src/scratch/target.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,8 @@ int Target::currentCostume() const
203203
/*! Sets the ID of the current costume. */
204204
void Target::setCurrentCostume(int newCostume)
205205
{
206-
impl->currentCostume = newCostume;
206+
if (newCostume > 0 && newCostume <= costumes().size())
207+
impl->currentCostume = newCostume;
207208
}
208209

209210
/*! Returns the list of costumes. */

src/scratch/target_p.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ struct TargetPrivate
2626
std::vector<std::shared_ptr<Variable>> variables;
2727
std::vector<std::shared_ptr<List>> lists;
2828
std::vector<std::shared_ptr<Block>> blocks;
29-
int currentCostume = 1;
29+
int currentCostume = 0;
3030
std::vector<std::shared_ptr<Costume>> costumes;
3131
std::vector<std::shared_ptr<Sound>> sounds;
3232
int layerOrder = 0;

test/scratch_classes/sprite_test.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ TEST(SpriteTest, Clone)
4444
sprite.addList(list1);
4545
sprite.addList(list2);
4646

47+
sprite.addCostume(std::make_shared<Costume>("", "", ""));
48+
sprite.addCostume(std::make_shared<Costume>("", "", ""));
4749
sprite.setCurrentCostume(2);
4850
sprite.setLayerOrder(5);
4951
sprite.setVolume(50);

test/scratch_classes/target_test.cpp

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -178,9 +178,31 @@ TEST(TargetTest, Blocks)
178178
TEST(TargetTest, CurrentCostume)
179179
{
180180
Target target;
181+
ASSERT_EQ(target.currentCostume(), 0);
182+
183+
target.setCurrentCostume(1);
184+
ASSERT_EQ(target.currentCostume(), 0);
185+
186+
target.setCurrentCostume(2);
187+
ASSERT_EQ(target.currentCostume(), 0);
188+
189+
target.addCostume(std::make_shared<Costume>("", "", ""));
190+
ASSERT_EQ(target.currentCostume(), 0);
191+
192+
target.setCurrentCostume(1);
193+
ASSERT_EQ(target.currentCostume(), 1);
194+
195+
target.setCurrentCostume(2);
196+
ASSERT_EQ(target.currentCostume(), 1);
197+
198+
target.addCostume(std::make_shared<Costume>("", "", ""));
181199
ASSERT_EQ(target.currentCostume(), 1);
182-
target.setCurrentCostume(5);
183-
ASSERT_EQ(target.currentCostume(), 5);
200+
201+
target.setCurrentCostume(2);
202+
ASSERT_EQ(target.currentCostume(), 2);
203+
204+
target.setCurrentCostume(3);
205+
ASSERT_EQ(target.currentCostume(), 2);
184206
}
185207

186208
TEST(TargetTest, Costumes)

0 commit comments

Comments
 (0)