@@ -68,6 +68,7 @@ TEST_F(PenBlocksTest, RegisterBlocks)
6868 EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " pen_changePenSizeBy" , &PenBlocks::compileChangePenSizeBy));
6969 EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " pen_setPenSizeTo" , &PenBlocks::compileSetPenSizeTo));
7070 EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " pen_changePenHueBy" , &PenBlocks::compileChangePenHueBy));
71+ EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " pen_setPenHueToNumber" , &PenBlocks::compileSetPenHueToNumber));
7172
7273 // Inputs
7374 EXPECT_CALL (m_engineMock, addInput (m_section.get (), " COLOR" , PenBlocks::COLOR));
@@ -503,3 +504,71 @@ TEST_F(PenBlocksTest, ChangePenHueByImpl)
503504 ASSERT_EQ (vm.registerCount (), 0 );
504505 ASSERT_EQ (model.penAttributes ().color , QColor::fromHsv (145 , 255 , 255 , 150 ));
505506}
507+
508+ TEST_F (PenBlocksTest, SetPenHueToNumber)
509+ {
510+ Compiler compiler (&m_engineMock);
511+
512+ // set pen hue to (54.09)
513+ auto block1 = std::make_shared<Block>(" a" , " pen_setPenHueToNumber" );
514+ addValueInput (block1, " HUE" , PenBlocks::HUE, 54.09 );
515+
516+ // set pen hue to (null block)
517+ auto block2 = std::make_shared<Block>(" b" , " pen_setPenHueToNumber" );
518+ addObscuredInput (block2, " HUE" , PenBlocks::HUE, createNullBlock (" c" ));
519+
520+ compiler.init ();
521+
522+ EXPECT_CALL (m_engineMock, functionIndex (&PenBlocks::setPenHueToNumber)).WillOnce (Return (2 ));
523+ compiler.setBlock (block1);
524+ PenBlocks::compileSetPenHueToNumber (&compiler);
525+
526+ EXPECT_CALL (m_engineMock, functionIndex (&PenBlocks::setPenHueToNumber)).WillOnce (Return (2 ));
527+ compiler.setBlock (block2);
528+ PenBlocks::compileSetPenHueToNumber (&compiler);
529+
530+ compiler.end ();
531+
532+ 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 }));
533+ ASSERT_EQ (compiler.constValues ().size (), 1 );
534+ ASSERT_EQ (compiler.constValues ()[0 ].toDouble (), 54.09 );
535+ ASSERT_TRUE (compiler.variables ().empty ());
536+ ASSERT_TRUE (compiler.lists ().empty ());
537+ }
538+
539+ TEST_F (PenBlocksTest, SetPenHueToNumberImpl)
540+ {
541+ static unsigned int bytecode1[] = { vm::OP_START, vm::OP_CONST, 0 , vm::OP_EXEC, 0 , vm::OP_HALT };
542+ static unsigned int bytecode2[] = { vm::OP_START, vm::OP_CONST, 1 , vm::OP_EXEC, 0 , vm::OP_HALT };
543+ static unsigned int bytecode3[] = { vm::OP_START, vm::OP_CONST, 2 , vm::OP_EXEC, 0 , vm::OP_HALT };
544+ static BlockFunc functions[] = { &PenBlocks::setPenHueToNumber };
545+ static Value constValues[] = { 125.7 , -114.09 , 489.4 };
546+
547+ SpriteModel model;
548+ QColor color = model.penAttributes ().color ;
549+ color.setAlpha (150 );
550+ model.penState ().setColor (color);
551+ Sprite sprite;
552+ sprite.setInterface (&model);
553+
554+ VirtualMachine vm (&sprite, &m_engineMock, nullptr );
555+ vm.setBytecode (bytecode1);
556+ vm.setFunctions (functions);
557+ vm.setConstValues (constValues);
558+
559+ vm.run ();
560+ ASSERT_EQ (vm.registerCount (), 0 );
561+ ASSERT_EQ (model.penAttributes ().color , QColor::fromHsv (226 , 255 , 255 , 255 ));
562+
563+ vm.reset ();
564+ vm.setBytecode (bytecode2);
565+ vm.run ();
566+ ASSERT_EQ (vm.registerCount (), 0 );
567+ ASSERT_EQ (model.penAttributes ().color , QColor::fromHsv (158 , 255 , 255 , 255 ));
568+
569+ vm.reset ();
570+ vm.setBytecode (bytecode3);
571+ vm.run ();
572+ ASSERT_EQ (vm.registerCount (), 0 );
573+ ASSERT_EQ (model.penAttributes ().color , QColor::fromHsv (154 , 255 , 255 , 255 ));
574+ }
0 commit comments