Skip to content

Commit 57390da

Browse files
authored
Merge pull request #412 from scratchcpp/stop_before_starting
Fix #394: Stop projects before starting them
2 parents d7b86ef + 873b19a commit 57390da

File tree

3 files changed

+45
-26
lines changed

3 files changed

+45
-26
lines changed

src/engine/internal/engine.cpp

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -170,11 +170,7 @@ void Engine::compile()
170170

171171
void Engine::start()
172172
{
173-
// NOTE: Running scripts should be deleted, but this method will probably be removed anyway
174-
/*if (m_running)
175-
finalize();*/
176-
177-
deleteClones();
173+
stop();
178174

179175
m_eventLoopMutex.lock();
180176
m_timer->reset();

test/engine/engine_test.cpp

Lines changed: 44 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -377,8 +377,6 @@ TEST(EngineTest, WhenKeyPressed)
377377
Project p("when_key_pressed.sb3");
378378
ASSERT_TRUE(p.load());
379379

380-
p.run();
381-
382380
auto engine = p.engine();
383381

384382
Stage *stage = engine->stage();
@@ -400,12 +398,12 @@ TEST(EngineTest, WhenKeyPressed)
400398

401399
// space
402400
engine->setKeyState("space", true);
403-
p.run();
401+
engine->step();
404402

405403
ASSERT_VAR(stage, "space_pressed");
406404
ASSERT_EQ(GET_VAR(stage, "space_pressed")->value().toInt(), 1);
407405
engine->setKeyState("space", false);
408-
p.run();
406+
engine->step();
409407

410408
ASSERT_VAR(stage, "space_pressed");
411409
ASSERT_EQ(GET_VAR(stage, "space_pressed")->value().toInt(), 1);
@@ -422,12 +420,12 @@ TEST(EngineTest, WhenKeyPressed)
422420

423421
// right arrow
424422
engine->setKeyState("right arrow", true);
425-
p.run();
423+
engine->step();
426424

427425
ASSERT_VAR(stage, "right_arrow_pressed");
428426
ASSERT_EQ(GET_VAR(stage, "right_arrow_pressed")->value().toInt(), 1);
429427
engine->setKeyState("right arrow", false);
430-
p.run();
428+
engine->step();
431429

432430
ASSERT_VAR(stage, "space_pressed");
433431
ASSERT_EQ(GET_VAR(stage, "space_pressed")->value().toInt(), 1);
@@ -444,12 +442,12 @@ TEST(EngineTest, WhenKeyPressed)
444442

445443
// right arrow - key object
446444
engine->setKeyState(KeyEvent("right arrow"), true);
447-
p.run();
445+
engine->step();
448446

449447
ASSERT_VAR(stage, "right_arrow_pressed");
450448
ASSERT_EQ(GET_VAR(stage, "right_arrow_pressed")->value().toInt(), 2);
451449
engine->setKeyState("right arrow", false);
452-
p.run();
450+
engine->step();
453451

454452
ASSERT_VAR(stage, "space_pressed");
455453
ASSERT_EQ(GET_VAR(stage, "space_pressed")->value().toInt(), 1);
@@ -466,12 +464,12 @@ TEST(EngineTest, WhenKeyPressed)
466464

467465
// any key
468466
engine->setAnyKeyPressed(true);
469-
p.run();
467+
engine->step();
470468

471469
ASSERT_VAR(stage, "any_key_pressed");
472470
ASSERT_EQ(GET_VAR(stage, "any_key_pressed")->value().toInt(), 4);
473471
engine->setAnyKeyPressed(false);
474-
p.run();
472+
engine->step();
475473

476474
ASSERT_VAR(stage, "space_pressed");
477475
ASSERT_EQ(GET_VAR(stage, "space_pressed")->value().toInt(), 1);
@@ -488,12 +486,12 @@ TEST(EngineTest, WhenKeyPressed)
488486

489487
// a
490488
engine->setKeyState("a", true);
491-
p.run();
489+
engine->step();
492490

493491
ASSERT_VAR(stage, "a_pressed");
494492
ASSERT_EQ(GET_VAR(stage, "a_pressed")->value().toInt(), 1);
495493
engine->setKeyState("a", false);
496-
p.run();
494+
engine->step();
497495

498496
ASSERT_VAR(stage, "space_pressed");
499497
ASSERT_EQ(GET_VAR(stage, "space_pressed")->value().toInt(), 1);
@@ -510,12 +508,12 @@ TEST(EngineTest, WhenKeyPressed)
510508

511509
// x
512510
engine->setKeyState("x", true);
513-
p.run();
511+
engine->step();
514512

515513
ASSERT_VAR(stage, "x_pressed");
516514
ASSERT_EQ(GET_VAR(stage, "x_pressed")->value().toInt(), 1);
517515
engine->setKeyState("x", false);
518-
p.run();
516+
engine->step();
519517

520518
ASSERT_VAR(stage, "space_pressed");
521519
ASSERT_EQ(GET_VAR(stage, "space_pressed")->value().toInt(), 1);
@@ -532,12 +530,12 @@ TEST(EngineTest, WhenKeyPressed)
532530

533531
// 4
534532
engine->setKeyState("4", true);
535-
p.run();
533+
engine->step();
536534

537535
ASSERT_VAR(stage, "4_pressed");
538536
ASSERT_EQ(GET_VAR(stage, "4_pressed")->value().toInt(), 1);
539537
engine->setKeyState("4", false);
540-
p.run();
538+
engine->step();
541539

542540
ASSERT_VAR(stage, "space_pressed");
543541
ASSERT_EQ(GET_VAR(stage, "space_pressed")->value().toInt(), 1);
@@ -555,15 +553,15 @@ TEST(EngineTest, WhenKeyPressed)
555553
// multiple
556554
engine->setKeyState("space", true);
557555
engine->setKeyState("x", true);
558-
p.run();
556+
engine->step();
559557

560558
ASSERT_VAR(stage, "space_pressed");
561559
ASSERT_EQ(GET_VAR(stage, "space_pressed")->value().toInt(), 2);
562560
ASSERT_VAR(stage, "x_pressed");
563561
ASSERT_EQ(GET_VAR(stage, "x_pressed")->value().toInt(), 2);
564562
engine->setKeyState("space", false);
565563
engine->setKeyState("x", false);
566-
p.run();
564+
engine->step();
567565

568566
ASSERT_VAR(stage, "space_pressed");
569567
ASSERT_EQ(GET_VAR(stage, "space_pressed")->value().toInt(), 2);
@@ -1392,17 +1390,42 @@ TEST(EngineTest, ResetRunningHats)
13921390
engine->setKeyState(KeyEvent(KeyEvent::Type::Space), false);
13931391
engine->setKeyState(KeyEvent(KeyEvent::Type::Space), true);
13941392
engine->setKeyState(KeyEvent(KeyEvent::Type::Space), false);
1395-
engine->run();
1393+
engine->step();
13961394

13971395
ASSERT_VAR(stage, "test");
13981396
ASSERT_EQ(GET_VAR(stage, "test")->value().toInt(), 1);
13991397

1400-
engine->run();
1398+
engine->step();
14011399
ASSERT_EQ(GET_VAR(stage, "test")->value().toInt(), 1);
14021400

14031401
engine->setKeyState(KeyEvent(KeyEvent::Type::Space), true);
14041402
engine->setKeyState(KeyEvent(KeyEvent::Type::Space), false);
1405-
engine->run();
1403+
engine->step();
14061404

14071405
ASSERT_EQ(GET_VAR(stage, "test")->value().toInt(), 2);
14081406
}
1407+
1408+
TEST(EngineTest, StopBeforeStarting)
1409+
{
1410+
// Regtest for #394
1411+
Project p("regtest_projects/394_stop_before_starting.sb3");
1412+
ASSERT_TRUE(p.load());
1413+
1414+
auto engine = p.engine();
1415+
1416+
Stage *stage = engine->stage();
1417+
ASSERT_TRUE(stage);
1418+
1419+
engine->broadcast(0);
1420+
engine->step();
1421+
1422+
ASSERT_VAR(stage, "test");
1423+
ASSERT_FALSE(GET_VAR(stage, "test")->value().toBool());
1424+
1425+
GET_VAR(stage, "test")->setValue(true);
1426+
engine->broadcast(0);
1427+
engine->start();
1428+
engine->step();
1429+
ASSERT_VAR(stage, "test");
1430+
ASSERT_TRUE(GET_VAR(stage, "test")->value().toBool());
1431+
}
Binary file not shown.

0 commit comments

Comments
 (0)