|
4 | 4 | #include <scratchcpp/inputvalue.h> |
5 | 5 | #include <scratchcpp/field.h> |
6 | 6 | #include <scratchcpp/broadcast.h> |
| 7 | +#include <scratchcpp/stage.h> |
| 8 | +#include <scratchcpp/costume.h> |
7 | 9 | #include <enginemock.h> |
8 | 10 |
|
9 | 11 | #include "../common.h" |
@@ -50,6 +52,14 @@ class EventBlocksTest : public testing::Test |
50 | 52 | block->updateInputMap(); |
51 | 53 | } |
52 | 54 |
|
| 55 | + void addValueField(std::shared_ptr<Block> block, const std::string &name, EventBlocks::Fields id, const std::string &value) const |
| 56 | + { |
| 57 | + auto field = std::make_shared<Field>(name, value); |
| 58 | + field->setFieldId(id); |
| 59 | + block->addField(field); |
| 60 | + block->updateFieldMap(); |
| 61 | + } |
| 62 | + |
53 | 63 | void addBroadcastField(std::shared_ptr<Block> block, const std::string &name, EventBlocks::Fields id, std::shared_ptr<Broadcast> broadcast) const |
54 | 64 | { |
55 | 65 | auto field = std::make_shared<Field>(name, Value(), broadcast); |
@@ -77,16 +87,18 @@ TEST_F(EventBlocksTest, CategoryVisible) |
77 | 87 | TEST_F(EventBlocksTest, RegisterBlocks) |
78 | 88 | { |
79 | 89 | // Blocks |
80 | | - EXPECT_CALL(m_engineMock, addHatBlock(m_section.get(), "event_whenflagclicked")).Times(1); |
81 | | - EXPECT_CALL(m_engineMock, addCompileFunction(m_section.get(), "event_broadcast", &EventBlocks::compileBroadcast)).Times(1); |
82 | | - EXPECT_CALL(m_engineMock, addCompileFunction(m_section.get(), "event_broadcastandwait", &EventBlocks::compileBroadcastAndWait)).Times(1); |
83 | | - EXPECT_CALL(m_engineMock, addCompileFunction(m_section.get(), "event_whenbroadcastreceived", &EventBlocks::compileWhenBroadcastReceived)).Times(1); |
| 90 | + EXPECT_CALL(m_engineMock, addHatBlock(m_section.get(), "event_whenflagclicked")); |
| 91 | + EXPECT_CALL(m_engineMock, addCompileFunction(m_section.get(), "event_broadcast", &EventBlocks::compileBroadcast)); |
| 92 | + EXPECT_CALL(m_engineMock, addCompileFunction(m_section.get(), "event_broadcastandwait", &EventBlocks::compileBroadcastAndWait)); |
| 93 | + EXPECT_CALL(m_engineMock, addCompileFunction(m_section.get(), "event_whenbroadcastreceived", &EventBlocks::compileWhenBroadcastReceived)); |
| 94 | + EXPECT_CALL(m_engineMock, addCompileFunction(m_section.get(), "event_whenbackdropswitchesto", &EventBlocks::compileWhenBackdropSwitchesTo)); |
84 | 95 |
|
85 | 96 | // Inputs |
86 | 97 | EXPECT_CALL(m_engineMock, addInput(m_section.get(), "BROADCAST_INPUT", EventBlocks::BROADCAST_INPUT)).Times(1); |
87 | 98 |
|
88 | 99 | // Fields |
89 | 100 | EXPECT_CALL(m_engineMock, addField(m_section.get(), "BROADCAST_OPTION", EventBlocks::BROADCAST_OPTION)); |
| 101 | + EXPECT_CALL(m_engineMock, addField(m_section.get(), "BACKDROP", EventBlocks::BACKDROP)); |
90 | 102 |
|
91 | 103 | m_section->registerBlocks(&m_engineMock); |
92 | 104 | } |
@@ -233,3 +245,29 @@ TEST_F(EventBlocksTest, WhenBroadcastReceived) |
233 | 245 | ASSERT_TRUE(compiler.variables().empty()); |
234 | 246 | ASSERT_TRUE(compiler.lists().empty()); |
235 | 247 | } |
| 248 | + |
| 249 | +TEST_F(EventBlocksTest, WhenBackdropSwitchesTo) |
| 250 | +{ |
| 251 | + Compiler compiler(&m_engineMock); |
| 252 | + Stage stage; |
| 253 | + |
| 254 | + // when backdrop switches to "backdrop2" |
| 255 | + auto block1 = createEventBlock("a", "event_whenbackdropswitchesto"); |
| 256 | + addValueField(block1, "BACKDROP", EventBlocks::BACKDROP, "backdrop2"); |
| 257 | + |
| 258 | + auto backdrop = std::make_shared<Costume>("backdrop2", "a", "svg"); |
| 259 | + stage.addCostume(backdrop); |
| 260 | + |
| 261 | + EXPECT_CALL(m_engineMock, stage()).WillOnce(Return(&stage)); |
| 262 | + EXPECT_CALL(m_engineMock, addBroadcastScript(block1, backdrop->broadcast())); |
| 263 | + |
| 264 | + compiler.init(); |
| 265 | + compiler.setBlock(block1); |
| 266 | + EventBlocks::compileWhenBackdropSwitchesTo(&compiler); |
| 267 | + compiler.end(); |
| 268 | + |
| 269 | + ASSERT_EQ(compiler.bytecode(), std::vector<unsigned int>({ vm::OP_START, vm::OP_HALT })); |
| 270 | + ASSERT_TRUE(compiler.constValues().empty()); |
| 271 | + ASSERT_TRUE(compiler.variables().empty()); |
| 272 | + ASSERT_TRUE(compiler.lists().empty()); |
| 273 | +} |
0 commit comments