blob: 5a5358229c15a7566107054184d6336649b17e98 [file] [log] [blame]
package io.flutter.plugins.camera;
import static junit.framework.TestCase.assertNull;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import io.flutter.plugin.common.BinaryMessenger;
import io.flutter.plugin.common.MethodCall;
import io.flutter.plugin.common.StandardMethodCodec;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.junit.Before;
import org.junit.Test;
public class DartMessengerTest {
/** A {@link BinaryMessenger} implementation that does nothing but save its messages. */
private static class FakeBinaryMessenger implements BinaryMessenger {
private BinaryMessageHandler handler;
private final List<ByteBuffer> sentMessages = new ArrayList<>();
@Override
public void send(String channel, ByteBuffer message) {
sentMessages.add(message);
}
@Override
public void send(String channel, ByteBuffer message, BinaryReply callback) {
send(channel, message);
}
@Override
public void setMessageHandler(String channel, BinaryMessageHandler handler) {
this.handler = handler;
}
BinaryMessageHandler getMessageHandler() {
return handler;
}
List<ByteBuffer> getMessages() {
return new ArrayList<>(sentMessages);
}
}
private DartMessenger dartMessenger;
private FakeBinaryMessenger fakeBinaryMessenger;
@Before
public void setUp() {
fakeBinaryMessenger = new FakeBinaryMessenger();
dartMessenger = new DartMessenger(fakeBinaryMessenger, 0);
}
@Test
public void setsStreamHandler() {
assertNotNull(fakeBinaryMessenger.getMessageHandler());
}
@Test
public void send_handlesNullEventSinks() {
dartMessenger.send(DartMessenger.EventType.ERROR, "error description");
List<ByteBuffer> sentMessages = fakeBinaryMessenger.getMessages();
assertEquals(0, sentMessages.size());
}
@Test
public void send_includesErrorDescriptions() {
initializeEventSink();
dartMessenger.send(DartMessenger.EventType.ERROR, "error description");
List<ByteBuffer> sentMessages = fakeBinaryMessenger.getMessages();
assertEquals(1, sentMessages.size());
Map<String, String> event = decodeSentMessage(sentMessages.get(0));
assertEquals(DartMessenger.EventType.ERROR.toString().toLowerCase(), event.get("eventType"));
assertEquals("error description", event.get("errorDescription"));
}
@Test
public void sendCameraClosingEvent() {
initializeEventSink();
dartMessenger.sendCameraClosingEvent();
List<ByteBuffer> sentMessages = fakeBinaryMessenger.getMessages();
assertEquals(1, sentMessages.size());
Map<String, String> event = decodeSentMessage(sentMessages.get(0));
assertEquals(
DartMessenger.EventType.CAMERA_CLOSING.toString().toLowerCase(), event.get("eventType"));
assertNull(event.get("errorDescription"));
}
@SuppressWarnings("unchecked")
private Map<String, String> decodeSentMessage(ByteBuffer sentMessage) {
sentMessage.position(0);
return (Map<String, String>) StandardMethodCodec.INSTANCE.decodeEnvelope(sentMessage);
}
private void initializeEventSink() {
MethodCall call = new MethodCall("listen", null);
ByteBuffer encodedCall = StandardMethodCodec.INSTANCE.encodeMethodCall(call);
encodedCall.position(0);
fakeBinaryMessenger.getMessageHandler().onMessage(encodedCall, reply -> {});
}
}