blob: 7ada5bab5cea2d00821a7f3ca187cd127c2ce6c6 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007, 2013 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:
* Innoopract Informationssysteme GmbH - initial API and implementation
* EclipseSource - ongoing development
* IBM Corporation - original code for feature project creation, from PDE test cases
* Cole Markham - feature-based validation testing
******************************************************************************/
package org.eclipse.rap.ui.internal.launch;
import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
import org.eclipse.rap.ui.tests.Fixture;
import org.eclipse.rap.ui.tests.TestPluginProject;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class RAPLaunchConfigValidator_Test {
private static final String FEATURE_PROJECT_NAME = "com.junitTest.feature";
private ILaunchConfigurationWorkingCopy config;
private RAPLaunchConfig rapConfig;
private List projectsToDelete;
private RAPLaunchConfigValidator validator;
@Before
public void setUp() throws Exception {
config = Fixture.createRAPLaunchConfig();
rapConfig = new RAPLaunchConfig( config );
validator = new RAPLaunchConfigValidator( rapConfig );
projectsToDelete = new ArrayList();
}
@After
public void tearDown() throws Exception {
config.delete();
deleteProjects( projectsToDelete );
deleteFeature();
}
@Test
public void testValidate_emptyDataLocation() {
rapConfig.setDataLocation( "" );
IStatus[] states = validator.validate();
assertTrue( hasStatusCode( states, RAPLaunchConfigValidator.ERR_DATA_LOCATION ) );
}
@Test
public void testValidate_validServletPath() throws Exception {
rapConfig.setOpenBrowser( true );
rapConfig.setServletPath( "/foo" );
IStatus[] states = validator.validate();
assertTrue( isOk( states ) );
}
@Test
public void testValidate_emptyServletPath() {
rapConfig.setOpenBrowser( true );
// servlet name has a default value, clear this
rapConfig.setServletPath( "" );
IStatus[] states = validator.validate();
assertTrue( hasStatusCode( states, RAPLaunchConfigValidator.ERR_SERVLET_PATH ) );
}
@Test
public void testValidate_servletPathWithInvalidCharacters() {
rapConfig.setOpenBrowser( true );
rapConfig.setServletPath( "/rap*" );
IStatus[] states = validator.validate();
assertTrue( hasStatusCode( states, RAPLaunchConfigValidator.ERR_SERVLET_PATH_INVALID ) );
}
@Test
public void testValidate_servletPathWithoutLeadingSlash() {
rapConfig.setOpenBrowser( true );
rapConfig.setServletPath( "rap" );
IStatus[] states = validator.validate();
assertTrue( hasStatusCode( states, RAPLaunchConfigValidator.ERR_SERVLET_PATH_LEADING_SLASH ) );
}
@Test
public void testValidate_servletPathWithoutLeadingSlash_withoutOpenBrowser() {
rapConfig.setOpenBrowser( false );
rapConfig.setServletPath( "rap" );
IStatus[] states = validator.validate();
assertTrue( isOk( states ) );
}
@Test
public void testValidate_invalidButDisabledContextPath() {
rapConfig.setContextPath( "contains space" );
rapConfig.setUseManualContextPath( false );
IStatus[] states = validator.validate();
assertTrue( isOk( states ) );
}
@Test
public void testValidate_contextPathWithLeadingSlash() {
rapConfig.setContextPath( "/ok" );
rapConfig.setUseManualContextPath( true );
IStatus[] states = validator.validate();
assertTrue( isOk( states ) );
}
@Test
public void testValidate_contextPathWithTrailingSlash() {
rapConfig.setContextPath( "/foo/" );
rapConfig.setUseManualContextPath( true );
IStatus[] states = validator.validate();
assertTrue( isOk( states ) );
}
@Test
public void testValidate_contextPathWithoutLeadingSlash() {
rapConfig.setContextPath( "noleadingslash" );
rapConfig.setUseManualContextPath( true );
IStatus[] states = validator.validate();
assertTrue( hasStatusCode( states, RAPLaunchConfigValidator.ERR_CONTEXT_PATH_LEADING_SLASH ) );
}
@Test
public void testValidate_invalidContextPath() {
rapConfig.setContextPath( "/invalid\\character" );
rapConfig.setUseManualContextPath( true );
IStatus[] states = validator.validate();
assertTrue( hasStatusCode( states, RAPLaunchConfigValidator.ERR_CONTEXT_PATH ) );
}
@Test
public void testValidate_contextPathWithSpaces() {
rapConfig.setContextPath( "/contains space" );
rapConfig.setUseManualContextPath( true );
IStatus[] states = validator.validate();
assertTrue( hasStatusCode( states, RAPLaunchConfigValidator.ERR_CONTEXT_PATH ) );
}
@Test
public void testValidate_contextPathWithDoubleSlash() {
rapConfig.setContextPath( "/double//slash" );
rapConfig.setUseManualContextPath( true );
IStatus[] states = validator.validate();
assertTrue( hasStatusCode( states, RAPLaunchConfigValidator.ERR_CONTEXT_PATH ) );
}
@Test
public void testValidate_invalidPort() {
rapConfig.setUseManualPort( true );
rapConfig.setPort( -1 );
IStatus[] states = validator.validate();
assertTrue( hasStatusCode( states, RAPLaunchConfigValidator.ERR_PORT ) );
}
@Test
public void testValidate_validPortAfterRetry() {
rapConfig.setUseManualPort( true );
rapConfig.setPort( -1 );
// Fix validation error and retry
rapConfig.setPort( 8080 );
IStatus[] states = validator.validate();
assertTrue( isOk( states ) );
}
@Test
public void testValidate_invalidTimeout() {
rapConfig.setUseSessionTimeout( true );
rapConfig.setSessionTimeout( -1 );
IStatus[] states = validator.validate();
assertTrue( hasStatusCode( states, RAPLaunchConfigValidator.ERR_TIMEOUT ) );
}
@Test
public void testValidate_zeroTimeout() {
rapConfig.setUseSessionTimeout( true );
rapConfig.setSessionTimeout( 0 );
IStatus[] states = validator.validate();
assertTrue( isOk( states ) );
}
@Test
public void testValidate_positiveTimeout() {
rapConfig.setUseSessionTimeout( true );
rapConfig.setSessionTimeout( Integer.MAX_VALUE );
IStatus[] states = validator.validate();
assertTrue( isOk( states ) );
}
private static boolean hasStatusCode( IStatus[] states, int code ) {
boolean result = false;
for( int i = 0; !result && i < states.length; i++ ) {
if( states[ i ].getCode() == code ) {
result = true;
}
}
return result;
}
private boolean isOk( IStatus[] states ) {
boolean result = true;
for( int i = 0; !result && i < states.length; i++ ) {
if( !states[ i ].isOK() ) {
result = false;
}
}
return result;
}
private static void deleteFeature() throws CoreException {
IProject featureProject = getProject( FEATURE_PROJECT_NAME );
if( featureProject != null ) {
featureProject.delete( true, true, new NullProgressMonitor() );
}
}
private static IProject getProject( String projectName ) {
IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
return root.getProject( projectName );
}
private static void deleteProjects( List projects ) throws CoreException {
Iterator iter = projects.iterator();
while( iter.hasNext() ) {
TestPluginProject project = ( TestPluginProject )iter.next();
project.delete();
}
}
}