Skip to content

Commit 535595f

Browse files
authored
Merge pull request #167 from scratchcpp/inputvalue_test
Add InputValue test
2 parents d8fe75e + 092155b commit 535595f

File tree

5 files changed

+149
-2
lines changed

5 files changed

+149
-2
lines changed

src/scratch/input.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,6 @@ void Input::setValueBlock(std::shared_ptr<Block> block)
9191
/*! Sets the ID of the value block. \see setValueBlock() */
9292
void Input::setValueBlockId(const std::string &id)
9393
{
94-
impl->primaryValue.setValueBlockId(id);
9594
impl->primaryValue.setValueBlock(nullptr);
95+
impl->primaryValue.setValueBlockId(id);
9696
}

src/scratch/inputvalue.cpp

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,12 @@
22

33
#include <scratchcpp/inputvalue.h>
44
#include <scratchcpp/compiler.h>
5-
#include <scratchcpp/entity.h>
5+
#include <scratchcpp/block.h>
6+
#include <scratchcpp/broadcast.h>
7+
#include <scratchcpp/variable.h>
8+
#include <scratchcpp/list.h>
69
#include <map>
10+
#include <iostream>
711

812
#include "inputvalue_p.h"
913

@@ -82,6 +86,11 @@ const std::shared_ptr<Block> &InputValue::valueBlock() const
8286
void InputValue::setValueBlock(const std::shared_ptr<Block> &newValueBlock)
8387
{
8488
impl->valueBlock = newValueBlock;
89+
90+
if (newValueBlock)
91+
impl->valueBlockId = newValueBlock->id();
92+
else
93+
impl->valueBlockId = "";
8594
}
8695

8796
/*! Returns the ID of the block. \see valueBlock() */
@@ -94,6 +103,7 @@ const std::string &InputValue::valueBlockId() const
94103
void InputValue::setValueBlockId(const std::string &newValueBlockId)
95104
{
96105
impl->valueBlockId = newValueBlockId;
106+
impl->valueBlock = nullptr;
97107
}
98108

99109
/*! Returns a pointer to the value (e. g. a variable). */
@@ -105,7 +115,21 @@ std::shared_ptr<Entity> InputValue::valuePtr() const
105115
/*! Sets the value pointer. */
106116
void InputValue::setValuePtr(const std::shared_ptr<Entity> &newValuePtr)
107117
{
118+
if (std::dynamic_pointer_cast<Broadcast>(newValuePtr))
119+
setType(Type::Broadcast);
120+
else if (std::dynamic_pointer_cast<Variable>(newValuePtr))
121+
setType(Type::Variable);
122+
else if (std::dynamic_pointer_cast<List>(newValuePtr))
123+
setType(Type::List);
124+
else {
125+
impl->valuePtr = nullptr;
126+
impl->valueId = "";
127+
std::cout << "warning: unsupported input value type (use InputValue::setValueBlock() to set the block)" << std::endl;
128+
return;
129+
}
130+
108131
impl->valuePtr = newValuePtr;
132+
impl->valueId = newValuePtr->id();
109133
}
110134

111135
/*! Returns the ID of the value. */

test/scratch_classes/CMakeLists.txt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,3 +123,17 @@ target_link_libraries(
123123
)
124124

125125
gtest_discover_tests(input_test)
126+
127+
# inputvalue_test
128+
add_executable(
129+
inputvalue_test
130+
inputvalue_test.cpp
131+
)
132+
133+
target_link_libraries(
134+
inputvalue_test
135+
GTest::gtest_main
136+
scratchcpp
137+
)
138+
139+
gtest_discover_tests(inputvalue_test)

test/scratch_classes/input_test.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,4 +58,9 @@ TEST(InputTest, ValueBlock)
5858
input.setValueBlockId("hello");
5959
ASSERT_EQ(input.valueBlockId(), "hello");
6060
ASSERT_EQ(input.valueBlock(), nullptr);
61+
62+
input.setValueBlock(block);
63+
input.setValueBlock(nullptr);
64+
ASSERT_EQ(input.valueBlock(), nullptr);
65+
ASSERT_EQ(input.valueBlockId(), "");
6166
}
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
#include <scratchcpp/inputvalue.h>
2+
#include <scratchcpp/block.h>
3+
#include <scratchcpp/broadcast.h>
4+
#include <scratchcpp/variable.h>
5+
#include <scratchcpp/list.h>
6+
7+
#include "../common.h"
8+
9+
using namespace libscratchcpp;
10+
11+
TEST(InputValueTest, Constructors)
12+
{
13+
InputValue value1;
14+
ASSERT_EQ(value1.type(), InputValue::Type::Number);
15+
16+
InputValue value2(InputValue::Type::String);
17+
ASSERT_EQ(value2.type(), InputValue::Type::String);
18+
}
19+
20+
TEST(InputTest, Type)
21+
{
22+
InputValue value;
23+
24+
value.setType(InputValue::Type::Color);
25+
ASSERT_EQ(value.type(), InputValue::Type::Color);
26+
}
27+
28+
TEST(InputTest, Value)
29+
{
30+
InputValue value;
31+
ASSERT_EQ(value.value(), Value());
32+
33+
value.setValue("test");
34+
ASSERT_EQ(value.value().toString(), "test");
35+
}
36+
37+
TEST(InputTest, ValueBlock)
38+
{
39+
InputValue value;
40+
ASSERT_EQ(value.valueBlock(), nullptr);
41+
ASSERT_EQ(value.valueBlockId(), "");
42+
43+
auto block = std::make_shared<Block>("abc", "");
44+
value.setValueBlock(block);
45+
ASSERT_EQ(value.valueBlock(), block);
46+
ASSERT_EQ(value.valueBlockId(), "abc");
47+
48+
value.setValueBlock(nullptr);
49+
ASSERT_EQ(value.valueBlock(), nullptr);
50+
ASSERT_EQ(value.valueBlockId(), "");
51+
52+
value.setValueBlockId("hello");
53+
ASSERT_EQ(value.valueBlockId(), "hello");
54+
ASSERT_EQ(value.valueBlock(), nullptr);
55+
}
56+
57+
TEST(InputTest, ValuePtr)
58+
{
59+
InputValue value1;
60+
ASSERT_EQ(value1.valuePtr(), nullptr);
61+
ASSERT_EQ(value1.valueId(), "");
62+
63+
auto broadcast = std::make_shared<Broadcast>("abc", "");
64+
value1.setValuePtr(broadcast);
65+
ASSERT_EQ(value1.valuePtr(), broadcast);
66+
ASSERT_EQ(value1.valueId(), "abc");
67+
ASSERT_EQ(value1.type(), InputValue::Type::Broadcast);
68+
69+
auto variable = std::make_shared<Variable>("def", "");
70+
value1.setValuePtr(variable);
71+
ASSERT_EQ(value1.valuePtr(), variable);
72+
ASSERT_EQ(value1.valueId(), "def");
73+
ASSERT_EQ(value1.type(), InputValue::Type::Variable);
74+
75+
auto list = std::make_shared<List>("ghi", "");
76+
value1.setValuePtr(list);
77+
ASSERT_EQ(value1.valuePtr(), list);
78+
ASSERT_EQ(value1.valueId(), "ghi");
79+
ASSERT_EQ(value1.type(), InputValue::Type::List);
80+
81+
auto block = std::make_shared<Block>("jkl", "");
82+
value1.setValuePtr(block);
83+
ASSERT_EQ(value1.valuePtr(), nullptr);
84+
ASSERT_EQ(value1.valueId(), "");
85+
ASSERT_EQ(value1.type(), InputValue::Type::List);
86+
87+
value1.setValuePtr(nullptr);
88+
ASSERT_EQ(value1.valuePtr(), nullptr);
89+
ASSERT_EQ(value1.valueId(), "");
90+
ASSERT_EQ(value1.type(), InputValue::Type::List);
91+
92+
InputValue value2(InputValue::Type::Integer);
93+
94+
value2.setValuePtr(block);
95+
ASSERT_EQ(value2.valuePtr(), nullptr);
96+
ASSERT_EQ(value1.valueId(), "");
97+
ASSERT_EQ(value2.type(), InputValue::Type::Integer);
98+
99+
value2.setValuePtr(variable);
100+
value2.setValueId("hello");
101+
ASSERT_EQ(value2.valuePtr(), nullptr);
102+
ASSERT_EQ(value2.valueId(), "hello");
103+
ASSERT_EQ(value2.type(), InputValue::Type::Variable);
104+
}

0 commit comments

Comments
 (0)