Skip to content

Commit 84fca60

Browse files
committed
Add StageModel test
1 parent 5db2145 commit 84fca60

File tree

9 files changed

+106
-17
lines changed

9 files changed

+106
-17
lines changed

ScratchCPPGui/irenderedtarget.h

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,9 @@
22

33
#pragma once
44

5-
#include <QtMath>
5+
#include <qnanoquickitem.h>
66

77
class QBuffer;
8-
class QString;
98

109
namespace libscratchcpp
1110
{
@@ -22,9 +21,14 @@ namespace scratchcppgui
2221
class StageModel;
2322
class SpriteModel;
2423

25-
class IRenderedTarget
24+
class IRenderedTarget : public QNanoQuickItem
2625
{
2726
public:
27+
IRenderedTarget(QNanoQuickItem *parent = nullptr) :
28+
QNanoQuickItem(parent)
29+
{
30+
}
31+
2832
virtual ~IRenderedTarget() { }
2933

3034
virtual void loadProperties() = 0;

ScratchCPPGui/renderedtarget.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ using namespace scratchcppgui;
1212
using namespace libscratchcpp;
1313

1414
RenderedTarget::RenderedTarget(QNanoQuickItem *parent) :
15-
QNanoQuickItem(parent)
15+
IRenderedTarget(parent)
1616
{
1717
}
1818

ScratchCPPGui/renderedtarget.h

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,7 @@ Q_MOC_INCLUDE("spritemodel.h");
1414
namespace scratchcppgui
1515
{
1616

17-
class RenderedTarget
18-
: public QNanoQuickItem
19-
, public IRenderedTarget
17+
class RenderedTarget : public IRenderedTarget
2018
{
2119
Q_OBJECT
2220
QML_ELEMENT

ScratchCPPGui/stagemodel.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,12 +43,12 @@ libscratchcpp::Stage *StageModel::stage() const
4343
return m_stage;
4444
}
4545

46-
RenderedTarget *StageModel::renderedTarget() const
46+
IRenderedTarget *StageModel::renderedTarget() const
4747
{
4848
return m_renderedTarget;
4949
}
5050

51-
void StageModel::setRenderedTarget(RenderedTarget *newRenderedTarget)
51+
void StageModel::setRenderedTarget(IRenderedTarget *newRenderedTarget)
5252
{
5353
if (m_renderedTarget == newRenderedTarget)
5454
return;

ScratchCPPGui/stagemodel.h

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

13-
class RenderedTarget;
13+
class IRenderedTarget;
1414

1515
class StageModel
1616
: public QObject
1717
, public libscratchcpp::IStageHandler
1818
{
1919
Q_OBJECT
20-
Q_PROPERTY(RenderedTarget *renderedTarget READ renderedTarget WRITE setRenderedTarget NOTIFY renderedTargetChanged)
20+
Q_PROPERTY(IRenderedTarget *renderedTarget READ renderedTarget WRITE setRenderedTarget NOTIFY renderedTargetChanged)
2121

2222
public:
2323
explicit StageModel(QObject *parent = nullptr);
@@ -32,15 +32,15 @@ class StageModel
3232

3333
libscratchcpp::Stage *stage() const;
3434

35-
RenderedTarget *renderedTarget() const;
36-
void setRenderedTarget(RenderedTarget *newRenderedTarget);
35+
IRenderedTarget *renderedTarget() const;
36+
void setRenderedTarget(IRenderedTarget *newRenderedTarget);
3737

3838
signals:
3939
void renderedTargetChanged();
4040

4141
private:
4242
libscratchcpp::Stage *m_stage = nullptr;
43-
RenderedTarget *m_renderedTarget = nullptr;
43+
IRenderedTarget *m_renderedTarget = nullptr;
4444
};
4545

4646
} // namespace scratchcppgui

test/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,3 +23,4 @@ add_subdirectory(mocks)
2323
add_subdirectory(projectloader)
2424
add_subdirectory(renderedtarget)
2525
add_subdirectory(targetpainter)
26+
add_subdirectory(target_models)

test/mocks/renderedtargetmock.h

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,7 @@ using namespace scratchcppgui;
99
namespace scratchcppgui
1010
{
1111

12-
class RenderedTargetMock
13-
: public QNanoQuickItem
14-
, public IRenderedTarget
12+
class RenderedTargetMock : public IRenderedTarget
1513
{
1614
public:
1715
MOCK_METHOD(void, loadProperties, (), (override));

test/target_models/CMakeLists.txt

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# stagemodel_test
2+
add_executable(
3+
stagemodel_test
4+
stagemodel_test.cpp
5+
)
6+
7+
target_link_libraries(
8+
stagemodel_test
9+
GTest::gtest_main
10+
GTest::gmock_main
11+
libscratchcpp-gui
12+
scratchcppgui_mocks
13+
qnanopainter
14+
${QT_LIBS}
15+
Qt6::Test
16+
)
17+
18+
add_test(stagemodel_test)
19+
gtest_discover_tests(stagemodel_test)
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
#include <QtTest/QSignalSpy>
2+
#include <scratchcpp/costume.h>
3+
#include <stagemodel.h>
4+
#include <renderedtargetmock.h>
5+
6+
#include "../common.h"
7+
8+
using namespace scratchcppgui;
9+
using namespace libscratchcpp;
10+
11+
TEST(StageModelTest, Constructors)
12+
{
13+
StageModel model1;
14+
StageModel model2(&model1);
15+
ASSERT_EQ(model2.parent(), &model1);
16+
}
17+
18+
TEST(StageModelTest, Init)
19+
{
20+
StageModel model;
21+
ASSERT_EQ(model.stage(), nullptr);
22+
23+
Stage stage;
24+
model.init(&stage);
25+
ASSERT_EQ(model.stage(), &stage);
26+
27+
auto c1 = std::make_shared<Costume>("", "", "");
28+
auto c2 = std::make_shared<Costume>("", "", "");
29+
auto c3 = std::make_shared<Costume>("", "", "");
30+
stage.addCostume(c1);
31+
stage.addCostume(c2);
32+
stage.addCostume(c3);
33+
stage.setCostumeIndex(1);
34+
35+
RenderedTargetMock renderedTarget;
36+
QSignalSpy spy(&model, &StageModel::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(&stage);
44+
}
45+
46+
TEST(StageModelTest, OnCostumeChanged)
47+
{
48+
StageModel 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(StageModelTest, RenderedTarget)
60+
{
61+
StageModel model;
62+
ASSERT_EQ(model.renderedTarget(), nullptr);
63+
64+
RenderedTargetMock renderedTarget;
65+
QSignalSpy spy(&model, &StageModel::renderedTargetChanged);
66+
model.setRenderedTarget(&renderedTarget);
67+
ASSERT_EQ(spy.count(), 1);
68+
ASSERT_EQ(model.renderedTarget(), &renderedTarget);
69+
}

0 commit comments

Comments
 (0)