/
BrightnessCalibratorTest.java
91 lines (69 loc) 路 3.42 KB
/
BrightnessCalibratorTest.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
package io.lightbeat.hue.visualizer;
import io.lightbeat.config.Config;
import io.lightbeat.config.ConfigNode;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
class BrightnessCalibratorTest {
private static final int MIN_BRIGHTNESS = 0;
private static final int MAX_BRIGHTNESS = 254;
private static final int MEDIAN_BRIGHTNESS = MAX_BRIGHTNESS / 2;
private static final int FADE_DIFFERENCE_BRIGHTNESS = 5;
private static int minBeatBrightness;
private static int maxFadeBrightness;
private BrightnessCalibrator calibrator;
@BeforeAll
static void setUpAll() {
// determine brightness min/max expected brightness values
double multiplier = BrightnessCalibrator.BRIGHTNESS_DIFFERENCE_PERCENTAGE_BASE * FADE_DIFFERENCE_BRIGHTNESS * 2;
minBeatBrightness = (int) Math.round(multiplier * MAX_BRIGHTNESS);
maxFadeBrightness = (int) (MAX_BRIGHTNESS - Math.round(multiplier * MAX_BRIGHTNESS));
}
@BeforeEach
void setUp() {
Config config = mock(Config.class);
when(config.getInt(ConfigNode.BRIGHTNESS_MIN)).thenReturn(MIN_BRIGHTNESS);
when(config.getInt(ConfigNode.BRIGHTNESS_MAX)).thenReturn(MAX_BRIGHTNESS);
when(config.getInt(ConfigNode.BRIGHTNESS_FADE_DIFFERENCE)).thenReturn(FADE_DIFFERENCE_BRIGHTNESS);
calibrator = new BrightnessCalibrator(config);
}
@Test
void getBrightness() {
BrightnessCalibrator.BrightnessData data;
// test calibration phase (brightness at 50%)
for (int i = 0; i < BrightnessCalibrator.CALIBRATION_SIZE - 1; i++) {
data = calibrator.getBrightness(i < BrightnessCalibrator.CALIBRATION_SIZE - 2 ? 0d : 1d);
assertEquals(MEDIAN_BRIGHTNESS, getAverageBrightness(data));
}
// verify that 0d as difference gives us median brightness
data = calibrator.getBrightness(0d);
assertEquals(MEDIAN_BRIGHTNESS, getAverageBrightness(data));
// verify that brightness doesn't change with insignificant amplitude differences
data = calibrator.getBrightness(0.1d);
assertEquals(MEDIAN_BRIGHTNESS, getAverageBrightness(data));
// brightness corrected upwards, difference significant enough
data = calibrator.getBrightness(0.5d);
assertEquals(Math.round(MAX_BRIGHTNESS * 0.725d), getAverageBrightness(data));
// change brightness to max
data = calibrator.getBrightness(1d);
assertEquals(MAX_BRIGHTNESS, data.getBrightness());
assertEquals(maxFadeBrightness, data.getBrightnessFade());
}
@Test
void getLowestBrightnessData() {
BrightnessCalibrator.BrightnessData data = calibrator.getLowestBrightnessData();
assertAll("lowestData",
() -> assertFalse(data.isBrightnessChange()),
() -> assertEquals(MIN_BRIGHTNESS, data.getBrightnessFade()),
() -> assertEquals(minBeatBrightness, data.getBrightness())
);
calibrator.getBrightness(1d);
assertTrue(calibrator.getLowestBrightnessData().isBrightnessChange());
}
private int getAverageBrightness(BrightnessCalibrator.BrightnessData data) {
return (int) Math.round((data.getBrightness() + data.getBrightnessFade()) / 2d);
}
}