Skip to content

Commit 1dd28b5

Browse files
committed
Add SpriteModel test
1 parent 84fca60 commit 1dd28b5

File tree

4 files changed

+122
-7
lines changed

4 files changed

+122
-7
lines changed

ScratchCPPGui/spritemodel.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,12 +62,12 @@ libscratchcpp::Sprite *SpriteModel::sprite() const
6262
return m_sprite;
6363
}
6464

65-
RenderedTarget *SpriteModel::renderedTarget() const
65+
IRenderedTarget *SpriteModel::renderedTarget() const
6666
{
6767
return m_renderedTarget;
6868
}
6969

70-
void SpriteModel::setRenderedTarget(RenderedTarget *newRenderedTarget)
70+
void SpriteModel::setRenderedTarget(IRenderedTarget *newRenderedTarget)
7171
{
7272
if (m_renderedTarget == newRenderedTarget)
7373
return;

ScratchCPPGui/spritemodel.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,15 @@ Q_MOC_INCLUDE("renderedtarget.h");
1111
namespace scratchcppgui
1212
{
1313

14-
class RenderedTarget;
14+
class IRenderedTarget;
1515

1616
class SpriteModel
1717
: public QObject
1818
, public libscratchcpp::ISpriteHandler
1919
{
2020
Q_OBJECT
2121
QML_ELEMENT
22-
Q_PROPERTY(RenderedTarget *renderedTarget READ renderedTarget WRITE setRenderedTarget NOTIFY renderedTargetChanged)
22+
Q_PROPERTY(IRenderedTarget *renderedTarget READ renderedTarget WRITE setRenderedTarget NOTIFY renderedTargetChanged)
2323

2424
public:
2525
SpriteModel(QObject *parent = nullptr);
@@ -39,15 +39,15 @@ class SpriteModel
3939

4040
libscratchcpp::Sprite *sprite() const;
4141

42-
RenderedTarget *renderedTarget() const;
43-
void setRenderedTarget(RenderedTarget *newRenderedTarget);
42+
IRenderedTarget *renderedTarget() const;
43+
void setRenderedTarget(IRenderedTarget *newRenderedTarget);
4444

4545
signals:
4646
void renderedTargetChanged();
4747

4848
private:
4949
libscratchcpp::Sprite *m_sprite = nullptr;
50-
RenderedTarget *m_renderedTarget = nullptr;
50+
IRenderedTarget *m_renderedTarget = nullptr;
5151
};
5252

5353
} // namespace scratchcppgui

test/target_models/CMakeLists.txt

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,23 @@ target_link_libraries(
1717

1818
add_test(stagemodel_test)
1919
gtest_discover_tests(stagemodel_test)
20+
21+
# spritemodel_test
22+
add_executable(
23+
spritemodel_test
24+
spritemodel_test.cpp
25+
)
26+
27+
target_link_libraries(
28+
spritemodel_test
29+
GTest::gtest_main
30+
GTest::gmock_main
31+
libscratchcpp-gui
32+
scratchcppgui_mocks
33+
qnanopainter
34+
${QT_LIBS}
35+
Qt6::Test
36+
)
37+
38+
add_test(spritemodel_test)
39+
gtest_discover_tests(spritemodel_test)
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
#include <QtTest/QSignalSpy>
2+
#include <scratchcpp/costume.h>
3+
#include <spritemodel.h>
4+
#include <renderedtargetmock.h>
5+
6+
#include "../common.h"
7+
8+
using namespace scratchcppgui;
9+
using namespace libscratchcpp;
10+
11+
TEST(SpriteModelTest, Constructors)
12+
{
13+
SpriteModel model1;
14+
SpriteModel model2(&model1);
15+
ASSERT_EQ(model2.parent(), &model1);
16+
}
17+
18+
TEST(SpriteModelTest, Init)
19+
{
20+
SpriteModel model;
21+
ASSERT_EQ(model.sprite(), nullptr);
22+
23+
Sprite sprite;
24+
model.init(&sprite);
25+
ASSERT_EQ(model.sprite(), &sprite);
26+
27+
auto c1 = std::make_shared<Costume>("", "", "");
28+
auto c2 = std::make_shared<Costume>("", "", "");
29+
auto c3 = std::make_shared<Costume>("", "", "");
30+
sprite.addCostume(c1);
31+
sprite.addCostume(c2);
32+
sprite.addCostume(c3);
33+
sprite.setCostumeIndex(1);
34+
35+
RenderedTargetMock renderedTarget;
36+
QSignalSpy spy(&model, &SpriteModel::renderedTargetChanged);
37+
EXPECT_CALL(renderedTarget, loadCostume(c2.get()));
38+
model.setRenderedTarget(&renderedTarget);
39+
ASSERT_EQ(spy.count(), 1);
40+
ASSERT_EQ(model.renderedTarget(), &renderedTarget);
41+
42+
EXPECT_CALL(renderedTarget, loadCostume(c2.get()));
43+
model.init(&sprite);
44+
}
45+
46+
TEST(SpriteModelTest, OnCostumeChanged)
47+
{
48+
SpriteModel model;
49+
50+
Costume costume("", "", "");
51+
52+
RenderedTargetMock renderedTarget;
53+
model.setRenderedTarget(&renderedTarget);
54+
55+
EXPECT_CALL(renderedTarget, loadCostume(&costume));
56+
model.onCostumeChanged(&costume);
57+
}
58+
59+
TEST(SpriteModelTest, OnSizeChanged)
60+
{
61+
SpriteModel model;
62+
63+
Costume costume("", "", "");
64+
65+
Sprite sprite;
66+
model.init(&sprite);
67+
ASSERT_EQ(model.sprite(), &sprite);
68+
69+
auto c1 = std::make_shared<Costume>("", "", "");
70+
auto c2 = std::make_shared<Costume>("", "", "");
71+
auto c3 = std::make_shared<Costume>("", "", "");
72+
sprite.addCostume(c1);
73+
sprite.addCostume(c2);
74+
sprite.addCostume(c3);
75+
sprite.setCostumeIndex(1);
76+
77+
RenderedTargetMock renderedTarget;
78+
EXPECT_CALL(renderedTarget, loadCostume(c2.get()));
79+
model.setRenderedTarget(&renderedTarget);
80+
81+
EXPECT_CALL(renderedTarget, loadCostume(c2.get()));
82+
model.onSizeChanged(150);
83+
}
84+
85+
TEST(SpriteModelTest, RenderedTarget)
86+
{
87+
SpriteModel model;
88+
ASSERT_EQ(model.renderedTarget(), nullptr);
89+
90+
RenderedTargetMock renderedTarget;
91+
QSignalSpy spy(&model, &SpriteModel::renderedTargetChanged);
92+
model.setRenderedTarget(&renderedTarget);
93+
ASSERT_EQ(spy.count(), 1);
94+
ASSERT_EQ(model.renderedTarget(), &renderedTarget);
95+
}

0 commit comments

Comments
 (0)