mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-20 00:51:42 +00:00
[wpiutil] Rename Color constants to all caps
This commit is contained in:
@@ -53,19 +53,19 @@ class AddressableLEDBufferTest {
|
||||
@Test
|
||||
void getColorTest() {
|
||||
AddressableLEDBuffer buffer = new AddressableLEDBuffer(4);
|
||||
final Color8Bit denimColor8Bit = new Color8Bit(Color.kDenim);
|
||||
final Color8Bit firstBlueColor8Bit = new Color8Bit(Color.kFirstBlue);
|
||||
final Color8Bit firstRedColor8Bit = new Color8Bit(Color.kFirstRed);
|
||||
final Color8Bit denimColor8Bit = new Color8Bit(Color.DENIM);
|
||||
final Color8Bit firstBlueColor8Bit = new Color8Bit(Color.FIRST_BLUE);
|
||||
final Color8Bit firstRedColor8Bit = new Color8Bit(Color.FIRST_RED);
|
||||
|
||||
buffer.setLED(0, Color.kFirstBlue);
|
||||
buffer.setLED(0, Color.FIRST_BLUE);
|
||||
buffer.setLED(1, denimColor8Bit);
|
||||
buffer.setLED(2, Color.kFirstRed);
|
||||
buffer.setLED(3, Color.kFirstBlue);
|
||||
buffer.setLED(2, Color.FIRST_RED);
|
||||
buffer.setLED(3, Color.FIRST_BLUE);
|
||||
|
||||
assertEquals(Color.kFirstBlue, buffer.getLED(0));
|
||||
assertEquals(Color.kDenim, buffer.getLED(1));
|
||||
assertEquals(Color.kFirstRed, buffer.getLED(2));
|
||||
assertEquals(Color.kFirstBlue, buffer.getLED(3));
|
||||
assertEquals(Color.FIRST_BLUE, buffer.getLED(0));
|
||||
assertEquals(Color.DENIM, buffer.getLED(1));
|
||||
assertEquals(Color.FIRST_RED, buffer.getLED(2));
|
||||
assertEquals(Color.FIRST_BLUE, buffer.getLED(3));
|
||||
assertEquals(firstBlueColor8Bit, buffer.getLED8Bit(0));
|
||||
assertEquals(denimColor8Bit, buffer.getLED8Bit(1));
|
||||
assertEquals(firstRedColor8Bit, buffer.getLED8Bit(2));
|
||||
|
||||
@@ -14,7 +14,7 @@ class AddressableLEDBufferViewTest {
|
||||
void singleLED() {
|
||||
var buffer = new AddressableLEDBuffer(10);
|
||||
var view = new AddressableLEDBufferView(buffer, 5, 5);
|
||||
var color = Color.kAqua;
|
||||
var color = Color.AQUA;
|
||||
view.setLED(0, color);
|
||||
assertEquals(color, buffer.getLED(5));
|
||||
assertEquals(color, view.getLED(0));
|
||||
@@ -24,11 +24,11 @@ class AddressableLEDBufferViewTest {
|
||||
void segment() {
|
||||
var buffer = new AddressableLEDBuffer(10);
|
||||
var view = new AddressableLEDBufferView(buffer, 2, 8);
|
||||
view.setLED(0, Color.kAqua);
|
||||
assertEquals(Color.kAqua, buffer.getLED(2));
|
||||
view.setLED(0, Color.AQUA);
|
||||
assertEquals(Color.AQUA, buffer.getLED(2));
|
||||
|
||||
view.setLED(6, Color.kAzure);
|
||||
assertEquals(Color.kAzure, buffer.getLED(8));
|
||||
view.setLED(6, Color.AZURE);
|
||||
assertEquals(Color.AZURE, buffer.getLED(8));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -37,33 +37,33 @@ class AddressableLEDBufferViewTest {
|
||||
var view = new AddressableLEDBufferView(buffer, 8, 2);
|
||||
|
||||
// LED 0 in the view should write to LED 8 on the real buffer
|
||||
view.setLED(0, Color.kAqua);
|
||||
assertEquals(Color.kAqua, buffer.getLED(8));
|
||||
view.setLED(0, Color.AQUA);
|
||||
assertEquals(Color.AQUA, buffer.getLED(8));
|
||||
|
||||
// .. and LED 6 in the view should write to LED 2 on the real buffer
|
||||
view.setLED(6, Color.kAzure);
|
||||
assertEquals(Color.kAzure, buffer.getLED(2));
|
||||
view.setLED(6, Color.AZURE);
|
||||
assertEquals(Color.AZURE, buffer.getLED(2));
|
||||
}
|
||||
|
||||
@Test
|
||||
void fullManualReversed() {
|
||||
var buffer = new AddressableLEDBuffer(10);
|
||||
var view = new AddressableLEDBufferView(buffer, 9, 0);
|
||||
view.setLED(0, Color.kWhite);
|
||||
assertEquals(Color.kWhite, buffer.getLED(9));
|
||||
view.setLED(0, Color.WHITE);
|
||||
assertEquals(Color.WHITE, buffer.getLED(9));
|
||||
|
||||
buffer.setLED(8, Color.kRed);
|
||||
assertEquals(Color.kRed, view.getLED(1));
|
||||
buffer.setLED(8, Color.RED);
|
||||
assertEquals(Color.RED, view.getLED(1));
|
||||
}
|
||||
|
||||
@Test
|
||||
void reversed() {
|
||||
var buffer = new AddressableLEDBuffer(10);
|
||||
var view = new AddressableLEDBufferView(buffer, 0, 9).reversed();
|
||||
view.setLED(0, Color.kWhite);
|
||||
assertEquals(Color.kWhite, buffer.getLED(9));
|
||||
view.setLED(0, Color.WHITE);
|
||||
assertEquals(Color.WHITE, buffer.getLED(9));
|
||||
|
||||
view.setLED(9, Color.kRed);
|
||||
assertEquals(Color.kRed, buffer.getLED(0));
|
||||
view.setLED(9, Color.RED);
|
||||
assertEquals(Color.RED, buffer.getLED(0));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,16 +16,17 @@ import static org.wpilib.units.Units.Microseconds;
|
||||
import static org.wpilib.units.Units.Percent;
|
||||
import static org.wpilib.units.Units.Seconds;
|
||||
import static org.wpilib.units.Units.Value;
|
||||
import static org.wpilib.util.Color.kBlack;
|
||||
import static org.wpilib.util.Color.kBlue;
|
||||
import static org.wpilib.util.Color.kGreen;
|
||||
import static org.wpilib.util.Color.kLime;
|
||||
import static org.wpilib.util.Color.kMagenta;
|
||||
import static org.wpilib.util.Color.kMidnightBlue;
|
||||
import static org.wpilib.util.Color.kPurple;
|
||||
import static org.wpilib.util.Color.kRed;
|
||||
import static org.wpilib.util.Color.kWhite;
|
||||
import static org.wpilib.util.Color.kYellow;
|
||||
import static org.wpilib.util.Color.BLACK;
|
||||
import static org.wpilib.util.Color.BLUE;
|
||||
import static org.wpilib.util.Color.GREEN;
|
||||
import static org.wpilib.util.Color.LIME;
|
||||
import static org.wpilib.util.Color.MAGENTA;
|
||||
import static org.wpilib.util.Color.MIDNIGHT_BLUE;
|
||||
import static org.wpilib.util.Color.PURPLE;
|
||||
import static org.wpilib.util.Color.RED;
|
||||
import static org.wpilib.util.Color.ROSY_BROWN;
|
||||
import static org.wpilib.util.Color.WHITE;
|
||||
import static org.wpilib.util.Color.YELLOW;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
@@ -46,13 +47,13 @@ class LEDPatternTest {
|
||||
for (int led = 0; led < reader.getLength(); led++) {
|
||||
switch (led % 3) {
|
||||
case 0:
|
||||
writer.setLED(led, kWhite);
|
||||
writer.setLED(led, WHITE);
|
||||
break;
|
||||
case 1:
|
||||
writer.setLED(led, kYellow);
|
||||
writer.setLED(led, YELLOW);
|
||||
break;
|
||||
case 2:
|
||||
writer.setLED(led, kPurple);
|
||||
writer.setLED(led, PURPLE);
|
||||
break;
|
||||
default:
|
||||
fail("Bad test setup");
|
||||
@@ -74,12 +75,12 @@ class LEDPatternTest {
|
||||
|
||||
@Test
|
||||
void solidColor() {
|
||||
LEDPattern pattern = LEDPattern.solid(kYellow);
|
||||
LEDPattern pattern = LEDPattern.solid(YELLOW);
|
||||
AddressableLEDBuffer buffer = new AddressableLEDBuffer(99);
|
||||
pattern.applyTo(buffer);
|
||||
|
||||
for (int i = 0; i < buffer.getLength(); i++) {
|
||||
assertEquals(kYellow, buffer.getLED(i));
|
||||
assertEquals(YELLOW, buffer.getLED(i));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -94,74 +95,74 @@ class LEDPatternTest {
|
||||
pattern.applyTo(buffer);
|
||||
|
||||
for (int i = 0; i < buffer.getLength(); i++) {
|
||||
assertEquals(kBlack, buffer.getLED(i));
|
||||
assertEquals(BLACK, buffer.getLED(i));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
void gradient1SetsToSolid() {
|
||||
LEDPattern pattern = LEDPattern.gradient(kContinuous, kYellow);
|
||||
LEDPattern pattern = LEDPattern.gradient(kContinuous, YELLOW);
|
||||
|
||||
AddressableLEDBuffer buffer = new AddressableLEDBuffer(99);
|
||||
pattern.applyTo(buffer);
|
||||
|
||||
for (int i = 0; i < buffer.getLength(); i++) {
|
||||
assertEquals(kYellow, buffer.getLED(i));
|
||||
assertEquals(YELLOW, buffer.getLED(i));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
void continuousGradient2Colors() {
|
||||
LEDPattern pattern = LEDPattern.gradient(kContinuous, kYellow, kPurple);
|
||||
LEDPattern pattern = LEDPattern.gradient(kContinuous, YELLOW, PURPLE);
|
||||
|
||||
AddressableLEDBuffer buffer = new AddressableLEDBuffer(99);
|
||||
pattern.applyTo(buffer);
|
||||
|
||||
assertColorEquals(kYellow, buffer.getLED(0));
|
||||
assertColorEquals(Color.lerpRGB(kYellow, kPurple, 25 / 49.0), buffer.getLED(25));
|
||||
assertColorEquals(kPurple, buffer.getLED(49));
|
||||
assertColorEquals(Color.lerpRGB(kYellow, kPurple, 25 / 49.0), buffer.getLED(73));
|
||||
assertColorEquals(kYellow, buffer.getLED(98));
|
||||
assertColorEquals(YELLOW, buffer.getLED(0));
|
||||
assertColorEquals(Color.lerpRGB(YELLOW, PURPLE, 25 / 49.0), buffer.getLED(25));
|
||||
assertColorEquals(PURPLE, buffer.getLED(49));
|
||||
assertColorEquals(Color.lerpRGB(YELLOW, PURPLE, 25 / 49.0), buffer.getLED(73));
|
||||
assertColorEquals(YELLOW, buffer.getLED(98));
|
||||
}
|
||||
|
||||
@Test
|
||||
void discontinuousGradient2Colors() {
|
||||
LEDPattern pattern = LEDPattern.gradient(kDiscontinuous, kYellow, kPurple);
|
||||
LEDPattern pattern = LEDPattern.gradient(kDiscontinuous, YELLOW, PURPLE);
|
||||
|
||||
AddressableLEDBuffer buffer = new AddressableLEDBuffer(99);
|
||||
pattern.applyTo(buffer);
|
||||
|
||||
assertColorEquals(kYellow, buffer.getLED(0));
|
||||
assertColorEquals(Color.lerpRGB(kYellow, kPurple, 0.5), buffer.getLED(49));
|
||||
assertColorEquals(kPurple, buffer.getLED(98));
|
||||
assertColorEquals(YELLOW, buffer.getLED(0));
|
||||
assertColorEquals(Color.lerpRGB(YELLOW, PURPLE, 0.5), buffer.getLED(49));
|
||||
assertColorEquals(PURPLE, buffer.getLED(98));
|
||||
}
|
||||
|
||||
@Test
|
||||
void gradient3Colors() {
|
||||
LEDPattern pattern = LEDPattern.gradient(kContinuous, kYellow, kPurple, kWhite);
|
||||
LEDPattern pattern = LEDPattern.gradient(kContinuous, YELLOW, PURPLE, WHITE);
|
||||
AddressableLEDBuffer buffer = new AddressableLEDBuffer(99);
|
||||
pattern.applyTo(buffer);
|
||||
|
||||
assertColorEquals(kYellow, buffer.getLED(0));
|
||||
assertColorEquals(Color.lerpRGB(kYellow, kPurple, 25.0 / 33.0), buffer.getLED(25));
|
||||
assertColorEquals(kPurple, buffer.getLED(33));
|
||||
assertColorEquals(Color.lerpRGB(kPurple, kWhite, 25.0 / 33.0), buffer.getLED(58));
|
||||
assertColorEquals(kWhite, buffer.getLED(66));
|
||||
assertColorEquals(Color.lerpRGB(kWhite, kYellow, 25.0 / 33.0), buffer.getLED(91));
|
||||
assertColorEquals(Color.lerpRGB(kWhite, kYellow, 32.0 / 33.0), buffer.getLED(98));
|
||||
assertColorEquals(YELLOW, buffer.getLED(0));
|
||||
assertColorEquals(Color.lerpRGB(YELLOW, PURPLE, 25.0 / 33.0), buffer.getLED(25));
|
||||
assertColorEquals(PURPLE, buffer.getLED(33));
|
||||
assertColorEquals(Color.lerpRGB(PURPLE, WHITE, 25.0 / 33.0), buffer.getLED(58));
|
||||
assertColorEquals(WHITE, buffer.getLED(66));
|
||||
assertColorEquals(Color.lerpRGB(WHITE, YELLOW, 25.0 / 33.0), buffer.getLED(91));
|
||||
assertColorEquals(Color.lerpRGB(WHITE, YELLOW, 32.0 / 33.0), buffer.getLED(98));
|
||||
}
|
||||
|
||||
@Test
|
||||
void discontinuousGradient3Colors() {
|
||||
LEDPattern pattern = LEDPattern.gradient(kDiscontinuous, kYellow, kPurple, kWhite);
|
||||
LEDPattern pattern = LEDPattern.gradient(kDiscontinuous, YELLOW, PURPLE, WHITE);
|
||||
AddressableLEDBuffer buffer = new AddressableLEDBuffer(101);
|
||||
pattern.applyTo(buffer);
|
||||
|
||||
assertColorEquals(kYellow, buffer.getLED(0));
|
||||
assertColorEquals(Color.lerpRGB(kYellow, kPurple, 0.5), buffer.getLED(25));
|
||||
assertColorEquals(kPurple, buffer.getLED(50));
|
||||
assertColorEquals(Color.lerpRGB(kPurple, kWhite, 0.5), buffer.getLED(75));
|
||||
assertColorEquals(kWhite, buffer.getLED(100));
|
||||
assertColorEquals(YELLOW, buffer.getLED(0));
|
||||
assertColorEquals(Color.lerpRGB(YELLOW, PURPLE, 0.5), buffer.getLED(25));
|
||||
assertColorEquals(PURPLE, buffer.getLED(50));
|
||||
assertColorEquals(Color.lerpRGB(PURPLE, WHITE, 0.5), buffer.getLED(75));
|
||||
assertColorEquals(WHITE, buffer.getLED(100));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -175,36 +176,36 @@ class LEDPatternTest {
|
||||
|
||||
pattern.applyTo(buffer);
|
||||
for (int i = 0; i < 99; i++) {
|
||||
assertColorEquals(kBlack, buffer.getLED(i));
|
||||
assertColorEquals(BLACK, buffer.getLED(i));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
void step1SetsToSolid() {
|
||||
LEDPattern pattern = LEDPattern.steps(Map.of(0.0, kYellow));
|
||||
LEDPattern pattern = LEDPattern.steps(Map.of(0.0, YELLOW));
|
||||
|
||||
AddressableLEDBuffer buffer = new AddressableLEDBuffer(99);
|
||||
|
||||
pattern.applyTo(buffer);
|
||||
for (int i = 0; i < 99; i++) {
|
||||
assertColorEquals(kYellow, buffer.getLED(i));
|
||||
assertColorEquals(YELLOW, buffer.getLED(i));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
void step1HalfSetsToHalfOffHalfColor() {
|
||||
LEDPattern pattern = LEDPattern.steps(Map.of(0.50, kYellow));
|
||||
LEDPattern pattern = LEDPattern.steps(Map.of(0.50, YELLOW));
|
||||
|
||||
AddressableLEDBuffer buffer = new AddressableLEDBuffer(99);
|
||||
pattern.applyTo(buffer);
|
||||
|
||||
// [0, 48] should be black...
|
||||
for (int i = 0; i < 49; i++) {
|
||||
assertColorEquals(kBlack, buffer.getLED(i));
|
||||
assertColorEquals(BLACK, buffer.getLED(i));
|
||||
}
|
||||
// ... and [49, <end>] should be the color that was set
|
||||
for (int i = 49; i < buffer.getLength(); i++) {
|
||||
assertColorEquals(kYellow, buffer.getLED(i));
|
||||
assertColorEquals(YELLOW, buffer.getLED(i));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -428,11 +429,11 @@ class LEDPatternTest {
|
||||
void reverseSolid() {
|
||||
var buffer = new AddressableLEDBuffer(90);
|
||||
|
||||
var pattern = LEDPattern.solid(Color.kRosyBrown).reversed();
|
||||
var pattern = LEDPattern.solid(ROSY_BROWN).reversed();
|
||||
pattern.applyTo(buffer);
|
||||
|
||||
for (int led = 0; led < buffer.getLength(); led++) {
|
||||
assertColorEquals(Color.kRosyBrown, buffer.getLED(led));
|
||||
assertColorEquals(ROSY_BROWN, buffer.getLED(led));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -440,15 +441,15 @@ class LEDPatternTest {
|
||||
void reverseSteps() {
|
||||
var buffer = new AddressableLEDBuffer(100);
|
||||
|
||||
var pattern = LEDPattern.steps(Map.of(0, kWhite, 0.5, kYellow)).reversed();
|
||||
var pattern = LEDPattern.steps(Map.of(0, WHITE, 0.5, YELLOW)).reversed();
|
||||
pattern.applyTo(buffer);
|
||||
|
||||
// colors should be swapped; yellow first, then white
|
||||
for (int led = 0; led < buffer.getLength(); led++) {
|
||||
if (led < 50) {
|
||||
assertColorEquals(kYellow, buffer.getLED(led));
|
||||
assertColorEquals(YELLOW, buffer.getLED(led));
|
||||
} else {
|
||||
assertColorEquals(kWhite, buffer.getLED(led));
|
||||
assertColorEquals(WHITE, buffer.getLED(led));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -465,13 +466,13 @@ class LEDPatternTest {
|
||||
Color color = buffer.getLED(led);
|
||||
switch (led % 3) {
|
||||
case 0:
|
||||
assertColorEquals(kPurple, color);
|
||||
assertColorEquals(PURPLE, color);
|
||||
break;
|
||||
case 1:
|
||||
assertColorEquals(kWhite, color);
|
||||
assertColorEquals(WHITE, color);
|
||||
break;
|
||||
case 2:
|
||||
assertColorEquals(kYellow, color);
|
||||
assertColorEquals(YELLOW, color);
|
||||
break;
|
||||
default:
|
||||
fail("Bad test setup");
|
||||
@@ -492,13 +493,13 @@ class LEDPatternTest {
|
||||
Color color = buffer.getLED(led);
|
||||
switch (led % 3) {
|
||||
case 0:
|
||||
assertColorEquals(kYellow, color);
|
||||
assertColorEquals(YELLOW, color);
|
||||
break;
|
||||
case 1:
|
||||
assertColorEquals(kPurple, color);
|
||||
assertColorEquals(PURPLE, color);
|
||||
break;
|
||||
case 2:
|
||||
assertColorEquals(kWhite, color);
|
||||
assertColorEquals(WHITE, color);
|
||||
break;
|
||||
default:
|
||||
fail("Bad test setup");
|
||||
@@ -519,13 +520,13 @@ class LEDPatternTest {
|
||||
Color color = buffer.getLED(led);
|
||||
switch (led % 3) {
|
||||
case 0:
|
||||
assertColorEquals(kWhite, color);
|
||||
assertColorEquals(WHITE, color);
|
||||
break;
|
||||
case 1:
|
||||
assertColorEquals(kYellow, color);
|
||||
assertColorEquals(YELLOW, color);
|
||||
break;
|
||||
case 2:
|
||||
assertColorEquals(kPurple, color);
|
||||
assertColorEquals(PURPLE, color);
|
||||
break;
|
||||
default:
|
||||
fail("Bad test setup");
|
||||
@@ -537,7 +538,7 @@ class LEDPatternTest {
|
||||
@Test
|
||||
void blinkSymmetric() {
|
||||
// on for 2 seconds, off for 2 seconds
|
||||
var pattern = LEDPattern.solid(kWhite).blink(Seconds.of(2));
|
||||
var pattern = LEDPattern.solid(WHITE).blink(Seconds.of(2));
|
||||
|
||||
var buffer = new AddressableLEDBuffer(1);
|
||||
|
||||
@@ -551,13 +552,13 @@ class LEDPatternTest {
|
||||
case 1:
|
||||
case 4:
|
||||
case 5:
|
||||
assertColorEquals(kWhite, color);
|
||||
assertColorEquals(WHITE, color);
|
||||
break;
|
||||
case 2:
|
||||
case 3:
|
||||
case 6:
|
||||
case 7:
|
||||
assertColorEquals(kBlack, color);
|
||||
assertColorEquals(BLACK, color);
|
||||
break;
|
||||
default:
|
||||
fail("Bad test setup");
|
||||
@@ -569,7 +570,7 @@ class LEDPatternTest {
|
||||
@Test
|
||||
void blinkAsymmetric() {
|
||||
// on for 3 seconds, off for 1 second
|
||||
var pattern = LEDPattern.solid(kWhite).blink(Seconds.of(3), Seconds.of(1));
|
||||
var pattern = LEDPattern.solid(WHITE).blink(Seconds.of(3), Seconds.of(1));
|
||||
|
||||
var buffer = new AddressableLEDBuffer(1);
|
||||
|
||||
@@ -585,11 +586,11 @@ class LEDPatternTest {
|
||||
case 4:
|
||||
case 5:
|
||||
case 6: // second period
|
||||
assertColorEquals(kWhite, color);
|
||||
assertColorEquals(WHITE, color);
|
||||
break;
|
||||
case 3:
|
||||
case 7:
|
||||
assertColorEquals(kBlack, color);
|
||||
assertColorEquals(BLACK, color);
|
||||
break;
|
||||
default:
|
||||
fail("Bad test setup");
|
||||
@@ -601,34 +602,34 @@ class LEDPatternTest {
|
||||
@Test
|
||||
void blinkInSync() {
|
||||
AtomicBoolean condition = new AtomicBoolean(false);
|
||||
var pattern = LEDPattern.solid(kWhite).synchronizedBlink(condition::get);
|
||||
var pattern = LEDPattern.solid(WHITE).synchronizedBlink(condition::get);
|
||||
|
||||
var buffer = new AddressableLEDBuffer(1);
|
||||
|
||||
pattern.applyTo(buffer);
|
||||
assertColorEquals(kBlack, buffer.getLED(0));
|
||||
assertColorEquals(BLACK, buffer.getLED(0));
|
||||
|
||||
condition.set(true);
|
||||
pattern.applyTo(buffer);
|
||||
assertColorEquals(kWhite, buffer.getLED(0));
|
||||
assertColorEquals(WHITE, buffer.getLED(0));
|
||||
|
||||
condition.set(false);
|
||||
pattern.applyTo(buffer);
|
||||
assertColorEquals(kBlack, buffer.getLED(0));
|
||||
assertColorEquals(BLACK, buffer.getLED(0));
|
||||
}
|
||||
|
||||
@Test
|
||||
void breathe() {
|
||||
final Color midGray = new Color(0.5, 0.5, 0.5);
|
||||
|
||||
var pattern = LEDPattern.solid(kWhite).breathe(Microseconds.of(4));
|
||||
var pattern = LEDPattern.solid(WHITE).breathe(Microseconds.of(4));
|
||||
|
||||
var buffer = new AddressableLEDBuffer(1);
|
||||
|
||||
{
|
||||
m_mockTime = 0; // start
|
||||
pattern.applyTo(buffer);
|
||||
assertColorEquals(kWhite, buffer.getLED(0));
|
||||
assertColorEquals(WHITE, buffer.getLED(0));
|
||||
}
|
||||
|
||||
{
|
||||
@@ -640,7 +641,7 @@ class LEDPatternTest {
|
||||
{
|
||||
m_mockTime = 2; // bottom
|
||||
pattern.applyTo(buffer);
|
||||
assertColorEquals(kBlack, buffer.getLED(0));
|
||||
assertColorEquals(BLACK, buffer.getLED(0));
|
||||
}
|
||||
|
||||
{
|
||||
@@ -652,24 +653,24 @@ class LEDPatternTest {
|
||||
{
|
||||
m_mockTime = 4; // back to start
|
||||
pattern.applyTo(buffer);
|
||||
assertColorEquals(kWhite, buffer.getLED(0));
|
||||
assertColorEquals(WHITE, buffer.getLED(0));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
void overlaySolidOnSolid() {
|
||||
var overlay = LEDPattern.solid(kYellow).overlayOn(LEDPattern.solid(kWhite));
|
||||
var overlay = LEDPattern.solid(YELLOW).overlayOn(LEDPattern.solid(WHITE));
|
||||
|
||||
var buffer = new AddressableLEDBuffer(1);
|
||||
overlay.applyTo(buffer);
|
||||
|
||||
assertColorEquals(kYellow, buffer.getLED(0));
|
||||
assertColorEquals(YELLOW, buffer.getLED(0));
|
||||
}
|
||||
|
||||
@Test
|
||||
void overlayNearlyBlack() {
|
||||
Color overlayColor = new Color(new Color8Bit(1, 0, 0));
|
||||
var overlay = LEDPattern.solid(overlayColor).overlayOn(LEDPattern.solid(kWhite));
|
||||
var overlay = LEDPattern.solid(overlayColor).overlayOn(LEDPattern.solid(WHITE));
|
||||
|
||||
var buffer = new AddressableLEDBuffer(1);
|
||||
overlay.applyTo(buffer);
|
||||
@@ -680,19 +681,19 @@ class LEDPatternTest {
|
||||
@Test
|
||||
void overlayMixed() {
|
||||
var overlay =
|
||||
LEDPattern.steps(Map.of(0, kYellow, 0.5, kBlack)).overlayOn(LEDPattern.solid(kWhite));
|
||||
LEDPattern.steps(Map.of(0, YELLOW, 0.5, BLACK)).overlayOn(LEDPattern.solid(WHITE));
|
||||
|
||||
var buffer = new AddressableLEDBuffer(2);
|
||||
overlay.applyTo(buffer);
|
||||
|
||||
assertColorEquals(kYellow, buffer.getLED(0));
|
||||
assertColorEquals(kWhite, buffer.getLED(1));
|
||||
assertColorEquals(YELLOW, buffer.getLED(0));
|
||||
assertColorEquals(WHITE, buffer.getLED(1));
|
||||
}
|
||||
|
||||
@Test
|
||||
void blend() {
|
||||
var pattern1 = LEDPattern.solid(kBlue);
|
||||
var pattern2 = LEDPattern.solid(kRed);
|
||||
var pattern1 = LEDPattern.solid(BLUE);
|
||||
var pattern2 = LEDPattern.solid(RED);
|
||||
var blend = pattern1.blend(pattern2);
|
||||
|
||||
var buffer = new AddressableLEDBuffer(1);
|
||||
@@ -707,7 +708,7 @@ class LEDPatternTest {
|
||||
Color color = new Color(123, 123, 123);
|
||||
var base = LEDPattern.solid(color);
|
||||
// first 50% mask on, last 50% mask off
|
||||
var mask = LEDPattern.steps(Map.of(0, kWhite, 0.5, kBlack));
|
||||
var mask = LEDPattern.steps(Map.of(0, WHITE, 0.5, BLACK));
|
||||
var masked = base.mask(mask);
|
||||
|
||||
var buffer = new AddressableLEDBuffer(10);
|
||||
@@ -718,7 +719,7 @@ class LEDPatternTest {
|
||||
}
|
||||
|
||||
for (int i = 5; i < 10; i++) {
|
||||
assertColorEquals(kBlack, buffer.getLED(i));
|
||||
assertColorEquals(BLACK, buffer.getLED(i));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -728,8 +729,7 @@ class LEDPatternTest {
|
||||
Color halfGray = new Color(0.5, 0.5, 0.5);
|
||||
var base = LEDPattern.solid(baseColor);
|
||||
|
||||
var mask =
|
||||
LEDPattern.steps(Map.of(0, kRed, 0.2, kLime, 0.4, kBlue, 0.6, halfGray, 0.8, kWhite));
|
||||
var mask = LEDPattern.steps(Map.of(0, RED, 0.2, LIME, 0.4, BLUE, 0.6, halfGray, 0.8, WHITE));
|
||||
|
||||
var masked = base.mask(mask);
|
||||
|
||||
@@ -759,14 +759,14 @@ class LEDPatternTest {
|
||||
int lastMaskedLED = (int) (t * 100);
|
||||
for (int i = 0; i < lastMaskedLED; i++) {
|
||||
assertColorEquals(
|
||||
kWhite,
|
||||
WHITE,
|
||||
buffer.getLED(i),
|
||||
"Progress " + lastMaskedLED + "%, LED " + i + " should be WHITE");
|
||||
}
|
||||
|
||||
for (int i = lastMaskedLED; i < 100; i++) {
|
||||
assertColorEquals(
|
||||
kBlack,
|
||||
BLACK,
|
||||
buffer.getLED(i),
|
||||
"Progress " + lastMaskedLED + "% , LED " + i + " should be BLACK");
|
||||
}
|
||||
@@ -775,87 +775,87 @@ class LEDPatternTest {
|
||||
|
||||
@Test
|
||||
void zeroBrightness() {
|
||||
var pattern = LEDPattern.solid(kRed).atBrightness(Percent.of(0));
|
||||
var pattern = LEDPattern.solid(RED).atBrightness(Percent.of(0));
|
||||
var buffer = new AddressableLEDBuffer(1);
|
||||
pattern.applyTo(buffer);
|
||||
|
||||
assertColorEquals(kBlack, buffer.getLED(0));
|
||||
assertColorEquals(BLACK, buffer.getLED(0));
|
||||
}
|
||||
|
||||
@Test
|
||||
void sameBrightness() {
|
||||
var pattern = LEDPattern.solid(kMagenta).atBrightness(Percent.of(100));
|
||||
var pattern = LEDPattern.solid(MAGENTA).atBrightness(Percent.of(100));
|
||||
var buffer = new AddressableLEDBuffer(1);
|
||||
pattern.applyTo(buffer);
|
||||
|
||||
assertColorEquals(kMagenta, buffer.getLED(0));
|
||||
assertColorEquals(MAGENTA, buffer.getLED(0));
|
||||
}
|
||||
|
||||
@Test
|
||||
void higherBrightness() {
|
||||
var pattern = LEDPattern.solid(kMagenta).atBrightness(Value.of(4 / 3.0));
|
||||
var pattern = LEDPattern.solid(MAGENTA).atBrightness(Value.of(4 / 3.0));
|
||||
var buffer = new AddressableLEDBuffer(1);
|
||||
pattern.applyTo(buffer);
|
||||
|
||||
assertColorEquals(kMagenta, buffer.getLED(0));
|
||||
assertColorEquals(MAGENTA, buffer.getLED(0));
|
||||
}
|
||||
|
||||
@Test
|
||||
void negativeBrightness() {
|
||||
var pattern = LEDPattern.solid(kWhite).atBrightness(Percent.of(-1000));
|
||||
var pattern = LEDPattern.solid(WHITE).atBrightness(Percent.of(-1000));
|
||||
var buffer = new AddressableLEDBuffer(1);
|
||||
pattern.applyTo(buffer);
|
||||
|
||||
assertColorEquals(kBlack, buffer.getLED(0));
|
||||
assertColorEquals(BLACK, buffer.getLED(0));
|
||||
}
|
||||
|
||||
@Test
|
||||
void clippingBrightness() {
|
||||
var pattern = LEDPattern.solid(kMidnightBlue).atBrightness(Percent.of(10000));
|
||||
var pattern = LEDPattern.solid(MIDNIGHT_BLUE).atBrightness(Percent.of(10000));
|
||||
var buffer = new AddressableLEDBuffer(1);
|
||||
pattern.applyTo(buffer);
|
||||
|
||||
assertColorEquals(kWhite, buffer.getLED(0));
|
||||
assertColorEquals(WHITE, buffer.getLED(0));
|
||||
}
|
||||
|
||||
@Test
|
||||
void reverseMask() {
|
||||
var pattern =
|
||||
LEDPattern.steps(Map.of(0, kRed, 0.25, kBlue, 0.5, kYellow, 0.75, kGreen))
|
||||
.mask(LEDPattern.steps(Map.of(0, kWhite, 0.5, kBlack)))
|
||||
LEDPattern.steps(Map.of(0, RED, 0.25, BLUE, 0.5, YELLOW, 0.75, GREEN))
|
||||
.mask(LEDPattern.steps(Map.of(0, WHITE, 0.5, BLACK)))
|
||||
.reversed();
|
||||
var buffer = new AddressableLEDBuffer(8);
|
||||
|
||||
pattern.applyTo(buffer);
|
||||
|
||||
assertColorEquals(kRed, buffer.getLED(7));
|
||||
assertColorEquals(kRed, buffer.getLED(6));
|
||||
assertColorEquals(kBlue, buffer.getLED(5));
|
||||
assertColorEquals(kBlue, buffer.getLED(4));
|
||||
assertColorEquals(kBlack, buffer.getLED(3));
|
||||
assertColorEquals(kBlack, buffer.getLED(2));
|
||||
assertColorEquals(kBlack, buffer.getLED(1));
|
||||
assertColorEquals(kBlack, buffer.getLED(0));
|
||||
assertColorEquals(RED, buffer.getLED(7));
|
||||
assertColorEquals(RED, buffer.getLED(6));
|
||||
assertColorEquals(BLUE, buffer.getLED(5));
|
||||
assertColorEquals(BLUE, buffer.getLED(4));
|
||||
assertColorEquals(BLACK, buffer.getLED(3));
|
||||
assertColorEquals(BLACK, buffer.getLED(2));
|
||||
assertColorEquals(BLACK, buffer.getLED(1));
|
||||
assertColorEquals(BLACK, buffer.getLED(0));
|
||||
}
|
||||
|
||||
@Test
|
||||
void offsetMask() {
|
||||
var pattern =
|
||||
LEDPattern.steps(Map.of(0, kRed, 0.25, kBlue, 0.5, kYellow, 0.75, kGreen))
|
||||
.mask(LEDPattern.steps(Map.of(0, kWhite, 0.5, kBlack)))
|
||||
LEDPattern.steps(Map.of(0, RED, 0.25, BLUE, 0.5, YELLOW, 0.75, GREEN))
|
||||
.mask(LEDPattern.steps(Map.of(0, WHITE, 0.5, BLACK)))
|
||||
.offsetBy(4);
|
||||
var buffer = new AddressableLEDBuffer(8);
|
||||
|
||||
pattern.applyTo(buffer);
|
||||
|
||||
assertColorEquals(kBlack, buffer.getLED(0));
|
||||
assertColorEquals(kBlack, buffer.getLED(1));
|
||||
assertColorEquals(kBlack, buffer.getLED(2));
|
||||
assertColorEquals(kBlack, buffer.getLED(3));
|
||||
assertColorEquals(kRed, buffer.getLED(4));
|
||||
assertColorEquals(kRed, buffer.getLED(5));
|
||||
assertColorEquals(kBlue, buffer.getLED(6));
|
||||
assertColorEquals(kBlue, buffer.getLED(7));
|
||||
assertColorEquals(BLACK, buffer.getLED(0));
|
||||
assertColorEquals(BLACK, buffer.getLED(1));
|
||||
assertColorEquals(BLACK, buffer.getLED(2));
|
||||
assertColorEquals(BLACK, buffer.getLED(3));
|
||||
assertColorEquals(RED, buffer.getLED(4));
|
||||
assertColorEquals(RED, buffer.getLED(5));
|
||||
assertColorEquals(BLUE, buffer.getLED(6));
|
||||
assertColorEquals(BLUE, buffer.getLED(7));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -865,61 +865,61 @@ class LEDPatternTest {
|
||||
// [red, red, blue, blue, black, black, black, black]
|
||||
// all scrolling at 1 LED per microsecond
|
||||
var pattern =
|
||||
LEDPattern.steps(Map.of(0, kRed, 0.25, kBlue, 0.5, kYellow, 0.75, kGreen))
|
||||
.mask(LEDPattern.steps(Map.of(0, kWhite, 0.5, kBlack)))
|
||||
LEDPattern.steps(Map.of(0, RED, 0.25, BLUE, 0.5, YELLOW, 0.75, GREEN))
|
||||
.mask(LEDPattern.steps(Map.of(0, WHITE, 0.5, BLACK)))
|
||||
.scrollAtRelativeVelocity(Percent.per(Microsecond).of(12.5));
|
||||
var buffer = new AddressableLEDBuffer(8);
|
||||
|
||||
{
|
||||
m_mockTime = 0; // start
|
||||
pattern.applyTo(buffer);
|
||||
assertColorEquals(kRed, buffer.getLED(0));
|
||||
assertColorEquals(kRed, buffer.getLED(1));
|
||||
assertColorEquals(kBlue, buffer.getLED(2));
|
||||
assertColorEquals(kBlue, buffer.getLED(3));
|
||||
assertColorEquals(kBlack, buffer.getLED(4));
|
||||
assertColorEquals(kBlack, buffer.getLED(5));
|
||||
assertColorEquals(kBlack, buffer.getLED(6));
|
||||
assertColorEquals(kBlack, buffer.getLED(7));
|
||||
assertColorEquals(RED, buffer.getLED(0));
|
||||
assertColorEquals(RED, buffer.getLED(1));
|
||||
assertColorEquals(BLUE, buffer.getLED(2));
|
||||
assertColorEquals(BLUE, buffer.getLED(3));
|
||||
assertColorEquals(BLACK, buffer.getLED(4));
|
||||
assertColorEquals(BLACK, buffer.getLED(5));
|
||||
assertColorEquals(BLACK, buffer.getLED(6));
|
||||
assertColorEquals(BLACK, buffer.getLED(7));
|
||||
}
|
||||
|
||||
{
|
||||
m_mockTime = 1;
|
||||
pattern.applyTo(buffer);
|
||||
assertColorEquals(kBlack, buffer.getLED(0));
|
||||
assertColorEquals(kRed, buffer.getLED(1));
|
||||
assertColorEquals(kRed, buffer.getLED(2));
|
||||
assertColorEquals(kBlue, buffer.getLED(3));
|
||||
assertColorEquals(kBlue, buffer.getLED(4));
|
||||
assertColorEquals(kBlack, buffer.getLED(5));
|
||||
assertColorEquals(kBlack, buffer.getLED(6));
|
||||
assertColorEquals(kBlack, buffer.getLED(7));
|
||||
assertColorEquals(BLACK, buffer.getLED(0));
|
||||
assertColorEquals(RED, buffer.getLED(1));
|
||||
assertColorEquals(RED, buffer.getLED(2));
|
||||
assertColorEquals(BLUE, buffer.getLED(3));
|
||||
assertColorEquals(BLUE, buffer.getLED(4));
|
||||
assertColorEquals(BLACK, buffer.getLED(5));
|
||||
assertColorEquals(BLACK, buffer.getLED(6));
|
||||
assertColorEquals(BLACK, buffer.getLED(7));
|
||||
}
|
||||
|
||||
{
|
||||
m_mockTime = 2;
|
||||
pattern.applyTo(buffer);
|
||||
assertColorEquals(kBlack, buffer.getLED(0));
|
||||
assertColorEquals(kBlack, buffer.getLED(1));
|
||||
assertColorEquals(kRed, buffer.getLED(2));
|
||||
assertColorEquals(kRed, buffer.getLED(3));
|
||||
assertColorEquals(kBlue, buffer.getLED(4));
|
||||
assertColorEquals(kBlue, buffer.getLED(5));
|
||||
assertColorEquals(kBlack, buffer.getLED(6));
|
||||
assertColorEquals(kBlack, buffer.getLED(7));
|
||||
assertColorEquals(BLACK, buffer.getLED(0));
|
||||
assertColorEquals(BLACK, buffer.getLED(1));
|
||||
assertColorEquals(RED, buffer.getLED(2));
|
||||
assertColorEquals(RED, buffer.getLED(3));
|
||||
assertColorEquals(BLUE, buffer.getLED(4));
|
||||
assertColorEquals(BLUE, buffer.getLED(5));
|
||||
assertColorEquals(BLACK, buffer.getLED(6));
|
||||
assertColorEquals(BLACK, buffer.getLED(7));
|
||||
}
|
||||
|
||||
{
|
||||
m_mockTime = 3;
|
||||
pattern.applyTo(buffer);
|
||||
assertColorEquals(kBlack, buffer.getLED(0));
|
||||
assertColorEquals(kBlack, buffer.getLED(1));
|
||||
assertColorEquals(kBlack, buffer.getLED(2));
|
||||
assertColorEquals(kRed, buffer.getLED(3));
|
||||
assertColorEquals(kRed, buffer.getLED(4));
|
||||
assertColorEquals(kBlue, buffer.getLED(5));
|
||||
assertColorEquals(kBlue, buffer.getLED(6));
|
||||
assertColorEquals(kBlack, buffer.getLED(7));
|
||||
assertColorEquals(BLACK, buffer.getLED(0));
|
||||
assertColorEquals(BLACK, buffer.getLED(1));
|
||||
assertColorEquals(BLACK, buffer.getLED(2));
|
||||
assertColorEquals(RED, buffer.getLED(3));
|
||||
assertColorEquals(RED, buffer.getLED(4));
|
||||
assertColorEquals(BLUE, buffer.getLED(5));
|
||||
assertColorEquals(BLUE, buffer.getLED(6));
|
||||
assertColorEquals(BLACK, buffer.getLED(7));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -930,61 +930,61 @@ class LEDPatternTest {
|
||||
// [red, red, blue, blue, black, black, black, black]
|
||||
// all scrolling at 1 LED per microsecond
|
||||
var pattern =
|
||||
LEDPattern.steps(Map.of(0, kRed, 0.25, kBlue, 0.5, kYellow, 0.75, kGreen))
|
||||
.mask(LEDPattern.steps(Map.of(0, kWhite, 0.5, kBlack)))
|
||||
LEDPattern.steps(Map.of(0, RED, 0.25, BLUE, 0.5, YELLOW, 0.75, GREEN))
|
||||
.mask(LEDPattern.steps(Map.of(0, WHITE, 0.5, BLACK)))
|
||||
.scrollAtAbsoluteVelocity(Meters.per(Microsecond).of(1), Meters.one());
|
||||
var buffer = new AddressableLEDBuffer(8);
|
||||
|
||||
{
|
||||
m_mockTime = 0; // start
|
||||
pattern.applyTo(buffer);
|
||||
assertColorEquals(kRed, buffer.getLED(0));
|
||||
assertColorEquals(kRed, buffer.getLED(1));
|
||||
assertColorEquals(kBlue, buffer.getLED(2));
|
||||
assertColorEquals(kBlue, buffer.getLED(3));
|
||||
assertColorEquals(kBlack, buffer.getLED(4));
|
||||
assertColorEquals(kBlack, buffer.getLED(5));
|
||||
assertColorEquals(kBlack, buffer.getLED(6));
|
||||
assertColorEquals(kBlack, buffer.getLED(7));
|
||||
assertColorEquals(RED, buffer.getLED(0));
|
||||
assertColorEquals(RED, buffer.getLED(1));
|
||||
assertColorEquals(BLUE, buffer.getLED(2));
|
||||
assertColorEquals(BLUE, buffer.getLED(3));
|
||||
assertColorEquals(BLACK, buffer.getLED(4));
|
||||
assertColorEquals(BLACK, buffer.getLED(5));
|
||||
assertColorEquals(BLACK, buffer.getLED(6));
|
||||
assertColorEquals(BLACK, buffer.getLED(7));
|
||||
}
|
||||
|
||||
{
|
||||
m_mockTime = 1;
|
||||
pattern.applyTo(buffer);
|
||||
assertColorEquals(kBlack, buffer.getLED(0));
|
||||
assertColorEquals(kRed, buffer.getLED(1));
|
||||
assertColorEquals(kRed, buffer.getLED(2));
|
||||
assertColorEquals(kBlue, buffer.getLED(3));
|
||||
assertColorEquals(kBlue, buffer.getLED(4));
|
||||
assertColorEquals(kBlack, buffer.getLED(5));
|
||||
assertColorEquals(kBlack, buffer.getLED(6));
|
||||
assertColorEquals(kBlack, buffer.getLED(7));
|
||||
assertColorEquals(BLACK, buffer.getLED(0));
|
||||
assertColorEquals(RED, buffer.getLED(1));
|
||||
assertColorEquals(RED, buffer.getLED(2));
|
||||
assertColorEquals(BLUE, buffer.getLED(3));
|
||||
assertColorEquals(BLUE, buffer.getLED(4));
|
||||
assertColorEquals(BLACK, buffer.getLED(5));
|
||||
assertColorEquals(BLACK, buffer.getLED(6));
|
||||
assertColorEquals(BLACK, buffer.getLED(7));
|
||||
}
|
||||
|
||||
{
|
||||
m_mockTime = 2;
|
||||
pattern.applyTo(buffer);
|
||||
assertColorEquals(kBlack, buffer.getLED(0));
|
||||
assertColorEquals(kBlack, buffer.getLED(1));
|
||||
assertColorEquals(kRed, buffer.getLED(2));
|
||||
assertColorEquals(kRed, buffer.getLED(3));
|
||||
assertColorEquals(kBlue, buffer.getLED(4));
|
||||
assertColorEquals(kBlue, buffer.getLED(5));
|
||||
assertColorEquals(kBlack, buffer.getLED(6));
|
||||
assertColorEquals(kBlack, buffer.getLED(7));
|
||||
assertColorEquals(BLACK, buffer.getLED(0));
|
||||
assertColorEquals(BLACK, buffer.getLED(1));
|
||||
assertColorEquals(RED, buffer.getLED(2));
|
||||
assertColorEquals(RED, buffer.getLED(3));
|
||||
assertColorEquals(BLUE, buffer.getLED(4));
|
||||
assertColorEquals(BLUE, buffer.getLED(5));
|
||||
assertColorEquals(BLACK, buffer.getLED(6));
|
||||
assertColorEquals(BLACK, buffer.getLED(7));
|
||||
}
|
||||
|
||||
{
|
||||
m_mockTime = 3;
|
||||
pattern.applyTo(buffer);
|
||||
assertColorEquals(kBlack, buffer.getLED(0));
|
||||
assertColorEquals(kBlack, buffer.getLED(1));
|
||||
assertColorEquals(kBlack, buffer.getLED(2));
|
||||
assertColorEquals(kRed, buffer.getLED(3));
|
||||
assertColorEquals(kRed, buffer.getLED(4));
|
||||
assertColorEquals(kBlue, buffer.getLED(5));
|
||||
assertColorEquals(kBlue, buffer.getLED(6));
|
||||
assertColorEquals(kBlack, buffer.getLED(7));
|
||||
assertColorEquals(BLACK, buffer.getLED(0));
|
||||
assertColorEquals(BLACK, buffer.getLED(1));
|
||||
assertColorEquals(BLACK, buffer.getLED(2));
|
||||
assertColorEquals(RED, buffer.getLED(3));
|
||||
assertColorEquals(RED, buffer.getLED(4));
|
||||
assertColorEquals(BLUE, buffer.getLED(5));
|
||||
assertColorEquals(BLUE, buffer.getLED(6));
|
||||
assertColorEquals(BLACK, buffer.getLED(7));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user