blob: 0d5922cbbd8f37450f7a62b3bb1056424cb60d90 [file] [log] [blame]
package io.flutter.plugin.common;
import static org.junit.Assert.assertEquals;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.annotation.Config;
@Config(manifest = Config.NONE)
@RunWith(RobolectricTestRunner.class)
public class StandardMessageCodecTest {
// Data types defined as per StandardMessageCodec.Java
// XXX Please consider exposing these so that tests can access them
private static final byte NULL = 0;
private static final byte TRUE = 1;
private static final byte FALSE = 2;
private static final byte INT = 3;
private static final byte LONG = 4;
private static final byte BIGINT = 5;
private static final byte DOUBLE = 6;
private static final byte STRING = 7;
private static final byte BYTE_ARRAY = 8;
private static final byte INT_ARRAY = 9;
private static final byte LONG_ARRAY = 10;
private static final byte DOUBLE_ARRAY = 11;
private static final byte LIST = 12;
private static final byte MAP = 13;
@Test
public void itEncodesNullLiterals() {
// Setup message codec
StandardMessageCodec codec = new StandardMessageCodec();
// Attempt to encode message with a null literal inside a list
// A list with a null is used instead of just a null literal because if
// only null is encoded, then no message is returned; null is returned instead
ArrayList<Object> messageContent = new ArrayList();
messageContent.add(null);
ByteBuffer message = codec.encodeMessage(messageContent);
message.flip();
ByteBuffer expected = ByteBuffer.allocateDirect(3);
expected.put(new byte[] {LIST, 1, NULL});
expected.flip();
assertEquals(expected, message);
}
@Test
public void itEncodesNullObjects() {
// An example class that equals null
class ExampleNullObject {
@Override
public boolean equals(Object other) {
return other == null || other == this;
}
@Override
public int hashCode() {
return 0;
}
}
// Setup message codec
StandardMessageCodec codec = new StandardMessageCodec();
// Same as itEncodesNullLiterals but with objects that equal null instead
ArrayList<Object> messageContent = new ArrayList();
messageContent.add(new ExampleNullObject());
ByteBuffer message = codec.encodeMessage(messageContent);
message.flip();
ByteBuffer expected = ByteBuffer.allocateDirect(3);
expected.put(new byte[] {LIST, 1, NULL});
expected.flip();
assertEquals(expected, message);
}
}