|
2 | 2 | #include "scratch/stage.h" |
3 | 3 | #include "scratch/sprite.h" |
4 | 4 | #include "engine/compiler.h" |
| 5 | +#include "engine/script.h" |
5 | 6 | #include "internal/scratch3reader.h" |
6 | 7 | #include "../common.h" |
7 | 8 |
|
@@ -475,3 +476,26 @@ TEST(CompilerTest, CustomBlocks) |
475 | 476 | compiler.compile(definition); |
476 | 477 | ASSERT_EQ(compiler.bytecode(), std::vector<unsigned int>({ vm::OP_START, vm::OP_CONST, 1, vm::OP_SET_VAR, 2, vm::OP_HALT })); |
477 | 478 | } |
| 479 | + |
| 480 | +TEST(CompilerTest, MultipleTargets) |
| 481 | +{ |
| 482 | + LOAD_PROJECT("load_test.sb3", engine); |
| 483 | + engine.compile(); |
| 484 | + auto scripts = engine.scripts(); |
| 485 | + |
| 486 | + auto sprite1 = engine.targetAt(engine.findTarget("Sprite1")); |
| 487 | + auto script = scripts.at(sprite1->greenFlagBlocks().at(0)); |
| 488 | + ASSERT_EQ(script->bytecodeVector().size(), 30); |
| 489 | + auto vm = script->start(); |
| 490 | + ASSERT_EQ(vm->target(), sprite1); |
| 491 | + ASSERT_EQ(vm->engine(), &engine); |
| 492 | + ASSERT_EQ(vm->script(), script.get()); |
| 493 | + |
| 494 | + auto sprite2 = engine.targetAt(engine.findTarget("Balloon1")); |
| 495 | + script = scripts.at(sprite2->greenFlagBlocks().at(0)); |
| 496 | + ASSERT_EQ(script->bytecodeVector().size(), 6); |
| 497 | + vm = script->start(); |
| 498 | + ASSERT_EQ(vm->target(), sprite2); |
| 499 | + ASSERT_EQ(vm->engine(), &engine); |
| 500 | + ASSERT_EQ(vm->script(), script.get()); |
| 501 | +} |
0 commit comments