Skip to content

Commit 98865bf

Browse files
committed
ScriptBuilder: Set entity name for field value
1 parent 86cbf47 commit 98865bf

File tree

2 files changed

+53
-3
lines changed

2 files changed

+53
-3
lines changed

src/test/scriptbuilder.cpp

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@
99
#include <scratchcpp/executablecode.h>
1010
#include <scratchcpp/sprite.h>
1111
#include <scratchcpp/iengine.h>
12+
#include <scratchcpp/variable.h>
1213
#include <scratchcpp/list.h>
14+
#include <scratchcpp/broadcast.h>
1315

1416
#include "scriptbuilder_p.h"
1517

@@ -198,7 +200,19 @@ void ScriptBuilder::addEntityField(const std::string &name, std::shared_ptr<Enti
198200
impl->entities.push_back(entity);
199201
}
200202

201-
auto field = std::make_shared<Field>(name, Value(), entity);
203+
Value entityName = "";
204+
auto var = std::dynamic_pointer_cast<Variable>(entity);
205+
auto list = std::dynamic_pointer_cast<List>(entity);
206+
auto broadcast = std::dynamic_pointer_cast<Broadcast>(entity);
207+
208+
if (var)
209+
entityName = var->name();
210+
else if (list)
211+
entityName = list->name();
212+
else if (broadcast)
213+
entityName = broadcast->name();
214+
215+
auto field = std::make_shared<Field>(name, entityName, entity);
202216
impl->lastBlock->addField(field);
203217
}
204218

test/test_api/scriptbuilder_test.cpp

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#include <scratchcpp/field.h>
1010
#include <scratchcpp/list.h>
1111
#include <scratchcpp/variable.h>
12+
#include <scratchcpp/broadcast.h>
1213

1314
#include "../common.h"
1415
#include "testextension.h"
@@ -231,9 +232,9 @@ TEST_F(ScriptBuilderTest, AddEntityInput)
231232
m_builder->build();
232233
}
233234

234-
TEST_F(ScriptBuilderTest, AddEntityField)
235+
TEST_F(ScriptBuilderTest, AddVariableEntityField)
235236
{
236-
auto var = std::make_shared<Variable>("", "");
237+
auto var = std::make_shared<Variable>("", "test var");
237238
m_target->addVariable(var);
238239

239240
m_builder->addBlock("test_simple");
@@ -244,13 +245,48 @@ TEST_F(ScriptBuilderTest, AddEntityField)
244245
ASSERT_TRUE(block->inputs().empty());
245246
ASSERT_EQ(block->fields().size(), 1);
246247
ASSERT_EQ(block->fieldAt(0)->name(), "VARIABLE");
248+
ASSERT_EQ(block->fieldAt(0)->value().toString(), "test var");
247249
ASSERT_EQ(block->fieldAt(0)->valuePtr(), var);
248250

249251
m_builder->addBlock("test_simple");
250252
m_builder->addEntityField("VARIABLE", var);
251253
m_builder->build();
252254
}
253255

256+
TEST_F(ScriptBuilderTest, AddListEntityField)
257+
{
258+
auto list = std::make_shared<List>("", "hello world");
259+
m_target->addList(list);
260+
261+
m_builder->addBlock("test_simple");
262+
m_builder->addEntityField("LIST", list);
263+
auto block = m_builder->currentBlock();
264+
ASSERT_TRUE(block);
265+
ASSERT_EQ(block->opcode(), "test_simple");
266+
ASSERT_TRUE(block->inputs().empty());
267+
ASSERT_EQ(block->fields().size(), 1);
268+
ASSERT_EQ(block->fieldAt(0)->name(), "LIST");
269+
ASSERT_EQ(block->fieldAt(0)->value().toString(), "hello world");
270+
ASSERT_EQ(block->fieldAt(0)->valuePtr(), list);
271+
}
272+
273+
TEST_F(ScriptBuilderTest, AddBroadcastEntityField)
274+
{
275+
auto broadcast = std::make_shared<Broadcast>("", "test");
276+
m_engine->setBroadcasts({ broadcast });
277+
278+
m_builder->addBlock("test_simple");
279+
m_builder->addEntityField("MESSAGE", broadcast);
280+
auto block = m_builder->currentBlock();
281+
ASSERT_TRUE(block);
282+
ASSERT_EQ(block->opcode(), "test_simple");
283+
ASSERT_TRUE(block->inputs().empty());
284+
ASSERT_EQ(block->fields().size(), 1);
285+
ASSERT_EQ(block->fieldAt(0)->name(), "MESSAGE");
286+
ASSERT_EQ(block->fieldAt(0)->value().toString(), "test");
287+
ASSERT_EQ(block->fieldAt(0)->valuePtr(), broadcast);
288+
}
289+
254290
TEST_F(ScriptBuilderTest, CaptureBlockReturnValue)
255291
{
256292
m_builder->addBlock("test_teststr");

0 commit comments

Comments
 (0)