11#include < scratchcpp/project.h>
2+ #include < scratchcpp/sprite.h>
3+ #include < scratchcpp/compiler.h>
4+ #include < scratchcpp/script.h>
5+ #include < scratchcpp/thread.h>
6+ #include < scratchcpp/test/scriptbuilder.h>
27#include < enginemock.h>
8+ #include < penlayermock.h>
39#include < gtest/gtest.h>
410
11+ #include " penlayer.h"
512#include " blocks/penblocks.h"
613
714using namespace scratchcpprender ;
815using namespace libscratchcpp ;
16+ using namespace libscratchcpp ::test;
17+
18+ using ::testing::Return;
19+ using ::testing::ReturnRef;
920
1021class PenBlocksTest : public testing ::Test
1122{
@@ -15,10 +26,47 @@ class PenBlocksTest : public testing::Test
1526 m_extension = std::make_unique<PenBlocks>();
1627 m_engine = m_project.engine ().get ();
1728 m_extension->registerBlocks (m_engine);
29+
30+ PenLayer::addPenLayer (&m_engineMock, &m_penLayer);
31+
32+ EXPECT_CALL (m_engineMock, targets ()).WillRepeatedly (ReturnRef (m_engine->targets ()));
33+ }
34+
35+ void TearDown () override { PenLayer::removePenLayer (&m_engineMock); }
36+
37+ std::shared_ptr<Thread> buildScript (ScriptBuilder &builder, Sprite *sprite)
38+ {
39+ auto block = builder.currentBlock ();
40+
41+ m_compiler = std::make_unique<Compiler>(&m_engineMock, sprite);
42+ auto code = m_compiler->compile (block);
43+ m_script = std::make_unique<Script>(sprite, block, &m_engineMock);
44+ m_script->setCode (code);
45+ return std::make_shared<Thread>(sprite, &m_engineMock, m_script.get ());
1846 }
1947
2048 std::unique_ptr<IExtension> m_extension;
2149 Project m_project;
2250 IEngine *m_engine = nullptr ;
2351 EngineMock m_engineMock;
52+ PenLayerMock m_penLayer;
53+
54+ private:
55+ std::unique_ptr<Compiler> m_compiler;
56+ std::unique_ptr<Script> m_script;
2457};
58+
59+ TEST_F (PenBlocksTest, Clear)
60+ {
61+ auto sprite = std::make_shared<Sprite>();
62+ sprite->setEngine (&m_engineMock);
63+
64+ ScriptBuilder builder (m_extension.get (), m_engine, sprite);
65+ builder.addBlock (" pen_clear" );
66+
67+ auto thread = buildScript (builder, sprite.get ());
68+
69+ EXPECT_CALL (m_penLayer, clear ());
70+ EXPECT_CALL (m_engineMock, requestRedraw ());
71+ thread->run ();
72+ }
0 commit comments