@@ -3,20 +3,199 @@ import 'package:flutter_test/flutter_test.dart';
33import 'package:layrz_theme/layrz_theme.dart' ;
44
55void main () {
6- test ('Color.toJson' , () {
7- Color color = const Color (0xFF00FF00 );
8- expect (color.r, 0 );
9- expect (color.g, 1 );
10- expect (color.b, 0 );
11- expect (color.a, 1 );
12- expect (color.toHex (), "#00FF00" );
13-
14- color = color.withValues (alpha: 0.5 );
15- debugPrint (color.toString ());
16- expect (color.r, 0 );
17- expect (color.g, 1 );
18- expect (color.b, 0 );
19- expect (color.a, 0.5 );
20- expect (color.toHexWithAlpha (), "#8000FF00" );
6+ group ('toHex()' , () {
7+ test ('converts black to #000000' , () {
8+ expect (Colors .black.toHex (), '#000000' );
9+ });
10+
11+ test ('converts white to #FFFFFF' , () {
12+ expect (Colors .white.toHex (), '#FFFFFF' );
13+ });
14+
15+ test ('converts kAccentColor (#FF8200)' , () {
16+ const color = Color (0xFFFF8200 );
17+ expect (color.toHex (), '#FF8200' );
18+ });
19+
20+ test ('converts kPrimaryColor (#001e60)' , () {
21+ const color = Color (0xFF001E60 );
22+ expect (color.toHex (), '#001E60' );
23+ });
24+
25+ test ('outputs uppercase hex' , () {
26+ const color = Color (0xFFaabbcc );
27+ expect (color.toHex (), '#AABBCC' );
28+ });
29+
30+ test ('ignores alpha channel' , () {
31+ const color = Color (0x80FF8200 );
32+ expect (color.toHex (), '#FF8200' );
33+ });
34+
35+ test ('hex getter is alias for toHex()' , () {
36+ const color = Color (0xFFFF8200 );
37+ expect (color.hex, color.toHex ());
38+ expect (color.hex, '#FF8200' );
39+ });
40+ });
41+
42+ group ('toHexWithAlpha()' , () {
43+ test ('includes full alpha (#FFFFFFFF for white)' , () {
44+ expect (Colors .white.toHexWithAlpha (), '#FFFFFFFF' );
45+ });
46+
47+ test ('includes zero alpha (#00000000 for transparent)' , () {
48+ const color = Color (0x00000000 );
49+ expect (color.toHexWithAlpha (), '#00000000' );
50+ });
51+
52+ test ('includes partial alpha (#80FF8200)' , () {
53+ const color = Color (0x80FF8200 );
54+ expect (color.toHexWithAlpha (), '#80FF8200' );
55+ });
56+
57+ test ('alpha comes first in AARRGGBB format' , () {
58+ Color color = const Color (0xFF00FF00 );
59+ expect (color.toHexWithAlpha (), '#FF00FF00' );
60+
61+ color = color.withValues (alpha: 0.5 );
62+ expect (color.toHexWithAlpha (), '#8000FF00' );
63+ });
64+
65+ test ('hexWithAlpha getter is alias for toHexWithAlpha()' , () {
66+ const color = Color (0x80FF8200 );
67+ expect (color.hexWithAlpha, color.toHexWithAlpha ());
68+ expect (color.hexWithAlpha, '#80FF8200' );
69+ });
70+ });
71+
72+ group ('toInt()' , () {
73+ test ('converts to ARGB integer' , () {
74+ const color = Color (0xFFFF8200 );
75+ expect (color.toInt (), 0xFFFF8200 );
76+ });
77+
78+ test ('handles alpha channel correctly' , () {
79+ const color = Color (0x80FF8200 );
80+ expect (color.toInt (), 0x80FF8200 );
81+ });
82+
83+ test ('black is 0xFF000000' , () {
84+ expect (Colors .black.toInt (), 0xFF000000 );
85+ });
86+
87+ test ('white is 0xFFFFFFFF' , () {
88+ expect (Colors .white.toInt (), 0xFFFFFFFF );
89+ });
90+
91+ test ('transparent is 0x00000000' , () {
92+ const color = Color (0x00000000 );
93+ expect (color.toInt (), 0x00000000 );
94+ });
95+ });
96+
97+ group ('fromHex()' , () {
98+ test ('parses black #000000' , () {
99+ final color = ThemedColorExtensions .fromHex ('#000000' );
100+ expect (color.toHex (), '#000000' );
101+ });
102+
103+ test ('parses white #FFFFFF' , () {
104+ final color = ThemedColorExtensions .fromHex ('#FFFFFF' );
105+ expect (color.toHex (), '#FFFFFF' );
106+ });
107+
108+ test ('parses accent color #FF8200' , () {
109+ final color = ThemedColorExtensions .fromHex ('#FF8200' );
110+ expect (color.toHex (), '#FF8200' );
111+ });
112+
113+ test ('parses primary color #001E60' , () {
114+ final color = ThemedColorExtensions .fromHex ('#001E60' );
115+ expect (color.toHex (), '#001E60' );
116+ });
117+
118+ test ('parses lowercase hex #ff8200' , () {
119+ final color = ThemedColorExtensions .fromHex ('#ff8200' );
120+ expect (color.toHex (), '#FF8200' );
121+ });
122+
123+ test ('sets alpha to 255 (fully opaque)' , () {
124+ final color = ThemedColorExtensions .fromHex ('#FF8200' );
125+ expect ((color.a * 255.0 ).round (), 255 );
126+ });
127+ });
128+
129+ group ('fromHexWithAlpha()' , () {
130+ test ('parses full alpha #FFFFFFFF' , () {
131+ final color = ThemedColorExtensions .fromHexWithAlpha ('#FFFFFFFF' );
132+ expect (color.toHexWithAlpha (), '#FFFFFFFF' );
133+ expect ((color.a * 255.0 ).round (), 255 );
134+ });
135+
136+ test ('parses zero alpha #00000000' , () {
137+ final color = ThemedColorExtensions .fromHexWithAlpha ('#00000000' );
138+ expect (color.toHexWithAlpha (), '#00000000' );
139+ expect ((color.a * 255.0 ).round (), 0 );
140+ });
141+
142+ test ('parses partial alpha #80FF8200' , () {
143+ final color = ThemedColorExtensions .fromHexWithAlpha ('#80FF8200' );
144+ expect (color.toHexWithAlpha (), '#80FF8200' );
145+ expect ((color.a * 255.0 ).round (), 128 );
146+ });
147+
148+ test ('parses alpha first in AARRGGBB format' , () {
149+ final color = ThemedColorExtensions .fromHexWithAlpha ('#8000FF00' );
150+ expect ((color.r * 255.0 ).round (), 0 );
151+ expect ((color.g * 255.0 ).round (), 255 );
152+ expect ((color.b * 255.0 ).round (), 0 );
153+ expect ((color.a * 255.0 ).round (), 128 );
154+ });
155+ });
156+
157+ group ('Round-trip conversions' , () {
158+ test ('Color -> toHex() -> fromHex() -> Color preserves RGB' , () {
159+ const original = Color (0xFFFF8200 );
160+ final hex = original.toHex ();
161+ final restored = ThemedColorExtensions .fromHex (hex);
162+ expect (restored.toHex (), original.toHex ());
163+ expect ((restored.r * 255.0 ).round (), (original.r * 255.0 ).round ());
164+ expect ((restored.g * 255.0 ).round (), (original.g * 255.0 ).round ());
165+ expect ((restored.b * 255.0 ).round (), (original.b * 255.0 ).round ());
166+ });
167+
168+ test ('Color -> toHexWithAlpha() -> fromHexWithAlpha() -> Color preserves ARGB' , () {
169+ const original = Color (0x80FF8200 );
170+ final hex = original.toHexWithAlpha ();
171+ final restored = ThemedColorExtensions .fromHexWithAlpha (hex);
172+ expect (restored.toHexWithAlpha (), original.toHexWithAlpha ());
173+ expect ((restored.a * 255.0 ).round (), (original.a * 255.0 ).round ());
174+ expect ((restored.r * 255.0 ).round (), (original.r * 255.0 ).round ());
175+ expect ((restored.g * 255.0 ).round (), (original.g * 255.0 ).round ());
176+ expect ((restored.b * 255.0 ).round (), (original.b * 255.0 ).round ());
177+ });
178+
179+ test ('Color -> toInt() -> Color() preserves exact value' , () {
180+ const original = Color (0x80FF8200 );
181+ final intValue = original.toInt ();
182+ final restored = Color (intValue);
183+ expect (restored.toInt (), original.toInt ());
184+ });
185+ });
186+
187+ group ('JSON aliases' , () {
188+ test ('toJson() is equivalent to toHex()' , () {
189+ const color = Color (0xFFFF8200 );
190+ expect (color.toJson (), color.toHex ());
191+ expect (color.toJson (), '#FF8200' );
192+ });
193+
194+ test ('fromJson() is equivalent to fromHex()' , () {
195+ final color1 = ThemedColorExtensions .fromJson ('#FF8200' );
196+ final color2 = ThemedColorExtensions .fromHex ('#FF8200' );
197+ expect (color1.toHex (), color2.toHex ());
198+ expect (color1.toInt (), color2.toInt ());
199+ });
21200 });
22201}
0 commit comments