|
13 | 13 | #include <scratchcpp/inputvalue.h> |
14 | 14 | #include <scratchcpp/comment.h> |
15 | 15 | #include <scratchcpp/broadcast.h> |
| 16 | +#include <scratchcpp/monitor.h> |
16 | 17 | #include <projectdownloaderfactorymock.h> |
17 | 18 | #include <projectdownloadermock.h> |
18 | 19 |
|
@@ -205,7 +206,7 @@ TEST(LoadProjectTest, LoadTestProject) |
205 | 206 | // Stage |
206 | 207 | Stage *stage = engine->stage(); |
207 | 208 | ASSERT_EQ(stage->comments().size(), 1); |
208 | | - ASSERT_EQ(stage->variables().size(), 2); |
| 209 | + ASSERT_EQ(stage->variables().size(), 4); |
209 | 210 | ASSERT_EQ(stage->lists().size(), 1); |
210 | 211 |
|
211 | 212 | // Stage: comments |
@@ -444,6 +445,185 @@ TEST(LoadProjectTest, LoadTestProject) |
444 | 445 | ASSERT_LIST(sprite2, "list2"); |
445 | 446 | ASSERT_EQ(GET_LIST(sprite2, "list2")->toString(), "0 4 3 4 1 5 6 9 4 8"); |
446 | 447 |
|
| 448 | + // Monitors |
| 449 | + const auto &monitors = engine->monitors(); |
| 450 | + ASSERT_EQ(monitors.size(), 11); |
| 451 | + |
| 452 | + // list1 |
| 453 | + auto monitor = monitors[0]; |
| 454 | + ASSERT_EQ(monitor->id(), "/oB5:^t}UfL_Moa]OVbD"); |
| 455 | + ASSERT_EQ(monitor->mode(), Monitor::Mode::List); |
| 456 | + ASSERT_EQ(monitor->opcode(), "data_listcontents"); |
| 457 | + block = monitor->block(); |
| 458 | + ASSERT_EQ(block->fields().size(), 1); |
| 459 | + auto field = block->fieldAt(0); |
| 460 | + ASSERT_EQ(field->name(), "LIST"); |
| 461 | + ASSERT_EQ(field->value(), "list1"); |
| 462 | + ASSERT_EQ(field->valuePtr(), GET_LIST(stage, "list1")); |
| 463 | + ASSERT_EQ(monitor->sprite(), nullptr); |
| 464 | + ASSERT_EQ(monitor->width(), 167); |
| 465 | + ASSERT_EQ(monitor->height(), 93); |
| 466 | + ASSERT_EQ(monitor->x(), 226); |
| 467 | + ASSERT_EQ(monitor->y(), 34); |
| 468 | + ASSERT_TRUE(monitor->visible()); |
| 469 | + |
| 470 | + // Sprite1: list2 |
| 471 | + monitor = monitors[1]; |
| 472 | + ASSERT_EQ(monitor->id(), "-!=?$nO,[RI{7!^_:x=?"); |
| 473 | + ASSERT_EQ(monitor->mode(), Monitor::Mode::List); |
| 474 | + ASSERT_EQ(monitor->opcode(), "data_listcontents"); |
| 475 | + block = monitor->block(); |
| 476 | + ASSERT_EQ(block->fields().size(), 1); |
| 477 | + field = block->fieldAt(0); |
| 478 | + ASSERT_EQ(field->name(), "LIST"); |
| 479 | + ASSERT_EQ(field->value(), "list2"); |
| 480 | + ASSERT_EQ(field->valuePtr(), GET_LIST(engine->targetAt(engine->findTarget("Sprite1")), "list2")); |
| 481 | + ASSERT_EQ(monitor->sprite(), dynamic_cast<Sprite *>(engine->targetAt(engine->findTarget("Sprite1")))); |
| 482 | + ASSERT_EQ(monitor->width(), 0); |
| 483 | + ASSERT_EQ(monitor->height(), 0); |
| 484 | + ASSERT_EQ(monitor->x(), 106); |
| 485 | + ASSERT_EQ(monitor->y(), 5); |
| 486 | + ASSERT_TRUE(monitor->visible()); |
| 487 | + |
| 488 | + // Balloon1: list2 |
| 489 | + monitor = monitors[2]; |
| 490 | + ASSERT_EQ(monitor->id(), "$FebBLy/KiSa19@:b-iA"); |
| 491 | + ASSERT_EQ(monitor->mode(), Monitor::Mode::List); |
| 492 | + ASSERT_EQ(monitor->opcode(), "data_listcontents"); |
| 493 | + block = monitor->block(); |
| 494 | + ASSERT_EQ(block->fields().size(), 1); |
| 495 | + field = block->fieldAt(0); |
| 496 | + ASSERT_EQ(field->name(), "LIST"); |
| 497 | + ASSERT_EQ(field->value(), "list2"); |
| 498 | + ASSERT_EQ(field->valuePtr(), GET_LIST(engine->targetAt(engine->findTarget("Balloon1")), "list2")); |
| 499 | + ASSERT_EQ(monitor->sprite(), dynamic_cast<Sprite *>(engine->targetAt(engine->findTarget("Balloon1")))); |
| 500 | + ASSERT_EQ(monitor->width(), 0); |
| 501 | + ASSERT_EQ(monitor->height(), 0); |
| 502 | + ASSERT_EQ(monitor->x(), 255); |
| 503 | + ASSERT_EQ(monitor->y(), 5); |
| 504 | + ASSERT_FALSE(monitor->visible()); |
| 505 | + |
| 506 | + // var1 |
| 507 | + monitor = monitors[3]; |
| 508 | + ASSERT_EQ(monitor->id(), "`jEk@4|i[#Fk?(8x)AV.-my variable"); |
| 509 | + ASSERT_EQ(monitor->mode(), Monitor::Mode::Default); |
| 510 | + ASSERT_EQ(monitor->opcode(), "data_variable"); |
| 511 | + block = monitor->block(); |
| 512 | + ASSERT_EQ(block->fields().size(), 1); |
| 513 | + field = block->fieldAt(0); |
| 514 | + ASSERT_EQ(field->name(), "VARIABLE"); |
| 515 | + ASSERT_EQ(field->value(), "var1"); |
| 516 | + ASSERT_EQ(field->valuePtr(), GET_VAR(stage, "var1")); |
| 517 | + ASSERT_EQ(monitor->sprite(), nullptr); |
| 518 | + ASSERT_EQ(monitor->width(), 0); |
| 519 | + ASSERT_EQ(monitor->height(), 0); |
| 520 | + ASSERT_EQ(monitor->x(), 5); |
| 521 | + ASSERT_EQ(monitor->y(), 212); |
| 522 | + ASSERT_TRUE(monitor->visible()); |
| 523 | + |
| 524 | + // Sprite1: var2 |
| 525 | + monitor = monitors[4]; |
| 526 | + ASSERT_EQ(monitor->id(), "eN~@jd#CfxXM(wA6qcyt"); |
| 527 | + ASSERT_EQ(monitor->mode(), Monitor::Mode::Default); |
| 528 | + ASSERT_EQ(monitor->opcode(), "data_variable"); |
| 529 | + block = monitor->block(); |
| 530 | + ASSERT_EQ(block->fields().size(), 1); |
| 531 | + field = block->fieldAt(0); |
| 532 | + ASSERT_EQ(field->name(), "VARIABLE"); |
| 533 | + ASSERT_EQ(field->value(), "var2"); |
| 534 | + ASSERT_EQ(field->valuePtr(), GET_VAR(engine->targetAt(engine->findTarget("Sprite1")), "var2")); |
| 535 | + ASSERT_EQ(monitor->sprite(), dynamic_cast<Sprite *>(engine->targetAt(engine->findTarget("Sprite1")))); |
| 536 | + ASSERT_EQ(monitor->width(), 0); |
| 537 | + ASSERT_EQ(monitor->height(), 0); |
| 538 | + ASSERT_EQ(monitor->x(), 5); |
| 539 | + ASSERT_EQ(monitor->y(), 212); |
| 540 | + ASSERT_FALSE(monitor->visible()); |
| 541 | + |
| 542 | + // Balloon1: var2 |
| 543 | + monitor = monitors[5]; |
| 544 | + ASSERT_EQ(monitor->id(), "g2][rYmi~u[wE@o$jckr"); |
| 545 | + ASSERT_EQ(monitor->mode(), Monitor::Mode::Large); |
| 546 | + ASSERT_EQ(monitor->opcode(), "data_variable"); |
| 547 | + block = monitor->block(); |
| 548 | + ASSERT_EQ(block->fields().size(), 1); |
| 549 | + field = block->fieldAt(0); |
| 550 | + ASSERT_EQ(field->name(), "VARIABLE"); |
| 551 | + ASSERT_EQ(field->value(), "var2"); |
| 552 | + ASSERT_EQ(field->valuePtr(), GET_VAR(engine->targetAt(engine->findTarget("Balloon1")), "var2")); |
| 553 | + ASSERT_EQ(monitor->sprite(), dynamic_cast<Sprite *>(engine->targetAt(engine->findTarget("Balloon1")))); |
| 554 | + ASSERT_EQ(monitor->width(), 0); |
| 555 | + ASSERT_EQ(monitor->height(), 0); |
| 556 | + ASSERT_EQ(monitor->x(), 146); |
| 557 | + ASSERT_EQ(monitor->y(), 267); |
| 558 | + ASSERT_TRUE(monitor->visible()); |
| 559 | + |
| 560 | + // loudness |
| 561 | + monitor = monitors[6]; |
| 562 | + ASSERT_EQ(monitor->id(), "loudness"); |
| 563 | + ASSERT_EQ(monitor->mode(), Monitor::Mode::Default); |
| 564 | + ASSERT_EQ(monitor->opcode(), "sensing_loudness"); |
| 565 | + block = monitor->block(); |
| 566 | + ASSERT_TRUE(block->fields().empty()); |
| 567 | + ASSERT_EQ(monitor->sprite(), nullptr); |
| 568 | + ASSERT_EQ(monitor->width(), 0); |
| 569 | + ASSERT_EQ(monitor->height(), 0); |
| 570 | + ASSERT_EQ(monitor->x(), 5); |
| 571 | + ASSERT_EQ(monitor->y(), 239); |
| 572 | + ASSERT_TRUE(monitor->visible()); |
| 573 | + |
| 574 | + // current year |
| 575 | + monitor = monitors[7]; |
| 576 | + ASSERT_EQ(monitor->id(), "current_year"); |
| 577 | + ASSERT_EQ(monitor->mode(), Monitor::Mode::Default); |
| 578 | + ASSERT_EQ(monitor->opcode(), "sensing_current"); |
| 579 | + block = monitor->block(); |
| 580 | + ASSERT_EQ(block->fields().size(), 1); |
| 581 | + field = block->fieldAt(0); |
| 582 | + ASSERT_EQ(field->name(), "CURRENTMENU"); |
| 583 | + ASSERT_EQ(field->value(), "YEAR"); |
| 584 | + ASSERT_EQ(monitor->sprite(), nullptr); |
| 585 | + ASSERT_EQ(monitor->width(), 0); |
| 586 | + ASSERT_EQ(monitor->height(), 0); |
| 587 | + ASSERT_EQ(monitor->x(), 5); |
| 588 | + ASSERT_EQ(monitor->y(), 5); |
| 589 | + ASSERT_TRUE(monitor->visible()); |
| 590 | + |
| 591 | + // var4 |
| 592 | + monitor = monitors[8]; |
| 593 | + ASSERT_EQ(monitor->id(), "k^cUO5^Pcq!9lY|dxlg+"); |
| 594 | + ASSERT_EQ(monitor->mode(), Monitor::Mode::Slider); |
| 595 | + ASSERT_EQ(monitor->opcode(), "data_variable"); |
| 596 | + block = monitor->block(); |
| 597 | + ASSERT_EQ(block->fields().size(), 1); |
| 598 | + field = block->fieldAt(0); |
| 599 | + ASSERT_EQ(field->name(), "VARIABLE"); |
| 600 | + ASSERT_EQ(field->value(), "var4"); |
| 601 | + ASSERT_EQ(field->valuePtr(), GET_VAR(stage, "var4")); |
| 602 | + ASSERT_EQ(monitor->sprite(), nullptr); |
| 603 | + ASSERT_EQ(monitor->width(), 0); |
| 604 | + ASSERT_EQ(monitor->height(), 0); |
| 605 | + ASSERT_EQ(monitor->x(), 305); |
| 606 | + ASSERT_EQ(monitor->y(), 234); |
| 607 | + ASSERT_TRUE(monitor->visible()); |
| 608 | + |
| 609 | + // var5 |
| 610 | + monitor = monitors[9]; |
| 611 | + ASSERT_EQ(monitor->id(), "lWC9K6_lG+vq!)EX}npr"); |
| 612 | + ASSERT_EQ(monitor->mode(), Monitor::Mode::Slider); |
| 613 | + ASSERT_EQ(monitor->opcode(), "data_variable"); |
| 614 | + block = monitor->block(); |
| 615 | + ASSERT_EQ(block->fields().size(), 1); |
| 616 | + field = block->fieldAt(0); |
| 617 | + ASSERT_EQ(field->name(), "VARIABLE"); |
| 618 | + ASSERT_EQ(field->value(), "var5"); |
| 619 | + ASSERT_EQ(field->valuePtr(), GET_VAR(stage, "var5")); |
| 620 | + ASSERT_EQ(monitor->sprite(), nullptr); |
| 621 | + ASSERT_EQ(monitor->width(), 0); |
| 622 | + ASSERT_EQ(monitor->height(), 0); |
| 623 | + ASSERT_EQ(monitor->x(), 304); |
| 624 | + ASSERT_EQ(monitor->y(), 280); |
| 625 | + ASSERT_TRUE(monitor->visible()); |
| 626 | + |
447 | 627 | i++; |
448 | 628 | } |
449 | 629 | } |
|
0 commit comments