1010#include < scratchcpp/costume.h>
1111#include < scratchcpp/sound.h>
1212#include < scratchcpp/sprite.h>
13+ #include < scratchcpp/inputvalue.h>
1314
1415#include " ../common.h"
1516
@@ -124,17 +125,20 @@ TEST(LoadProjectTest, LoadTestProject)
124125 // Sprite1: blocks
125126 ASSERT_EQ (sprite1->greenFlagBlocks ().size (), 1 );
126127 ASSERT_TRUE (sprite1->greenFlagBlocks ()[0 ]);
128+ ASSERT_FALSE (sprite1->greenFlagBlocks ()[0 ]->isTopLevelReporter ());
127129 ASSERT_EQ (sprite1->greenFlagBlocks ()[0 ]->opcode (), " event_whenflagclicked" );
128130 auto block = sprite1->greenFlagBlocks ()[0 ]->next ();
129131 ASSERT_TRUE (block);
130132 ASSERT_EQ (block->parent (), sprite1->greenFlagBlocks ()[0 ]);
131133 ASSERT_EQ (block->opcode (), " control_forever" );
134+ ASSERT_FALSE (block->isTopLevelReporter ());
132135 ASSERT_INPUT (block, " SUBSTACK" );
133136 block = GET_INPUT (block, " SUBSTACK" )->valueBlock ();
134137 ASSERT_TRUE (block);
135138
136139 ASSERT_EQ (block->opcode (), " motion_goto" );
137140 ASSERT_INPUT (block, " TO" );
141+ ASSERT_FALSE (block->isTopLevelReporter ());
138142 auto inputBlock = GET_INPUT (block, " TO" )->valueBlock ();
139143 ASSERT_TRUE (inputBlock);
140144 ASSERT_EQ (inputBlock->opcode (), " motion_goto_menu" );
@@ -155,6 +159,7 @@ TEST(LoadProjectTest, LoadTestProject)
155159 inputBlock = GET_INPUT (block, " VALUE" )->valueBlock ();
156160 ASSERT_TRUE (inputBlock);
157161 ASSERT_EQ (inputBlock->opcode (), " operator_random" );
162+ ASSERT_FALSE (inputBlock->isTopLevelReporter ());
158163 ASSERT_INPUT (inputBlock, " FROM" );
159164 ASSERT_EQ (GET_INPUT (inputBlock, " FROM" )->primaryValue ()->value ().toInt (), 1 );
160165 ASSERT_INPUT (inputBlock, " TO" );
@@ -250,6 +255,47 @@ TEST(LoadProjectTest, LoadTestProject)
250255 }
251256}
252257
258+ TEST (LoadProjectTest, LoadTopLevelReporterProject)
259+ {
260+ int i = 0 ;
261+ for (auto version : scratchVersions) {
262+ Project p (" top_level_reporter" + fileExtensions[i], version);
263+
264+ ASSERT_TRUE (p.load ());
265+
266+ auto engine = p.engine ();
267+ ASSERT_EQ (engine->targets ().size (), 2 );
268+
269+ // Sprite1
270+ ASSERT_NE (engine->findTarget (" Sprite1" ), -1 );
271+ Sprite *sprite1 = dynamic_cast <Sprite *>(engine->targetAt (engine->findTarget (" Sprite1" )));
272+ ASSERT_EQ (sprite1->blocks ().size (), 2 );
273+
274+ // Sprite1: blocks
275+ auto block1 = sprite1->blockAt (0 );
276+ ASSERT_TRUE (block1);
277+ ASSERT_TRUE (block1->isTopLevelReporter ());
278+ InputValue *reporterInfo = block1->topLevelReporterInfo ();
279+ ASSERT_TRUE (reporterInfo);
280+ ASSERT_EQ (reporterInfo->type (), InputValue::Type::Variable);
281+ ASSERT_EQ (reporterInfo->value (), " var" );
282+ ASSERT_EQ (reporterInfo->valueId (), " b[Pq/qD6PJ+hpWtz;X`G" );
283+ ASSERT_EQ (reporterInfo->valuePtr (), sprite1->variableAt (0 ));
284+
285+ auto block2 = sprite1->blockAt (1 );
286+ ASSERT_TRUE (block2);
287+ ASSERT_TRUE (block2->isTopLevelReporter ());
288+ reporterInfo = block2->topLevelReporterInfo ();
289+ ASSERT_TRUE (reporterInfo);
290+ ASSERT_EQ (reporterInfo->type (), InputValue::Type::List);
291+ ASSERT_EQ (reporterInfo->value (), " list" );
292+ ASSERT_EQ (reporterInfo->valueId (), " *BW*~d~DgcZee0q=v*T2" );
293+ ASSERT_EQ (reporterInfo->valuePtr (), sprite1->listAt (0 ));
294+
295+ i++;
296+ }
297+ }
298+
253299TEST (LoadProjectTest, ProjectTest)
254300{
255301 int i = 0 ;
0 commit comments