Skip to content

Commit c9e4f1e

Browse files
committed
ScriptBuilder: Add currentBlock() method
1 parent 761cbe8 commit c9e4f1e

File tree

3 files changed

+69
-2
lines changed

3 files changed

+69
-2
lines changed

include/scratchcpp/dev/test/scriptbuilder.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ class LIBSCRATCHCPP_EXPORT ScriptBuilder
4444
void addDropdownInput(const std::string &name, const std::string &selectedValue);
4545
void addDropdownField(const std::string &name, const std::string &selectedValue);
4646

47+
std::shared_ptr<Block> currentBlock() const;
48+
4749
void build();
4850
void run();
4951

src/dev/test/scriptbuilder.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,12 @@ void ScriptBuilder::addDropdownField(const std::string &name, const std::string
153153
impl->blocks.back()->addField(field);
154154
}
155155

156+
/*! Returns the current block (can be used e. g. with a custom Compiler instance). */
157+
std::shared_ptr<Block> ScriptBuilder::currentBlock() const
158+
{
159+
return impl->lastBlock;
160+
}
161+
156162
/*! Builds and compiles the script. */
157163
void ScriptBuilder::build()
158164
{

test/dev/test_api/scriptbuilder_test.cpp

Lines changed: 61 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
#include <scratchcpp/iengine.h>
55
#include <scratchcpp/value.h>
66
#include <scratchcpp/block.h>
7+
#include <scratchcpp/input.h>
8+
#include <scratchcpp/field.h>
79
#include <scratchcpp/list.h>
810

911
#include "../../common.h"
@@ -32,7 +34,13 @@ class ScriptBuilderTest : public testing::Test
3234

3335
TEST_F(ScriptBuilderTest, AddBlock)
3436
{
37+
ASSERT_EQ(m_builder->currentBlock(), nullptr);
38+
3539
m_builder->addBlock("test_simple");
40+
auto block = m_builder->currentBlock();
41+
ASSERT_TRUE(block);
42+
ASSERT_EQ(block->opcode(), "test_simple");
43+
3644
m_builder->build();
3745

3846
testing::internal::CaptureStdout();
@@ -44,8 +52,20 @@ TEST_F(ScriptBuilderTest, AddValueInput)
4452
{
4553
m_builder->addBlock("test_print");
4654
m_builder->addValueInput("STRING", 10);
55+
auto block = m_builder->currentBlock();
56+
ASSERT_TRUE(block);
57+
ASSERT_EQ(block->opcode(), "test_print");
58+
ASSERT_EQ(block->inputs().size(), 1);
59+
ASSERT_EQ(block->inputAt(0)->name(), "STRING");
60+
4761
m_builder->addBlock("test_print");
4862
m_builder->addValueInput("STRING", "Hello world");
63+
block = m_builder->currentBlock();
64+
ASSERT_TRUE(block);
65+
ASSERT_EQ(block->opcode(), "test_print");
66+
ASSERT_EQ(block->inputs().size(), 1);
67+
ASSERT_EQ(block->inputAt(0)->name(), "STRING");
68+
4969
m_builder->build();
5070

5171
testing::internal::CaptureStdout();
@@ -57,6 +77,12 @@ TEST_F(ScriptBuilderTest, AddNullInput)
5777
{
5878
m_builder->addBlock("test_print");
5979
m_builder->addNullInput("STRING");
80+
auto block = m_builder->currentBlock();
81+
ASSERT_TRUE(block);
82+
ASSERT_EQ(block->opcode(), "test_print");
83+
ASSERT_EQ(block->inputs().size(), 1);
84+
ASSERT_EQ(block->inputAt(0)->name(), "STRING");
85+
6086
m_builder->build();
6187

6288
testing::internal::CaptureStdout();
@@ -67,8 +93,14 @@ TEST_F(ScriptBuilderTest, AddNullInput)
6793
TEST_F(ScriptBuilderTest, AddObscuredInput)
6894
{
6995
m_builder->addBlock("test_print");
70-
auto block = std::make_shared<Block>("", "test_teststr");
71-
m_builder->addObscuredInput("STRING", block);
96+
auto valueBlock = std::make_shared<Block>("", "test_teststr");
97+
m_builder->addObscuredInput("STRING", valueBlock);
98+
auto block = m_builder->currentBlock();
99+
ASSERT_TRUE(block);
100+
ASSERT_EQ(block->opcode(), "test_print");
101+
ASSERT_EQ(block->inputs().size(), 1);
102+
ASSERT_EQ(block->inputAt(0)->name(), "STRING");
103+
72104
m_builder->build();
73105

74106
testing::internal::CaptureStdout();
@@ -80,6 +112,12 @@ TEST_F(ScriptBuilderTest, AddNullObscuredInput)
80112
{
81113
m_builder->addBlock("test_print");
82114
m_builder->addNullObscuredInput("STRING");
115+
auto block = m_builder->currentBlock();
116+
ASSERT_TRUE(block);
117+
ASSERT_EQ(block->opcode(), "test_print");
118+
ASSERT_EQ(block->inputs().size(), 1);
119+
ASSERT_EQ(block->inputAt(0)->name(), "STRING");
120+
83121
m_builder->build();
84122

85123
testing::internal::CaptureStdout();
@@ -91,6 +129,12 @@ TEST_F(ScriptBuilderTest, AddDropdownInput)
91129
{
92130
m_builder->addBlock("test_print_dropdown");
93131
m_builder->addDropdownInput("STRING", "hello");
132+
auto block = m_builder->currentBlock();
133+
ASSERT_TRUE(block);
134+
ASSERT_EQ(block->opcode(), "test_print_dropdown");
135+
ASSERT_EQ(block->inputs().size(), 1);
136+
ASSERT_EQ(block->inputAt(0)->name(), "STRING");
137+
94138
m_builder->build();
95139

96140
testing::internal::CaptureStdout();
@@ -102,6 +146,13 @@ TEST_F(ScriptBuilderTest, AddDropdownField)
102146
{
103147
m_builder->addBlock("test_print_field");
104148
m_builder->addDropdownField("STRING", "hello");
149+
auto block = m_builder->currentBlock();
150+
ASSERT_TRUE(block);
151+
ASSERT_EQ(block->opcode(), "test_print_field");
152+
ASSERT_TRUE(block->inputs().empty());
153+
ASSERT_EQ(block->fields().size(), 1);
154+
ASSERT_EQ(block->fieldAt(0)->name(), "STRING");
155+
105156
m_builder->build();
106157

107158
testing::internal::CaptureStdout();
@@ -112,10 +163,18 @@ TEST_F(ScriptBuilderTest, AddDropdownField)
112163
TEST_F(ScriptBuilderTest, ReporterBlocks)
113164
{
114165
m_builder->addReporterBlock("test_teststr");
166+
auto block = m_builder->currentBlock();
167+
ASSERT_TRUE(block);
168+
ASSERT_EQ(block->opcode(), "test_teststr");
115169
m_builder->captureBlockReturnValue();
116170

117171
m_builder->addReporterBlock("test_input");
118172
m_builder->addValueInput("INPUT", -93.4);
173+
block = m_builder->currentBlock();
174+
ASSERT_TRUE(block);
175+
ASSERT_EQ(block->opcode(), "test_input");
176+
ASSERT_EQ(block->inputs().size(), 1);
177+
ASSERT_EQ(block->inputAt(0)->name(), "INPUT");
119178
m_builder->captureBlockReturnValue();
120179

121180
m_builder->build();

0 commit comments

Comments
 (0)