@@ -69,12 +69,74 @@ public void testBorderImage() {
6969 }
7070
7171 @ FormTest
72- public void testLinearGradient () {
73- CSSBorder border = new CSSBorder ();
74- border .backgroundImage ("linear-gradient(90deg, #ff0000, #0000ff)" );
75-
72+ public void testLinearGradient () throws Exception {
73+ // Use reflection to test LinearGradient since parsing logic seems unimplemented or internal
74+ CSSBorder border = new CSSBorder ((Resources )null );
75+
76+ // Reflection to create LinearGradient
77+ Class <?> linearGradientClass = Class .forName ("com.codename1.ui.plaf.CSSBorder$LinearGradient" );
78+ java .lang .reflect .Constructor <?> lgCtor = linearGradientClass .getDeclaredConstructor (CSSBorder .class );
79+ lgCtor .setAccessible (true );
80+ Object linearGradient = lgCtor .newInstance (border );
81+
82+ // Set angle
83+ java .lang .reflect .Field angleField = linearGradientClass .getDeclaredField ("angle" );
84+ angleField .setAccessible (true );
85+ angleField .setFloat (linearGradient , 90f );
86+
87+ // Create ColorStops
88+ Class <?> colorStopClass = Class .forName ("com.codename1.ui.plaf.CSSBorder$ColorStop" );
89+ java .lang .reflect .Constructor <?> csCtor = colorStopClass .getDeclaredConstructor (CSSBorder .class );
90+ csCtor .setAccessible (true );
91+
92+ Object stop1 = csCtor .newInstance (border );
93+
94+ // Create Colors
95+ Class <?> colorClass = Class .forName ("com.codename1.ui.plaf.CSSBorder$Color" );
96+ java .lang .reflect .Constructor <?> colorCtor = colorClass .getDeclaredConstructor (String .class );
97+ colorCtor .setAccessible (true );
98+ Object red = colorCtor .newInstance ("#ff0000" );
99+ Object blue = colorCtor .newInstance ("#0000ff" );
100+
101+ java .lang .reflect .Field colorField = colorStopClass .getDeclaredField ("color" );
102+ colorField .setAccessible (true );
103+ colorField .set (stop1 , red );
104+
105+ Object stop2 = csCtor .newInstance (border );
106+ colorField .set (stop2 , blue );
107+ java .lang .reflect .Field positionField = colorStopClass .getDeclaredField ("position" );
108+ positionField .setAccessible (true );
109+ positionField .setInt (stop2 , 100 );
110+
111+ Object stops = java .lang .reflect .Array .newInstance (colorStopClass , 2 );
112+ java .lang .reflect .Array .set (stops , 0 , stop1 );
113+ java .lang .reflect .Array .set (stops , 1 , stop2 );
114+
115+ java .lang .reflect .Field colorsField = linearGradientClass .getDeclaredField ("colors" );
116+ colorsField .setAccessible (true );
117+ colorsField .set (linearGradient , stops );
118+
119+ // Create BackgroundImage and attach LinearGradient
120+ Class <?> bgImageClass = Class .forName ("com.codename1.ui.plaf.CSSBorder$BackgroundImage" );
121+ java .lang .reflect .Constructor <?> bgCtor = bgImageClass .getDeclaredConstructor (CSSBorder .class );
122+ bgCtor .setAccessible (true );
123+ Object bgImage = bgCtor .newInstance (border );
124+
125+ java .lang .reflect .Field lgField = bgImageClass .getDeclaredField ("linearGradient" );
126+ lgField .setAccessible (true );
127+ lgField .set (bgImage , linearGradient );
128+
129+ // Attach BackgroundImage to CSSBorder
130+ java .lang .reflect .Field bgImagesField = CSSBorder .class .getDeclaredField ("backgroundImages" );
131+ bgImagesField .setAccessible (true );
132+ Object bgImagesArray = java .lang .reflect .Array .newInstance (bgImageClass , 1 );
133+ java .lang .reflect .Array .set (bgImagesArray , 0 , bgImage );
134+ bgImagesField .set (border , bgImagesArray );
135+
136+ // Verify toCSSString
76137 Assertions .assertTrue (border .toCSSString ().contains ("linear-gradient" ));
77138
139+ // Verify painting
78140 Form f = new Form ();
79141 Component c = new Component () {};
80142 c .setSize (new com .codename1 .ui .geom .Dimension (100 , 100 ));
0 commit comments