@@ -220,3 +220,188 @@ TEST_F(PenBlocksTest, PenUp_Stage)
220220 thread->run ();
221221 ASSERT_FALSE (model.penDown ());
222222}
223+
224+ TEST_F (PenBlocksTest, SetPenColorToColor_ValidHex)
225+ {
226+ auto sprite = std::make_shared<Sprite>();
227+ sprite->setEngine (&m_engineMock);
228+
229+ RenderedTarget renderedTarget;
230+ SpriteModel model;
231+ model.init (sprite.get ());
232+ model.setRenderedTarget (&renderedTarget);
233+ sprite->setInterface (&model);
234+
235+ ScriptBuilder builder (m_extension.get (), m_engine, sprite);
236+ builder.addBlock (" pen_setPenColorToColor" );
237+ builder.addValueInput (" COLOR" , " #FFGFFF" );
238+
239+ auto thread = buildScript (builder, sprite.get ());
240+
241+ EXPECT_CALL (m_engineMock, requestRedraw).Times (0 );
242+ thread->run ();
243+ ASSERT_EQ (model.penAttributes ().color , QNanoColor::fromQColor (QColor::fromHsv (359 , 0 , 0 )));
244+ }
245+
246+ TEST_F (PenBlocksTest, SetPenColorToColor_CaseInsensitiveHex)
247+ {
248+ auto sprite = std::make_shared<Sprite>();
249+ sprite->setEngine (&m_engineMock);
250+
251+ RenderedTarget renderedTarget;
252+ SpriteModel model;
253+ model.init (sprite.get ());
254+ model.setRenderedTarget (&renderedTarget);
255+ sprite->setInterface (&model);
256+
257+ ScriptBuilder builder (m_extension.get (), m_engine, sprite);
258+ builder.addBlock (" pen_setPenColorToColor" );
259+ builder.addValueInput (" COLOR" , " #AABbCC" );
260+
261+ auto thread = buildScript (builder, sprite.get ());
262+
263+ EXPECT_CALL (m_engineMock, requestRedraw).Times (0 );
264+ thread->run ();
265+ ASSERT_EQ (model.penAttributes ().color , QNanoColor::fromQColor (QColor::fromHsv (210 , 42 , 204 )));
266+ }
267+
268+ TEST_F (PenBlocksTest, SetPenColorToColor_3DigitHex)
269+ {
270+ auto sprite = std::make_shared<Sprite>();
271+ sprite->setEngine (&m_engineMock);
272+
273+ RenderedTarget renderedTarget;
274+ SpriteModel model;
275+ model.init (sprite.get ());
276+ model.setRenderedTarget (&renderedTarget);
277+ sprite->setInterface (&model);
278+
279+ ScriptBuilder builder (m_extension.get (), m_engine, sprite);
280+ builder.addBlock (" pen_setPenColorToColor" );
281+ builder.addValueInput (" COLOR" , " #03F" );
282+
283+ auto thread = buildScript (builder, sprite.get ());
284+
285+ EXPECT_CALL (m_engineMock, requestRedraw).Times (0 );
286+ thread->run ();
287+ ASSERT_EQ (model.penAttributes ().color , QNanoColor::fromQColor (QColor::fromHsv (228 , 255 , 255 )));
288+ }
289+
290+ TEST_F (PenBlocksTest, SetPenColorToColor_InvalidHex)
291+ {
292+ auto sprite = std::make_shared<Sprite>();
293+ sprite->setEngine (&m_engineMock);
294+
295+ RenderedTarget renderedTarget;
296+ SpriteModel model;
297+ model.init (sprite.get ());
298+ model.setRenderedTarget (&renderedTarget);
299+ sprite->setInterface (&model);
300+
301+ ScriptBuilder builder (m_extension.get (), m_engine, sprite);
302+ builder.addBlock (" pen_setPenColorToColor" );
303+ builder.addValueInput (" COLOR" , " #AABBCCDD" );
304+
305+ model.penAttributes ().color = QNanoColor::fromQColor (QColor::fromHsv (228 , 255 , 255 ));
306+
307+ auto thread = buildScript (builder, sprite.get ());
308+
309+ EXPECT_CALL (m_engineMock, requestRedraw).Times (0 );
310+ thread->run ();
311+
312+ ASSERT_EQ (model.penAttributes ().color , QNanoColor::fromQColor (QColor (0 , 0 , 0 )));
313+ }
314+
315+ TEST_F (PenBlocksTest, SetPenColorToColor_InvalidString)
316+ {
317+ auto sprite = std::make_shared<Sprite>();
318+ sprite->setEngine (&m_engineMock);
319+
320+ RenderedTarget renderedTarget;
321+ SpriteModel model;
322+ model.init (sprite.get ());
323+ model.setRenderedTarget (&renderedTarget);
324+ sprite->setInterface (&model);
325+
326+ ScriptBuilder builder (m_extension.get (), m_engine, sprite);
327+ builder.addBlock (" pen_setPenColorToColor" );
328+ builder.addValueInput (" COLOR" , " FFFFFF" );
329+
330+ model.penAttributes ().color = QNanoColor::fromQColor (QColor::fromHsv (228 , 255 , 255 ));
331+
332+ auto thread = buildScript (builder, sprite.get ());
333+
334+ EXPECT_CALL (m_engineMock, requestRedraw).Times (0 );
335+ thread->run ();
336+
337+ ASSERT_EQ (model.penAttributes ().color , QNanoColor::fromQColor (QColor (0 , 0 , 0 )));
338+ }
339+
340+ TEST_F (PenBlocksTest, SetPenColorToColor_NumberWithoutAlphaChannel)
341+ {
342+ auto sprite = std::make_shared<Sprite>();
343+ sprite->setEngine (&m_engineMock);
344+
345+ RenderedTarget renderedTarget;
346+ SpriteModel model;
347+ model.init (sprite.get ());
348+ model.setRenderedTarget (&renderedTarget);
349+ sprite->setInterface (&model);
350+
351+ ScriptBuilder builder (m_extension.get (), m_engine, sprite);
352+ builder.addBlock (" pen_setPenColorToColor" );
353+ builder.addValueInput (" COLOR" , 255 );
354+
355+ auto thread = buildScript (builder, sprite.get ());
356+
357+ EXPECT_CALL (m_engineMock, requestRedraw).Times (0 );
358+ thread->run ();
359+
360+ ASSERT_EQ (model.penAttributes ().color , QNanoColor::fromQColor (QColor::fromHsv (239 , 255 , 255 )));
361+ }
362+
363+ TEST_F (PenBlocksTest, SetPenColorToColor_NumberWithAlphaChannel)
364+ {
365+ auto sprite = std::make_shared<Sprite>();
366+ sprite->setEngine (&m_engineMock);
367+
368+ RenderedTarget renderedTarget;
369+ SpriteModel model;
370+ model.init (sprite.get ());
371+ model.setRenderedTarget (&renderedTarget);
372+ sprite->setInterface (&model);
373+
374+ ScriptBuilder builder (m_extension.get (), m_engine, sprite);
375+ builder.addBlock (" pen_setPenColorToColor" );
376+ builder.addValueInput (" COLOR" , 1228097602 );
377+
378+ auto thread = buildScript (builder, sprite.get ());
379+
380+ EXPECT_CALL (m_engineMock, requestRedraw).Times (0 );
381+ thread->run ();
382+
383+ ASSERT_EQ (model.penAttributes ().color , QNanoColor::fromQColor (QColor::fromHsv (162 , 74 , 72 , 73 )));
384+ }
385+
386+ TEST_F (PenBlocksTest, SetPenColorToColor_Stage)
387+ {
388+ auto stage = std::make_shared<Stage>();
389+ stage->setEngine (&m_engineMock);
390+
391+ RenderedTarget renderedTarget;
392+ StageModel model;
393+ model.init (stage.get ());
394+ model.setRenderedTarget (&renderedTarget);
395+ stage->setInterface (&model);
396+
397+ ScriptBuilder builder (m_extension.get (), m_engine, stage);
398+ builder.addBlock (" pen_setPenColorToColor" );
399+ builder.addValueInput (" COLOR" , rgb (128 , 255 , 26 ));
400+
401+ auto thread = buildScript (builder, stage.get ());
402+
403+ EXPECT_CALL (m_engineMock, requestRedraw).Times (0 );
404+ thread->run ();
405+
406+ ASSERT_EQ (model.penAttributes ().color , QNanoColor::fromQColor (QColor::fromHsv (93 , 229 , 255 )));
407+ }
0 commit comments