/*
* Copyright 2000-2016 Vaadin Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.vaadin.server;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import org.junit.Assert;
import org.junit.Test;
import org.mockito.Mockito;
import com.vaadin.shared.MouseEventDetails;
import com.vaadin.shared.communication.FieldRpc.BlurServerRpc;
import com.vaadin.shared.ui.ClickRpc;
/**
* We test that AbstractClientConnector has a suitable isThis method which is
* needed to correctly perform an equals check between a proxy and it's
* underlying instance.
*
* @author Vaadin Ltd
*/
public class AbstractClientConnectorTest {
@Test
public void registerRPCMultiInterfaceTest() {
AbstractClientConnector mock = mock(AbstractClientConnector.class);
MultiServerRpcMock implementation = new MultiServerRpcMock();
Mockito.doCallRealMethod().when(mock).registerRpc(implementation);
try {
mock.registerRpc(implementation);
Assert.fail("expected exception");
} catch (Exception expected) {
Assert.assertEquals(
"Use registerRpc(T implementation, Class<T> rpcInterfaceType) "
+ "if the Rpc implementation implements more than one interface",
expected.getMessage());
}
}
@Test
public void registerRPCInterfaceTest() {
AbstractClientConnector mock = mock(AbstractClientConnector.class);
ServerRpcMock implementation = new ServerRpcMock();
Mockito.doCallRealMethod().when(mock).registerRpc(implementation);
mock.registerRpc(implementation);
verify(mock, times(1)).registerRpc(implementation, ClickRpc.class);
}
@Test
public void registerRPCInterfaceLastTest() {
AbstractClientConnector mock = mock(AbstractClientConnector.class);
ServerRpcLastMock implementation = new ServerRpcLastMock();
Mockito.doCallRealMethod().when(mock).registerRpc(implementation);
mock.registerRpc(implementation);
verify(mock, times(1)).registerRpc(implementation, ClickRpc.class);
}
private class ServerRpcLastMock
implements Comparable<ServerRpcLastMock>, ClickRpc {
private static final long serialVersionUID = -2822356895755286180L;
@Override
public void click(MouseEventDetails mouseDetails) {
}
@Override
public int compareTo(ServerRpcLastMock o) {
return 0;
}
}
private class ServerRpcMock implements ClickRpc {
private static final long serialVersionUID = 2822356895755286180L;
@Override
public void click(MouseEventDetails mouseDetails) {
}
}
private class MultiServerRpcMock implements ClickRpc, BlurServerRpc {
private static final long serialVersionUID = -7611999715560330373L;
@Override
public void blur() {
}
@Override
public void click(MouseEventDetails mouseDetails) {
}
}
}