[wpilib] Color: Improve string support (#8403)

Now rgb() and color constants are supported.

Changed from constructor to fromString() factory function to enable
directly returning color constant values.
This commit is contained in:
Peter Johnson
2025-11-21 16:41:05 -08:00
committed by GitHub
parent 32fc543dc8
commit e47b4a5c3b
5 changed files with 167 additions and 42 deletions

View File

@@ -55,21 +55,55 @@ class ColorTest {
}
@Test
void testConstructFromHexString() {
var color = new Color("#FF8040");
void testFromHexString() {
var color = Color.fromString("#FF8040");
assertEquals(1.0, color.red, 1e-2);
assertEquals(0.5, color.green, 1e-2);
assertEquals(0.25, color.blue, 1e-2);
// No leading #
assertThrows(IllegalArgumentException.class, () -> new Color("112233"));
assertThrows(IllegalArgumentException.class, () -> Color.fromString("112233"));
// Too long
assertThrows(IllegalArgumentException.class, () -> new Color("#11223344"));
assertThrows(IllegalArgumentException.class, () -> Color.fromString("#11223344"));
// Invalid hex characters
assertThrows(IllegalArgumentException.class, () -> new Color("#$$$$$$"));
assertThrows(IllegalArgumentException.class, () -> Color.fromString("#$$$$$$"));
}
@Test
void testFromRGBString() {
var color = Color.fromString("rgb(255,128,64)");
assertEquals(1.0, color.red, 1e-2);
assertEquals(0.5, color.green, 1e-2);
assertEquals(0.25, color.blue, 1e-2);
// Wrong number of components
assertThrows(IllegalArgumentException.class, () -> Color.fromString("rgb(255,128)"));
// Invalid integer
assertThrows(IllegalArgumentException.class, () -> Color.fromString("rgb(255,xx,64)"));
}
@Test
void testFromConstantName() {
var color = Color.fromString("red");
assertEquals(1.0, color.red, 1e-2);
assertEquals(0.0, color.green, 1e-2);
assertEquals(0.0, color.blue, 1e-2);
// with k prefix
color = Color.fromString("kRed");
assertEquals(1.0, color.red, 1e-2);
assertEquals(0.0, color.green, 1e-2);
assertEquals(0.0, color.blue, 1e-2);
// Unknown name
assertThrows(IllegalArgumentException.class, () -> Color.fromString("unknowncolor"));
}
@Test