Skip to content

Commit d41baed

Browse files
committed
Implement operator_add
1 parent 30fe5dc commit d41baed

File tree

2 files changed

+42
-1
lines changed

2 files changed

+42
-1
lines changed

src/dev/blocks/operatorblocks.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
// SPDX-License-Identifier: Apache-2.0
22

3+
#include <scratchcpp/iengine.h>
4+
#include <scratchcpp/dev/compiler.h>
5+
36
#include "operatorblocks.h"
47

58
using namespace libscratchcpp;
@@ -16,4 +19,10 @@ std::string OperatorBlocks::description() const
1619

1720
void OperatorBlocks::registerBlocks(IEngine *engine)
1821
{
22+
engine->addCompileFunction(this, "operator_add", &compileAdd);
23+
}
24+
25+
CompilerValue *OperatorBlocks::compileAdd(Compiler *compiler)
26+
{
27+
return compiler->createAdd(compiler->addInput("NUM1"), compiler->addInput("NUM2"));
1928
}
Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,47 @@
1+
#include <scratchcpp/project.h>
2+
#include <scratchcpp/sprite.h>
3+
#include <scratchcpp/list.h>
4+
#include <scratchcpp/dev/compiler.h>
5+
#include <scratchcpp/dev/test/scriptbuilder.h>
16
#include <enginemock.h>
27

38
#include "../common.h"
49
#include "dev/blocks/operatorblocks.h"
510

611
using namespace libscratchcpp;
12+
using namespace libscratchcpp::test;
713

814
class OperatorBlocksTest : public testing::Test
915
{
1016
public:
11-
void SetUp() override { m_extension = std::make_unique<OperatorBlocks>(); }
17+
void SetUp() override
18+
{
19+
m_extension = std::make_unique<OperatorBlocks>();
20+
m_engine = m_project.engine().get();
21+
m_extension->registerBlocks(m_engine);
22+
}
1223

1324
std::unique_ptr<IExtension> m_extension;
25+
Project m_project;
26+
IEngine *m_engine = nullptr;
1427
EngineMock m_engineMock;
1528
};
29+
30+
TEST_F(OperatorBlocksTest, Add)
31+
{
32+
auto target = std::make_shared<Sprite>();
33+
ScriptBuilder builder(m_extension.get(), m_engine, target);
34+
35+
builder.addBlock("operator_add");
36+
builder.addValueInput("NUM1", 5.7);
37+
builder.addValueInput("NUM2", 2.5);
38+
builder.captureBlockReturnValue();
39+
40+
builder.build();
41+
builder.run();
42+
43+
List *valueList = builder.capturedValues();
44+
ValueData *values = valueList->data();
45+
ASSERT_EQ(valueList->size(), 1);
46+
ASSERT_EQ(Value(values[0]), 8.2);
47+
}

0 commit comments

Comments
 (0)