package com.kuxhausen.huemore;
import com.google.gson.Gson;
import android.support.test.runner.AndroidJUnit4;
import com.kuxhausen.huemore.state.BulbState;
import com.kuxhausen.huemore.state.BulbState.Alert;
import com.kuxhausen.huemore.state.BulbState.Effect;
import org.junit.Test;
import org.junit.runner.RunWith;
import static junit.framework.TestCase.assertFalse;
import static org.junit.Assert.assertEquals;
@RunWith(AndroidJUnit4.class)
public class BulbStateTest {
private static final float DELTA = 1e-6f;
@Test
public void testPercentBrightness() {
BulbState bs = new BulbState();
assertEquals(null, bs.getPercentBri());
bs.setPercentBri(39);
assertEquals((Integer) 39, bs.getPercentBri());
bs.setPercentBri(100);
assertEquals((Integer) 100, bs.getPercentBri());
bs.setPercentBri(1);
assertEquals((Integer) 1, bs.getPercentBri());
bs.setPercentBri(200);
assertEquals((Integer) 100, bs.getPercentBri());
bs.setPercentBri(0);
assertEquals((Integer) 1, bs.getPercentBri());
bs.setPercentBri(null);
assertEquals(null, bs.getPercentBri());
}
@Test
public void test256Brightness() {
BulbState bs = new BulbState();
assertEquals(null, bs.get255Bri());
bs.set255Bri(39);
assertEquals((Integer) 39, bs.get255Bri());
bs.set255Bri(255);
assertEquals((Integer) 255, bs.get255Bri());
bs.set255Bri(1);
assertEquals((Integer) 1, bs.get255Bri());
bs.set255Bri(400);
assertEquals((Integer) 255, bs.get255Bri());
bs.set255Bri(0);
assertEquals((Integer) 1, bs.get255Bri());
bs.set255Bri(null);
assertEquals(null, bs.get255Bri());
}
@Test
public void testMiredCT() {
BulbState bs = new BulbState();
assertEquals(null, bs.getMiredCT());
bs.setMiredCT(153);
assertEquals((Integer) 153, bs.getMiredCT());
bs.setMiredCT(500);
assertEquals((Integer) 500, bs.getMiredCT());
bs.setMiredCT(0);
assertEquals((Integer) 1, bs.getMiredCT());
bs.setMiredCT(null);
assertEquals(null, bs.getMiredCT());
}
@Test
public void testKelvinCT() {
BulbState bs = new BulbState();
assertEquals(null, bs.getKelvinCT());
bs.setKelvinCT(6535);
assertEquals((Integer) 6535, bs.getKelvinCT());
bs.setKelvinCT(2000);
assertEquals((Integer) 2000, bs.getKelvinCT());
bs.setKelvinCT(0);
assertEquals((Integer) 1, bs.getKelvinCT());
bs.setKelvinCT(null);
assertEquals(null, bs.getKelvinCT());
}
@Test
public void testXY(){
BulbState bs = new BulbState();
assertEquals(null, bs.getXY());
bs.setXY(new float[]{.2f, .4f});
assertEquals(.2f, bs.getXY()[0], DELTA);
assertEquals(.4f, bs.getXY()[1], DELTA);
// Test the XY array will never be a length other than 2, even if the device sends bad data
Gson gson = new Gson();
String json = "{\"xy\":[0.5]}";
bs = gson.fromJson(json, BulbState.class);
assertEquals(null, bs.getXY());
}
@Test
public void testOn() {
BulbState bs = new BulbState();
assertEquals(null, bs.getOn());
bs.setOn(true);
assertEquals((Boolean) true, bs.getOn());
bs.setOn(false);
assertEquals((Boolean) false, bs.getOn());
bs.setOn(null);
assertEquals(null, bs.getOn());
}
@Test
public void testEffect() {
Gson gson = new Gson();
BulbState bs = new BulbState();
assertEquals(null, bs.getEffect());
bs.setEffect(Effect.NONE);
String json1 = gson.toJson(bs);
assertEquals(Effect.NONE, bs.getEffect());
assertEquals(Effect.NONE, gson.fromJson(json1, BulbState.class).getEffect());
bs.setEffect(Effect.COLORLOOP);
String json2 = gson.toJson(bs);
assertEquals(Effect.COLORLOOP, bs.getEffect());
assertEquals(Effect.COLORLOOP, gson.fromJson(json2, BulbState.class).getEffect());
bs.setEffect(null);
String json3 = gson.toJson(bs);
assertEquals(null, bs.getEffect());
assertEquals(null, gson.fromJson(json3, BulbState.class).getEffect());
}
@Test
public void testAlert() {
Gson gson = new Gson();
BulbState bs = new BulbState();
assertEquals(null, bs.getAlert());
bs.setAlert(Alert.NONE);
String json1 = gson.toJson(bs);
assertEquals(Alert.NONE, bs.getAlert());
assertEquals(Alert.NONE, gson.fromJson(json1, BulbState.class).getAlert());
bs.setAlert(Alert.FLASH_ONCE);
String json2 = gson.toJson(bs);
assertEquals(Alert.FLASH_ONCE, bs.getAlert());
assertEquals(Alert.FLASH_ONCE, gson.fromJson(json2, BulbState.class).getAlert());
bs.setAlert(Alert.FLASH_30SEC);
String json3 = gson.toJson(bs);
assertEquals(Alert.FLASH_30SEC, bs.getAlert());
assertEquals(Alert.FLASH_30SEC, gson.fromJson(json3, BulbState.class).getAlert());
bs.setAlert(null);
String json4 = gson.toJson(bs);
assertEquals(null, bs.getAlert());
assertEquals(null, gson.fromJson(json4, BulbState.class).getAlert());
}
@Test
public void testTransitionTime() {
BulbState bs = new BulbState();
assertEquals(null, bs.getTransitionTime());
bs.setTransitionTime(0);
assertEquals((Integer) 0, bs.getTransitionTime());
bs.setTransitionTime(600);
assertEquals((Integer) 600, bs.getTransitionTime());
bs.setTransitionTime(null);
assertEquals(null, bs.getTransitionTime());
}
@Test
public void testEquals() {
BulbState state1 = new BulbState();
BulbState state2 = new BulbState();
assertEquals(state1, state2);
state1.set255Bri(30);
assertFalse(state1.equals(state2));
state2.set255Bri(70);
assertFalse(state1.equals(state2));
state2.set255Bri(30);
assertEquals(state1, state2);
state1.setEffect(Effect.NONE);
assertFalse(state1.equals(state2));
state2.setEffect(Effect.COLORLOOP);
assertFalse(state1.equals(state2));
state2.setEffect(Effect.NONE);
assertEquals(state1, state2);
state1.setTransitionTime(600);
assertFalse(state1.equals(state2));
state2.setTransitionTime(10);
assertFalse(state1.equals(state2));
state2.setTransitionTime(600);
assertEquals(state1, state2);
state1.setAlert(Alert.FLASH_30SEC);
assertFalse(state1.equals(state2));
state2.setAlert(Alert.NONE);
assertFalse(state1.equals(state2));
state2.setAlert(Alert.FLASH_30SEC);
assertEquals(state1, state2);
state1.setKelvinCT(2500);
assertFalse(state1.equals(state2));
state2.setKelvinCT(6000);
assertFalse(state1.equals(state2));
state2.setKelvinCT(2500);
assertEquals(state1, state2);
state1.setOn(false);
assertFalse(state1.equals(state2));
state2.setOn(true);
assertFalse(state1.equals(state2));
state2.setOn(false);
assertEquals(state1, state2);
state1.setXY(new float[]{.2f, .2f});
assertFalse(state1.equals(state2));
state2.setXY(new float[]{.75f, .2f});
assertFalse(state1.equals(state2));
state2.setXY(new float[]{.2f, .75f});
assertFalse(state1.equals(state2));
state2.setXY(new float[]{.75f, .75f});
assertFalse(state1.equals(state2));
state2.setXY(new float[]{.2f, .2f});
assertEquals(state1, state2);
}
}