Skip to content

Commit 27a7b5f

Browse files
committed
Add resolve IDs test
1 parent 779e7f7 commit 27a7b5f

File tree

4 files changed

+107
-0
lines changed

4 files changed

+107
-0
lines changed

test/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,4 @@ set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
1414
include(GoogleTest)
1515
add_subdirectory(zip)
1616
add_subdirectory(load_project)
17+
add_subdirectory(compiler)

test/compiler/CMakeLists.txt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
add_executable(
2+
compiler_test
3+
compiler_test.cpp
4+
)
5+
6+
target_link_libraries(
7+
compiler_test
8+
GTest::gtest_main
9+
scratchcpp
10+
)
11+
12+
gtest_discover_tests(compiler_test)

test/compiler/compiler_test.cpp

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
#include "scratchproject.h"
2+
#include "scratch/stage.h"
3+
#include "scratch/sprite.h"
4+
#include "../common.h"
5+
6+
using namespace libscratchcpp;
7+
8+
TEST(CompilerTest, EmptyProject)
9+
{
10+
ScratchProject p("empty_project.sb3", ScratchProject::Version::Scratch3);
11+
ASSERT_TRUE(p.load());
12+
const Engine *engine = p.engine();
13+
ASSERT_EQ(engine->targets().size(), 1);
14+
ASSERT_EQ(engine->extensions().size(), 0);
15+
ASSERT_EQ(engine->broadcasts().size(), 0);
16+
Stage *stage = dynamic_cast<Stage *>(engine->targetAt(0));
17+
ASSERT_EQ(stage->blocks().size(), 0);
18+
}
19+
20+
TEST(CompilerTest, ResolveIds)
21+
{
22+
ScratchProject p("resolve_id_test.sb3", ScratchProject::Version::Scratch3);
23+
ASSERT_TRUE(p.load());
24+
const Engine *engine = p.engine();
25+
ASSERT_EQ(engine->targets().size(), 2);
26+
ASSERT_EQ(engine->extensions().size(), 0);
27+
ASSERT_EQ(engine->broadcasts().size(), 1);
28+
29+
// Stage
30+
ASSERT_NE(engine->findTarget("Stage"), -1);
31+
Stage *stage = dynamic_cast<Stage *>(engine->targetAt(engine->findTarget("Stage")));
32+
ASSERT_TRUE(stage);
33+
ASSERT_EQ(stage->blocks().size(), 2);
34+
auto block = stage->greenFlagBlocks().at(0);
35+
ASSERT_TRUE(block);
36+
ASSERT_EQ(block->parentId(), "");
37+
ASSERT_FALSE(block->parent());
38+
std::string greenFlagClickedId = block->id();
39+
std::string id = block->nextId();
40+
41+
block = block->next();
42+
ASSERT_EQ(block->parentId(), greenFlagClickedId);
43+
ASSERT_TRUE(block);
44+
ASSERT_EQ(block->id(), id);
45+
ASSERT_EQ(block->nextId(), "");
46+
ASSERT_FALSE(block->next());
47+
48+
// Sprite1
49+
ASSERT_NE(engine->findTarget("Sprite1"), -1);
50+
Sprite *sprite1 = dynamic_cast<Sprite *>(engine->targetAt(engine->findTarget("Sprite1")));
51+
ASSERT_TRUE(sprite1);
52+
ASSERT_EQ(sprite1->blocks().size(), 5);
53+
block = sprite1->greenFlagBlocks().at(0);
54+
ASSERT_TRUE(block);
55+
ASSERT_EQ(block->parentId(), "");
56+
ASSERT_FALSE(block->parent());
57+
greenFlagClickedId = block->id();
58+
id = block->nextId();
59+
60+
block = block->next();
61+
ASSERT_EQ(block->parentId(), greenFlagClickedId);
62+
ASSERT_TRUE(block);
63+
ASSERT_EQ(block->id(), id);
64+
id = block->nextId();
65+
66+
block = block->next();
67+
ASSERT_TRUE(block);
68+
ASSERT_EQ(block->id(), id);
69+
ASSERT_INPUT(block, "BROADCAST_INPUT");
70+
auto v = GET_INPUT(block, "BROADCAST_INPUT")->primaryValue();
71+
ASSERT_EQ(v->valuePtr()->id(), v->valueId());
72+
73+
block = block->next();
74+
ASSERT_TRUE(block);
75+
ASSERT_FIELD(block, "VARIABLE");
76+
auto field = GET_FIELD(block, "VARIABLE");
77+
ASSERT_EQ(field->valuePtr()->id(), field->valueId());
78+
ASSERT_VAR(stage, "my variable");
79+
auto var = GET_VAR(stage, "my variable");
80+
ASSERT_EQ(var->id(), field->valueId());
81+
ASSERT_EQ(var, field->valuePtr());
82+
83+
block = block->next();
84+
ASSERT_TRUE(block);
85+
ASSERT_FIELD(block, "LIST");
86+
field = GET_FIELD(block, "LIST");
87+
ASSERT_EQ(field->valuePtr()->id(), field->valueId());
88+
ASSERT_LIST(stage, "list");
89+
auto list = GET_LIST(stage, "list");
90+
ASSERT_EQ(list->id(), field->valueId());
91+
ASSERT_EQ(list, field->valuePtr());
92+
ASSERT_EQ(block->nextId(), "");
93+
ASSERT_FALSE(block->next());
94+
}

test/resolve_id_test.sb3

41.9 KB
Binary file not shown.

0 commit comments

Comments
 (0)