@@ -67,12 +67,14 @@ TEST_F(PenBlocksTest, RegisterBlocks)
67
67
EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " pen_setPenColorToColor" , &PenBlocks::compileSetPenColorToColor));
68
68
EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " pen_changePenSizeBy" , &PenBlocks::compileChangePenSizeBy));
69
69
EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " pen_setPenSizeTo" , &PenBlocks::compileSetPenSizeTo));
70
+ EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " pen_changePenShadeBy" , &PenBlocks::compileChangePenShadeBy));
70
71
EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " pen_changePenHueBy" , &PenBlocks::compileChangePenHueBy));
71
72
EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " pen_setPenHueToNumber" , &PenBlocks::compileSetPenHueToNumber));
72
73
73
74
// Inputs
74
75
EXPECT_CALL (m_engineMock, addInput (m_section.get (), " COLOR" , PenBlocks::COLOR));
75
76
EXPECT_CALL (m_engineMock, addInput (m_section.get (), " SIZE" , PenBlocks::SIZE));
77
+ EXPECT_CALL (m_engineMock, addInput (m_section.get (), " SHADE" , PenBlocks::SHADE));
76
78
EXPECT_CALL (m_engineMock, addInput (m_section.get (), " HUE" , PenBlocks::HUE));
77
79
78
80
m_section->registerBlocks (&m_engineMock);
@@ -429,6 +431,80 @@ TEST_F(PenBlocksTest, SetPenSizeToImpl)
429
431
ASSERT_EQ (model.penAttributes ().diameter , 1200 );
430
432
}
431
433
434
+ TEST_F (PenBlocksTest, ChangePenShadeBy)
435
+ {
436
+ Compiler compiler (&m_engineMock);
437
+
438
+ // change pen shade by (4.5)
439
+ auto block1 = std::make_shared<Block>(" a" , " pen_changePenShadeBy" );
440
+ addValueInput (block1, " SHADE" , PenBlocks::SHADE, 4.5 );
441
+
442
+ // change pen shade by (null block)
443
+ auto block2 = std::make_shared<Block>(" b" , " pen_changePenShadeBy" );
444
+ addObscuredInput (block2, " SHADE" , PenBlocks::SHADE, createNullBlock (" c" ));
445
+
446
+ compiler.init ();
447
+
448
+ EXPECT_CALL (m_engineMock, functionIndex (&PenBlocks::changePenShadeBy)).WillOnce (Return (2 ));
449
+ compiler.setBlock (block1);
450
+ PenBlocks::compileChangePenShadeBy (&compiler);
451
+
452
+ EXPECT_CALL (m_engineMock, functionIndex (&PenBlocks::changePenShadeBy)).WillOnce (Return (2 ));
453
+ compiler.setBlock (block2);
454
+ PenBlocks::compileChangePenShadeBy (&compiler);
455
+
456
+ compiler.end ();
457
+
458
+ ASSERT_EQ (compiler.bytecode (), std::vector<unsigned int >({ vm::OP_START, vm::OP_CONST, 0 , vm::OP_EXEC, 2 , vm::OP_NULL, vm::OP_EXEC, 2 , vm::OP_HALT }));
459
+ ASSERT_EQ (compiler.constValues ().size (), 1 );
460
+ ASSERT_EQ (compiler.constValues ()[0 ].toDouble (), 4.5 );
461
+ ASSERT_TRUE (compiler.variables ().empty ());
462
+ ASSERT_TRUE (compiler.lists ().empty ());
463
+ }
464
+
465
+ TEST_F (PenBlocksTest, ChangePenShadeByImpl)
466
+ {
467
+ static unsigned int bytecode1[] = { vm::OP_START, vm::OP_CONST, 0 , vm::OP_EXEC, 0 , vm::OP_HALT };
468
+ static unsigned int bytecode2[] = { vm::OP_START, vm::OP_CONST, 1 , vm::OP_EXEC, 0 , vm::OP_HALT };
469
+ static BlockFunc functions[] = { &PenBlocks::changePenShadeBy };
470
+ static Value constValues[] = { 134.09 , -124.45 };
471
+
472
+ SpriteModel model;
473
+ model.penState ().transparency = 100 * (1 - 150 / 255.0 );
474
+ Sprite sprite;
475
+ sprite.setInterface (&model);
476
+
477
+ VirtualMachine vm (&sprite, &m_engineMock, nullptr );
478
+ vm.setBytecode (bytecode1);
479
+ vm.setFunctions (functions);
480
+ vm.setConstValues (constValues);
481
+
482
+ vm.run ();
483
+ ASSERT_EQ (vm.registerCount (), 0 );
484
+ ASSERT_EQ (model.penAttributes ().color , QColor::fromHsv (240 , 255 , 110 , 150 ));
485
+
486
+ vm.reset ();
487
+ vm.run ();
488
+ ASSERT_EQ (vm.registerCount (), 0 );
489
+ ASSERT_EQ (model.penAttributes ().color , QColor::fromHsv (240 , 119 , 255 , 150 ));
490
+
491
+ vm.reset ();
492
+ vm.run ();
493
+ ASSERT_EQ (vm.registerCount (), 0 );
494
+ ASSERT_EQ (model.penAttributes ().color , QColor::fromHsv (240 , 247 , 255 , 150 ));
495
+
496
+ vm.reset ();
497
+ vm.setBytecode (bytecode2);
498
+ vm.run ();
499
+ ASSERT_EQ (vm.registerCount (), 0 );
500
+ ASSERT_EQ (model.penAttributes ().color , QColor::fromHsv (240 , 162 , 255 , 150 ));
501
+
502
+ vm.reset ();
503
+ vm.run ();
504
+ ASSERT_EQ (vm.registerCount (), 0 );
505
+ ASSERT_EQ (model.penAttributes ().color , QColor::fromHsv (240 , 255 , 55 , 150 ));
506
+ }
507
+
432
508
TEST_F (PenBlocksTest, ChangePenHueBy)
433
509
{
434
510
Compiler compiler (&m_engineMock);
0 commit comments