blob: a8a88b190ebcd1c99a9264be8197e521f6f443f9 [file] [log] [blame]
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package com.example.alternate_language_test_plugin;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
import io.flutter.plugin.common.BinaryMessenger;
import io.flutter.plugin.common.MessageCodec;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Arrays;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
public class PigeonTest {
@Test
public void toListAndBack() {
Pigeon.AndroidSetRequest request = new Pigeon.AndroidSetRequest();
request.setValue(1234l);
request.setState(Pigeon.AndroidLoadingState.COMPLETE);
ArrayList<Object> list = request.toList();
Pigeon.AndroidSetRequest readRequest = Pigeon.AndroidSetRequest.fromList(list);
assertEquals(request.getValue(), readRequest.getValue());
assertEquals(request.getState(), readRequest.getState());
}
@Test
public void toListAndBackNested() {
Pigeon.AndroidNestedRequest nested = new Pigeon.AndroidNestedRequest();
Pigeon.AndroidSetRequest request = new Pigeon.AndroidSetRequest();
request.setValue(1234l);
request.setState(Pigeon.AndroidLoadingState.COMPLETE);
nested.setRequest(request);
ArrayList<Object> list = nested.toList();
Pigeon.AndroidNestedRequest readNested = Pigeon.AndroidNestedRequest.fromList(list);
assertEquals(nested.getRequest().getValue(), readNested.getRequest().getValue());
assertEquals(nested.getRequest().getState(), readNested.getRequest().getState());
}
@Test
public void clearsHandler() {
Pigeon.AndroidApi mockApi = mock(Pigeon.AndroidApi.class);
BinaryMessenger binaryMessenger = mock(BinaryMessenger.class);
Pigeon.AndroidApi.setup(binaryMessenger, mockApi);
ArgumentCaptor<String> channelName = ArgumentCaptor.forClass(String.class);
verify(binaryMessenger).setMessageHandler(channelName.capture(), isNotNull());
Pigeon.AndroidApi.setup(binaryMessenger, null);
verify(binaryMessenger).setMessageHandler(eq(channelName.getValue()), isNull());
}
/** Causes an exception in the handler by passing in null when a AndroidSetRequest is expected. */
@Test
public void errorMessage() {
Pigeon.AndroidApi mockApi = mock(Pigeon.AndroidApi.class);
BinaryMessenger binaryMessenger = mock(BinaryMessenger.class);
Pigeon.AndroidApi.setup(binaryMessenger, mockApi);
ArgumentCaptor<BinaryMessenger.BinaryMessageHandler> handler =
ArgumentCaptor.forClass(BinaryMessenger.BinaryMessageHandler.class);
verify(binaryMessenger).setMessageHandler(anyString(), handler.capture());
MessageCodec<Object> codec = Pigeon.AndroidApi.getCodec();
ByteBuffer message = codec.encodeMessage(null);
handler
.getValue()
.onMessage(
message,
(bytes) -> {
bytes.rewind();
@SuppressWarnings("unchecked")
ArrayList error = (ArrayList) codec.decodeMessage(bytes);
assertNotNull(error.get(0));
assertNotNull(error.get(1));
String details = (String) error.get(2);
assertTrue(details.contains("Cause:"));
assertTrue(details.contains("Stacktrace:"));
});
}
@Test
public void callsVoidMethod() {
Pigeon.AndroidApi mockApi = mock(Pigeon.AndroidApi.class);
BinaryMessenger binaryMessenger = mock(BinaryMessenger.class);
Pigeon.AndroidApi.setup(binaryMessenger, mockApi);
ArgumentCaptor<BinaryMessenger.BinaryMessageHandler> handler =
ArgumentCaptor.forClass(BinaryMessenger.BinaryMessageHandler.class);
verify(binaryMessenger).setMessageHandler(anyString(), handler.capture());
Pigeon.AndroidSetRequest request = new Pigeon.AndroidSetRequest();
request.setValue(1234l);
request.setState(Pigeon.AndroidLoadingState.COMPLETE);
MessageCodec<Object> codec = Pigeon.AndroidApi.getCodec();
ByteBuffer message = codec.encodeMessage(new ArrayList<Object>(Arrays.asList(request)));
message.rewind();
handler
.getValue()
.onMessage(
message,
(bytes) -> {
bytes.rewind();
@SuppressWarnings("unchecked")
ArrayList wrapped = (ArrayList) codec.decodeMessage(bytes);
assertTrue(wrapped.size() == 1);
assertNull(wrapped.get(0));
});
ArgumentCaptor<Pigeon.AndroidSetRequest> receivedRequest =
ArgumentCaptor.forClass(Pigeon.AndroidSetRequest.class);
verify(mockApi).setValue(receivedRequest.capture());
assertEquals(request.getValue(), receivedRequest.getValue().getValue());
}
@Test
public void encodeWithNullField() {
Pigeon.AndroidNestedRequest request = new Pigeon.AndroidNestedRequest();
request.setContext("hello");
MessageCodec<Object> codec = Pigeon.AndroidNestedApi.getCodec();
ByteBuffer message = codec.encodeMessage(request);
assertNotNull(message);
}
}