blob: 53f5ed8d6ea9b03fe4f440964a6f255baef561d7 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2012 EclipseSource and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* EclipseSource - initial API and implementation
******************************************************************************/
package org.eclipse.rap.rwt.internal.client;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import javax.servlet.http.HttpServletRequest;
import junit.framework.TestCase;
import org.eclipse.rap.rwt.client.Client;
import org.eclipse.rap.rwt.client.WebClient;
import org.eclipse.rap.rwt.testfixture.Fixture;
public class ClientSelector_Test extends TestCase {
private ClientSelector clientSelector;
@Override
protected void setUp() throws Exception {
Fixture.setUp();
clientSelector = new ClientSelector();
}
@Override
protected void tearDown() throws Exception {
Fixture.tearDown();
}
public void testNoClientSelectedByDefault() {
assertNull( clientSelector.getSelectedClient() );
}
public void testSelectsMatchingClient() {
Client client = mock( Client.class );
clientSelector.addClientProvider( mockClientProvider( true, client ) );
clientSelector.selectClient( mockRequest() );
assertSame( client, clientSelector.getSelectedClient() );
}
public void testSelectFailsWithoutClientProviders() {
try {
clientSelector.selectClient( mockRequest() );
fail();
} catch( IllegalStateException exception ) {
assertEquals( "No client provider found for request", exception.getMessage() );
}
}
public void testSelectFailsWithoutMatchingClientProviders() {
clientSelector.addClientProvider( mockClientProvider( false, null ) );
try {
clientSelector.selectClient( mockRequest() );
fail();
} catch( Exception exception ) {
assertEquals( "No client provider found for request", exception.getMessage() );
}
}
public void testSelectsFirstMatchingClient() {
Client expected = mock( Client.class );
clientSelector.addClientProvider( mockClientProvider( false, null ) );
clientSelector.addClientProvider( mockClientProvider( true, expected ) );
clientSelector.addClientProvider( mockClientProvider( true, mock( Client.class ) ) );
clientSelector.selectClient( mockRequest() );
assertSame( expected, clientSelector.getSelectedClient() );
}
public void testSelectedClientBuffered() {
ClientProvider provider = mockClientProvider( true, mock( Client.class ) );
clientSelector.addClientProvider( provider );
clientSelector.selectClient( mockRequest() );
clientSelector.selectClient( mockRequest() );
verify( provider, times( 1 ) ).accept( any( HttpServletRequest.class ) );
}
public void testActivateInstallsWebClientProvider() {
clientSelector.activate();
clientSelector.selectClient( mockRequest() );
assertTrue( clientSelector.getSelectedClient() instanceof WebClient );
}
public void testWebClientDoesNotOverrideOthers() {
Client client = mock( Client.class );
clientSelector.addClientProvider( mockClientProvider( true, client ) );
clientSelector.activate();
clientSelector.selectClient( mockRequest() );
assertSame( client, clientSelector.getSelectedClient() );
}
public void testFallbackToWebClient() {
clientSelector.addClientProvider( mockClientProvider( false, null ) );
clientSelector.activate();
clientSelector.selectClient( mockRequest() );
assertTrue( clientSelector.getSelectedClient() instanceof WebClient );
}
public void testCannotActivateTwice() {
clientSelector.activate();
try {
clientSelector.activate();
fail();
} catch( IllegalStateException exception ) {
assertEquals( "ClientSelector already activated", exception.getMessage() );
}
}
public void testCannotAddClientProviderAfterActivation() {
clientSelector.activate();
try {
clientSelector.addClientProvider( mock( ClientProvider.class ) );
fail();
} catch( IllegalStateException exception ) {
assertEquals( "ClientSelector already activated", exception.getMessage() );
}
}
private static HttpServletRequest mockRequest() {
return mock( HttpServletRequest.class );
}
private static ClientProvider mockClientProvider( boolean accept, Client client ) {
ClientProvider provider = mock( ClientProvider.class );
HttpServletRequest anyReq = any( HttpServletRequest.class );
when( Boolean.valueOf( provider.accept( anyReq ) ) ).thenReturn( Boolean.valueOf( accept ) );
when( provider.getClient() ).thenReturn( client );
return provider;
}
}