@@ -64,10 +64,12 @@ TEST_F(PenBlocksTest, RegisterBlocks)
6464 EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " pen_clear" 
6565 EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " pen_penDown" 
6666 EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " pen_penUp" 
67+  EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " pen_setPenColorToColor" 
6768 EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " pen_changePenSizeBy" 
6869 EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " pen_setPenSizeTo" 
6970
7071 //  Inputs
72+  EXPECT_CALL (m_engineMock, addInput (m_section.get (), " COLOR" 
7173 EXPECT_CALL (m_engineMock, addInput (m_section.get (), " SIZE" 
7274
7375 m_section->registerBlocks (&m_engineMock);
@@ -193,6 +195,99 @@ TEST_F(PenBlocksTest, PenUpImpl)
193195 ASSERT_FALSE (model.penDown ());
194196}
195197
198+ TEST_F (PenBlocksTest, SetPenColorToColor)
199+ {
200+  Compiler compiler (&m_engineMock);
201+ 
202+  //  set pen color to ("#AABBCC")
203+  auto  block1 = std::make_shared<Block>(" a" " pen_setPenColorToColor" 
204+  addValueInput (block1, " COLOR" " #AABBCC" 
205+ 
206+  //  set pen color to (null block)
207+  auto  block2 = std::make_shared<Block>(" b" " pen_setPenColorToColor" 
208+  addObscuredInput (block2, " COLOR" createNullBlock (" c" 
209+ 
210+  compiler.init ();
211+ 
212+  EXPECT_CALL (m_engineMock, functionIndex (&PenBlocks::setPenColorToColor)).WillOnce (Return (2 ));
213+  compiler.setBlock (block1);
214+  PenBlocks::compileSetPenColorToColor (&compiler);
215+ 
216+  EXPECT_CALL (m_engineMock, functionIndex (&PenBlocks::setPenColorToColor)).WillOnce (Return (2 ));
217+  compiler.setBlock (block2);
218+  PenBlocks::compileSetPenColorToColor (&compiler);
219+ 
220+  compiler.end ();
221+ 
222+  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 }));
223+  ASSERT_EQ (compiler.constValues ().size (), 1 );
224+  ASSERT_EQ (compiler.constValues ()[0 ].toString (), " #AABBCC" 
225+  ASSERT_TRUE (compiler.variables ().empty ());
226+  ASSERT_TRUE (compiler.lists ().empty ());
227+ }
228+ 
229+ TEST_F (PenBlocksTest, SetPenColorToColorImpl)
230+ {
231+  static  unsigned  int  bytecode1[] = { vm::OP_START, vm::OP_CONST, 0 , vm::OP_EXEC, 0 , vm::OP_HALT };
232+  static  unsigned  int  bytecode2[] = { vm::OP_START, vm::OP_CONST, 1 , vm::OP_EXEC, 0 , vm::OP_HALT };
233+  static  unsigned  int  bytecode3[] = { vm::OP_START, vm::OP_CONST, 2 , vm::OP_EXEC, 0 , vm::OP_HALT };
234+  static  unsigned  int  bytecode4[] = { vm::OP_START, vm::OP_CONST, 3 , vm::OP_EXEC, 0 , vm::OP_HALT };
235+  static  unsigned  int  bytecode5[] = { vm::OP_START, vm::OP_CONST, 4 , vm::OP_EXEC, 0 , vm::OP_HALT };
236+  static  unsigned  int  bytecode6[] = { vm::OP_START, vm::OP_CONST, 5 , vm::OP_EXEC, 0 , vm::OP_HALT };
237+  static  unsigned  int  bytecode7[] = { vm::OP_START, vm::OP_CONST, 6 , vm::OP_EXEC, 0 , vm::OP_HALT };
238+  static  BlockFunc functions[] = { &PenBlocks::setPenColorToColor };
239+  static  Value constValues[] = { " #AABbCC" " #03F" " #FFGFFF" " #AABBCCDD" " FFFFFF" 1228097602 , 255  };
240+ 
241+  SpriteModel model;
242+  Sprite sprite;
243+  sprite.setInterface (&model);
244+ 
245+  VirtualMachine vm (&sprite, &m_engineMock, nullptr );
246+  vm.setBytecode (bytecode1);
247+  vm.setFunctions (functions);
248+  vm.setConstValues (constValues);
249+ 
250+  vm.run ();
251+  ASSERT_EQ (vm.registerCount (), 0 );
252+  ASSERT_EQ (model.penAttributes ().color , QColor (170 , 187 , 204 ));
253+ 
254+  vm.reset ();
255+  vm.setBytecode (bytecode2);
256+  vm.run ();
257+  ASSERT_EQ (vm.registerCount (), 0 );
258+  ASSERT_EQ (model.penAttributes ().color , QColor (0 , 51 , 255 ));
259+ 
260+  vm.reset ();
261+  vm.setBytecode (bytecode3);
262+  vm.run ();
263+  ASSERT_EQ (vm.registerCount (), 0 );
264+  ASSERT_EQ (model.penAttributes ().color , QColor (0 , 0 , 0 ));
265+ 
266+  vm.reset ();
267+  vm.setBytecode (bytecode4);
268+  vm.run ();
269+  ASSERT_EQ (vm.registerCount (), 0 );
270+  ASSERT_EQ (model.penAttributes ().color , QColor (0 , 0 , 0 ));
271+ 
272+  vm.reset ();
273+  vm.setBytecode (bytecode5);
274+  vm.run ();
275+  ASSERT_EQ (vm.registerCount (), 0 );
276+  ASSERT_EQ (model.penAttributes ().color , QColor (0 , 0 , 0 ));
277+ 
278+  vm.reset ();
279+  vm.setBytecode (bytecode6);
280+  vm.run ();
281+  ASSERT_EQ (vm.registerCount (), 0 );
282+  ASSERT_EQ (model.penAttributes ().color , QColor::fromRgba (1228097602 ));
283+ 
284+  vm.reset ();
285+  vm.setBytecode (bytecode7);
286+  vm.run ();
287+  ASSERT_EQ (vm.registerCount (), 0 );
288+  ASSERT_EQ (model.penAttributes ().color , QColor::fromRgb (255 ));
289+ }
290+ 
196291TEST_F (PenBlocksTest, ChangePenSizeBy)
197292{
198293 Compiler compiler (&m_engineMock);
0 commit comments