@@ -2671,3 +2671,184 @@ TEST_F(PenBlocksTest, ChangePenHueBy_Stage)
26712671 EXPECT_EQ (model.penAttributes ().color .alpha (), 255 );
26722672 EXPECT_EQ (model.penState ().shade , 18.5 );
26732673}
2674+
2675+ TEST_F (PenBlocksTest, SetPenHueToNumber)
2676+ {
2677+ auto sprite = std::make_shared<Sprite>();
2678+ sprite->setEngine (&m_engineMock);
2679+
2680+ RenderedTarget renderedTarget;
2681+ SpriteModel model;
2682+ model.init (sprite.get ());
2683+ model.setRenderedTarget (&renderedTarget);
2684+ sprite->setInterface (&model);
2685+
2686+ ScriptBuilder builder (m_extension.get (), m_engine, sprite);
2687+ builder.addBlock (" pen_setPenHueToNumber" );
2688+ builder.addValueInput (" HUE" , 49.2 );
2689+
2690+ PenState &penState = model.penState ();
2691+ penState.color = 60 ;
2692+ penState.saturation = 90 ;
2693+ penState.brightness = 75 ;
2694+ penState.shade = 18.5 ;
2695+ penState.updateColor ();
2696+
2697+ auto original = model.penAttributes ().color ;
2698+
2699+ auto thread = buildScript (builder, sprite.get ());
2700+
2701+ EXPECT_CALL (m_engineMock, requestRedraw).Times (0 );
2702+ thread->run ();
2703+
2704+ EXPECT_EQ (model.penAttributes ().color .red (), 65 );
2705+ EXPECT_EQ (model.penAttributes ().color .green (), 121 );
2706+ EXPECT_EQ (model.penAttributes ().color .blue (), 0 );
2707+ EXPECT_EQ (model.penAttributes ().color .alpha (), 255 );
2708+ EXPECT_EQ (model.penState ().shade , 18.5 );
2709+ }
2710+
2711+ TEST_F (PenBlocksTest, SetPenHueToNumber_ResetsTransparency)
2712+ {
2713+ auto sprite = std::make_shared<Sprite>();
2714+ sprite->setEngine (&m_engineMock);
2715+
2716+ RenderedTarget renderedTarget;
2717+ SpriteModel model;
2718+ model.init (sprite.get ());
2719+ model.setRenderedTarget (&renderedTarget);
2720+ sprite->setInterface (&model);
2721+
2722+ ScriptBuilder builder (m_extension.get (), m_engine, sprite);
2723+ builder.addBlock (" pen_setPenHueToNumber" );
2724+ builder.addValueInput (" HUE" , 49.2 );
2725+
2726+ PenState &penState = model.penState ();
2727+ penState.color = 60 ;
2728+ penState.saturation = 90 ;
2729+ penState.brightness = 75 ;
2730+ penState.shade = 18.5 ;
2731+ penState.transparency = 50 ;
2732+ penState.updateColor ();
2733+
2734+ auto original = model.penAttributes ().color ;
2735+
2736+ auto thread = buildScript (builder, sprite.get ());
2737+
2738+ EXPECT_CALL (m_engineMock, requestRedraw).Times (0 );
2739+ thread->run ();
2740+
2741+ EXPECT_EQ (model.penAttributes ().color .red (), 65 );
2742+ EXPECT_EQ (model.penAttributes ().color .green (), 121 );
2743+ EXPECT_EQ (model.penAttributes ().color .blue (), 0 );
2744+ EXPECT_EQ (model.penAttributes ().color .alpha (), 255 );
2745+ EXPECT_EQ (model.penState ().transparency , 0 );
2746+ }
2747+
2748+ TEST_F (PenBlocksTest, SetPenHueToNumber_OutOfRange)
2749+ {
2750+ auto sprite = std::make_shared<Sprite>();
2751+ sprite->setEngine (&m_engineMock);
2752+
2753+ RenderedTarget renderedTarget;
2754+ SpriteModel model;
2755+ model.init (sprite.get ());
2756+ model.setRenderedTarget (&renderedTarget);
2757+ sprite->setInterface (&model);
2758+
2759+ ScriptBuilder builder (m_extension.get (), m_engine, sprite);
2760+ builder.addBlock (" pen_setPenHueToNumber" );
2761+ builder.addValueInput (" HUE" , 211.3 );
2762+
2763+ PenState &penState = model.penState ();
2764+ penState.color = 60 ;
2765+ penState.saturation = 90 ;
2766+ penState.brightness = 75 ;
2767+ penState.shade = 63.7 ;
2768+ penState.updateColor ();
2769+
2770+ auto original = model.penAttributes ().color ;
2771+
2772+ auto thread = buildScript (builder, sprite.get ());
2773+
2774+ EXPECT_CALL (m_engineMock, requestRedraw).Times (0 );
2775+ thread->run ();
2776+
2777+ EXPECT_EQ (model.penAttributes ().color .red (), 255 );
2778+ EXPECT_EQ (model.penAttributes ().color .green (), 124 );
2779+ EXPECT_EQ (model.penAttributes ().color .blue (), 58 );
2780+ EXPECT_EQ (model.penAttributes ().color .alpha (), 255 );
2781+ EXPECT_EQ (model.penState ().shade , 63.7 );
2782+ }
2783+
2784+ TEST_F (PenBlocksTest, SetPenHueToNumber_OutOfRange_Negative)
2785+ {
2786+ auto sprite = std::make_shared<Sprite>();
2787+ sprite->setEngine (&m_engineMock);
2788+
2789+ RenderedTarget renderedTarget;
2790+ SpriteModel model;
2791+ model.init (sprite.get ());
2792+ model.setRenderedTarget (&renderedTarget);
2793+ sprite->setInterface (&model);
2794+
2795+ ScriptBuilder builder (m_extension.get (), m_engine, sprite);
2796+ builder.addBlock (" pen_setPenHueToNumber" );
2797+ builder.addValueInput (" HUE" , -23.4 );
2798+
2799+ PenState &penState = model.penState ();
2800+ penState.color = 60 ;
2801+ penState.saturation = 90 ;
2802+ penState.brightness = 75 ;
2803+ penState.shade = 63.7 ;
2804+ penState.updateColor ();
2805+
2806+ auto original = model.penAttributes ().color ;
2807+
2808+ auto thread = buildScript (builder, sprite.get ());
2809+
2810+ EXPECT_CALL (m_engineMock, requestRedraw).Times (0 );
2811+ thread->run ();
2812+
2813+ EXPECT_EQ (model.penAttributes ().color .red (), 255 );
2814+ EXPECT_EQ (model.penAttributes ().color .green (), 58 );
2815+ EXPECT_EQ (model.penAttributes ().color .blue (), 199 );
2816+ EXPECT_EQ (model.penAttributes ().color .alpha (), 255 );
2817+ EXPECT_EQ (model.penState ().shade , 63.7 );
2818+ }
2819+
2820+ TEST_F (PenBlocksTest, SetPenHueToNumber_Stage)
2821+ {
2822+ auto stage = std::make_shared<Stage>();
2823+ stage->setEngine (&m_engineMock);
2824+
2825+ RenderedTarget renderedTarget;
2826+ StageModel model;
2827+ model.init (stage.get ());
2828+ model.setRenderedTarget (&renderedTarget);
2829+ stage->setInterface (&model);
2830+
2831+ ScriptBuilder builder (m_extension.get (), m_engine, stage);
2832+ builder.addBlock (" pen_setPenHueToNumber" );
2833+ builder.addValueInput (" HUE" , 49.2 );
2834+
2835+ PenState &penState = model.penState ();
2836+ penState.color = 60 ;
2837+ penState.saturation = 90 ;
2838+ penState.brightness = 75 ;
2839+ penState.shade = 18.5 ;
2840+ penState.updateColor ();
2841+
2842+ auto original = model.penAttributes ().color ;
2843+
2844+ auto thread = buildScript (builder, stage.get ());
2845+
2846+ EXPECT_CALL (m_engineMock, requestRedraw).Times (0 );
2847+ thread->run ();
2848+
2849+ EXPECT_EQ (model.penAttributes ().color .red (), 65 );
2850+ EXPECT_EQ (model.penAttributes ().color .green (), 121 );
2851+ EXPECT_EQ (model.penAttributes ().color .blue (), 0 );
2852+ EXPECT_EQ (model.penAttributes ().color .alpha (), 255 );
2853+ EXPECT_EQ (model.penState ().shade , 18.5 );
2854+ }
0 commit comments