package com.kuxhausen.huemore;
import android.support.test.runner.AndroidJUnit4;
import com.kuxhausen.huemore.persistence.FutureEncodingException;
import com.kuxhausen.huemore.persistence.HueUrlEncoder;
import com.kuxhausen.huemore.persistence.InvalidEncodingException;
import com.kuxhausen.huemore.persistence.ManagedBitSet;
import com.kuxhausen.huemore.state.BulbState;
import com.kuxhausen.huemore.state.Event;
import com.kuxhausen.huemore.state.Mood;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
@RunWith(AndroidJUnit4.class)
public class HueUrlEncoderTest {
@Test
public void testEncodeDecode() {
BulbState[] states = new BulbState[10];
for (int i = 0; i < states.length; i++) {
states[i] = new BulbState();
}
states[0].setOn(true);
states[1].set255Bri(44);
states[2].setTransitionTime(33);
states[3].setMiredCT(321);
states[4].setXY(new float[]{.5f, .5f});
states[5].setEffect(BulbState.Effect.NONE);
states[6].setEffect(BulbState.Effect.COLORLOOP);
states[7].setAlert(BulbState.Alert.NONE);
states[8].setAlert(BulbState.Alert.FLASH_ONCE);
states[8].setAlert(BulbState.Alert.FLASH_30SEC);
states[9].setOn(false);
states[9].set255Bri(0);
states[9].setTransitionTime(0);
states[9].setMiredCT(400);
states[9].setXY(new float[]{.1f, .9f});
states[9].setEffect(BulbState.Effect.NONE);
states[9].setAlert(BulbState.Alert.NONE);
try {
for (int i = 0; i < states.length; i++) {
Mood m = new Mood.Builder(states[i]).build();
String encodedM = HueUrlEncoder.encode(m);
Mood decodedM = HueUrlEncoder.decode(encodedM).second.first;
assertEquals(m, decodedM);
}
} catch (InvalidEncodingException e) {
fail();
} catch (FutureEncodingException e) {
fail();
}
}
@Test
public void testFutureEncodingException() {
ManagedBitSet bits = new ManagedBitSet();
bits.addNumber(HueUrlEncoder.PROTOCOL_VERSION_NUMBER + 1, 3);
String encoded = bits.getBase64Encoding();
try {
Mood decodedM = HueUrlEncoder.decode(encoded).second.first;
fail();
} catch (InvalidEncodingException e) {
fail();
} catch (FutureEncodingException e) {
//success
}
}
/* TODO finish
public void testInvalidEncodingExceptionV4() {
ManagedBitSet bits = new ManagedBitSet();
assertInvalidEncoding(bits);
//version number
bits.addNumber(4, 3);
assertInvalidEncoding(bits);
//flag no group
bits.incrementingSet(false);
assertInvalidEncoding(bits);
//flag no brightness
bits.incrementingSet(false);
//TODO add more
} */
private void assertInvalidEncoding(ManagedBitSet mbs) {
try {
String encoded = mbs.getBase64Encoding();
Mood decoded = HueUrlEncoder.decode(encoded).second.first;
fail();
} catch (InvalidEncodingException e) {
//success
} catch (FutureEncodingException e) {
fail();
}
}
/**
* tests Off mood *
*/
@Test
public void functionality1() {
BulbState bs1 = new BulbState();
bs1.setOn(false);
Event e1 = new Event(bs1, 0, 0);
Mood m = new Mood.Builder()
.setEvents(new Event[]{e1})
.build();
String encoded = HueUrlEncoder.encode(m);
String savedEncodedV4 = "AQQAAQAAAAMBAAQAAAA=";
try {
Mood decode = HueUrlEncoder.decode(encoded).second.first;
assertEquals(m, decode);
assertEquals(m, HueUrlEncoder.decode(savedEncodedV4).second.first);
assertEquals(encoded, HueUrlEncoder.encode(decode));
} catch (InvalidEncodingException e) {
fail();
} catch (FutureEncodingException e) {
fail();
}
}
}