/*******************************************************************************
* Copyright (c) 2000-present Liferay, Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*
*******************************************************************************/
package com.liferay.ide.maven.core.tests;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import com.liferay.ide.core.util.CoreUtil;
import com.liferay.ide.core.util.FileUtil;
import com.liferay.ide.project.core.IPortletFramework;
import com.liferay.ide.project.core.ProjectCore;
import com.liferay.ide.project.core.model.NewLiferayPluginProjectOp;
import com.liferay.ide.project.core.model.PluginType;
import com.liferay.ide.project.core.model.ProjectName;
import com.liferay.ide.project.core.tests.ProjectCoreBase;
import com.liferay.ide.sdk.core.SDK;
import com.liferay.ide.sdk.core.SDKUtil;
import java.io.File;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.IPath;
import org.eclipse.sapphire.ElementList;
import org.eclipse.sapphire.EnablementService;
import org.eclipse.sapphire.PossibleValuesService;
import org.eclipse.sapphire.platform.PathBridge;
import org.eclipse.sapphire.services.ValidationService;
import org.junit.Ignore;
import org.junit.Test;
/**
* @author Gregory Amerson
*/
public class NewLiferayPluginProjectMavenTests extends ProjectCoreBase
{
protected final ProjectCoreBase base = new ProjectCoreBase();
protected IProject createMavenProject( NewLiferayPluginProjectOp op ) throws Exception
{
IProject project = createProject( op );
assertEquals( true, project.getFolder( "src" ).exists() );
return project;
}
protected void createMavenProjectName( final String projectName ) throws Exception
{
final NewLiferayPluginProjectOp op = NewLiferayPluginProjectOp.TYPE.instantiate();
op.setProjectName( projectName );
op.setProjectProvider( "maven" );
createMavenProject( op );
}
@Test
public void testCreateNewMavenProject() throws Exception
{
createMavenProjectName( "test-name-1" );
createMavenProjectName( "Test With Spaces" );
createMavenProjectName( "test_name_1" );
}
@Test
public void testGroupIdValidation() throws Exception
{
final NewLiferayPluginProjectOp op = newProjectOp( "test-group-id-validation" );
op.setProjectProvider( "maven" );
final ValidationService vs = op.getGroupId().service( ValidationService.class );
op.setGroupId( ".com.liferay.test" );
final String expected = "A package name cannot start or end with a dot";
assertEquals( expected, vs.validation().message() );
assertEquals( expected, op.getGroupId().validation().message() );
op.setGroupId( "com.life*ray.test" );
final String expected2 = "'life*ray' is not a valid Java identifier";
assertEquals( expected2, vs.validation().message() );
assertEquals( expected2, op.getGroupId().validation().message() );
}
@Test
public void testHookProjectName() throws Exception
{
final NewLiferayPluginProjectOp op = newProjectOp( "test-hook" );
op.setProjectProvider( "maven" );
op.setPluginType( PluginType.hook );
op.setUseDefaultLocation( true );
IProject expectedProject = createMavenProject(op);
String expectedProjectName = expectedProject.getName();
String actualProjectName = op.getProjectNames().get(0).getName().content();
assertEquals( expectedProjectName, actualProjectName );
}
@Test
public void testLocationValidation() throws Exception
{
final NewLiferayPluginProjectOp op = newProjectOp( "test-location-validation-service" );
op.setProjectProvider( "maven" );
op.setPluginType( "portlet" );
op.setUseDefaultLocation( false );
final ValidationService vs = op.getLocation().service( ValidationService.class );
String invalidLocation = null;
invalidLocation = "not-absolute-location";
op.setLocation( invalidLocation );
final String expected = "\"" + invalidLocation + "\"" + " is not an absolute path.";
assertEquals( normalize( expected ), normalize( vs.validation().message() ) );
assertEquals( normalize( expected ), normalize( op.getLocation().validation().message() ) );
if( CoreUtil.isWindows() )
{
invalidLocation = "Z:\\test-location-validation-service";
}
else
{
invalidLocation = "/test-location-validation-service";
}
op.setLocation( invalidLocation );
final String expected2 = "Cannot create project content at " + "\"" + invalidLocation + "\"";
assertEquals( expected2, vs.validation().message() );
assertEquals( expected2, op.getLocation().validation().message() );
if( CoreUtil.isWindows() )
{
invalidLocation = CoreUtil.getWorkspaceRoot().getLocation().getDevice() + "\\";
}
else
{
invalidLocation = "/";
}
op.setLocation( invalidLocation );
final String expected3 = "Project location is not empty or a parent pom.";
assertEquals( expected3, vs.validation().message() );
//assertEquals( expected3, op.getLocation().validation().message() );
//IDE-2069
invalidLocation = getLiferayRuntimeDir().removeLastSegments( 2 ).toOSString();
op.setLocation( invalidLocation );
final String expected5 = "Project location is not empty or a parent pom.";
assertEquals( expected5, vs.validation().message() );
op.setLocation( "" );
final String expected4 = "Location must be specified.";
assertEquals( expected4, vs.validation().message() );
assertEquals( expected4, op.getLocation().validation().message() );
}
private String normalize( String val )
{
return val.replaceAll( "\\\\", "/" );
}
@Test
public void testParentFolderLocationValidation() throws Exception
{
File parentFolder =
CoreUtil.getWorkspaceRoot().getLocation().append(
"test-parent-folder-location-validation-service" ).toFile();
if( !parentFolder.exists() )
{
parentFolder.mkdir();
}
File pomFile = new File( "projects/validations/location/pom.xml" );
FileUtil.copyFileToDir( pomFile, parentFolder );
final NewLiferayPluginProjectOp op = NewLiferayPluginProjectOp.TYPE.instantiate();
op.setProjectName( "test-parent-folder-location-validation-service" );
final ValidationService vs = op.getLocation().service( ValidationService.class );
op.setProjectProvider( "maven" );
op.setPluginType( "portlet" );
op.setUseDefaultLocation( false );
op.setLocation( parentFolder.getAbsolutePath() );
String projectName = op.getProjectName().content();
String expected = "The project name \"" + projectName + "\" can't be the same as the parent.";
assertEquals( expected, vs.validation().message() );
assertEquals( expected, op.getLocation().validation().message() );
}
@Test
@Ignore
public void testPortletFrameworkValidation() throws Exception
{
if( shouldSkipBundleTests() ) return;
NewLiferayPluginProjectOp op = newProjectOp( "test-portlet-framework-validation" );
op.setPluginType( "portlet" );
final ValidationService vs = op.getPortletFramework().service( ValidationService.class );
assertEquals( true, vs.validation().ok() );
final SDK newSDK = createNewSDK();
newSDK.setVersion( "6.0.0" );
final IPortletFramework jsf = ProjectCore.getPortletFramework( "jsf" );
op.setProjectProvider( "ant" );
op.setPortletFramework( "jsf" );
assertEquals(
"Selected portlet framework requires SDK version at least " + jsf.getRequiredSDKVersion(),
vs.validation().message() );
// Value is not excepted.
/*
* assertEquals( "Selected portlet framework requires SDK version at least " + jsf.getRequiredSDKVersion(),
* op.getPortletFramework().validation().message() );
*/
}
@Test
public void testPortletProjectName() throws Exception
{
final NewLiferayPluginProjectOp op = newProjectOp( "test-name" );
op.setProjectProvider( "maven" );
op.setPluginType( PluginType.portlet );
op.setUseDefaultLocation( true );
op.setPortletFramework( "mvc" );
op.setPortletName( "testPortlet" );
IProject expectedProject = createMavenProject(op);
String expectedProjectName = expectedProject.getName();
String actualProjectName = op.getProjectNames().get(0).getName().content();
assertEquals( expectedProjectName, actualProjectName );
}
@Test
public void testProjectNameListener() throws Exception
{
if( shouldSkipBundleTests() ) return ;
final NewLiferayPluginProjectOp op = newProjectOp( "" );
final SDK sdk = SDKUtil.createSDKFromLocation( getLiferayPluginsSdkDir() );
final String projectName = "test-project-name-listener";
final String projectName2 = "test-project-name-listener-2";
op.setProjectProvider( "ant" );
op.setUseDefaultLocation( true );
op.setPluginType( "portlet" );
IPath exceptedLocation = null;
op.setProjectName( projectName );
exceptedLocation = sdk.getLocation().append( "portlets" ).append( projectName + "-portlet" );
assertEquals( exceptedLocation, PathBridge.create( op.getLocation().content() ) );
op.setProjectName( projectName2 );
exceptedLocation = sdk.getLocation().append( "portlets" ).append( projectName2 + "-portlet" );
assertEquals( exceptedLocation, PathBridge.create( op.getLocation().content() ) );
op.setProjectProvider( "maven" );
op.setProjectName( projectName );
exceptedLocation = CoreUtil.getWorkspaceRoot().getLocation().append( projectName );
assertEquals( exceptedLocation, PathBridge.create( op.getLocation().content() ) );
op.setProjectName( projectName2 );
exceptedLocation = CoreUtil.getWorkspaceRoot().getLocation().append( projectName2 );
assertEquals( exceptedLocation, PathBridge.create( op.getLocation().content() ) );
}
@Test
public void testProjectProviderListener() throws Exception
{
if( shouldSkipBundleTests() ) return;
final NewLiferayPluginProjectOp op = newProjectOp( "test-project-provider-listener" );
final String projectName = op.getProjectName().content();
op.setPluginType( "portlet" );
op.setUseDefaultLocation( true );
final SDK sdk = SDKUtil.createSDKFromLocation( getLiferayPluginsSdkDir() );
IPath exceptedLocation = null;
op.setProjectProvider( "ant" );
exceptedLocation = sdk.getLocation().append( "portlets" ).append( projectName + "-portlet" );
assertEquals( exceptedLocation, PathBridge.create( op.getLocation().content() ) );
op.setProjectProvider( "maven" );
exceptedLocation = CoreUtil.getWorkspaceRoot().getLocation().append( projectName );
assertEquals( exceptedLocation, PathBridge.create( op.getLocation().content() ) );
}
@Test
public void testProjectProviderPossibleValues() throws Exception
{
if( shouldSkipBundleTests() ) return;
final NewLiferayPluginProjectOp op = newProjectOp( "test-project-provider-possbile-values" );
final Set<String> acturalValues = op.getProjectProvider().service( PossibleValuesService.class ).values();
assertNotNull( acturalValues );
Set<String> exceptedValues = new HashSet<String>();
exceptedValues.add( "ant" );
exceptedValues.add( "maven" );
assertEquals( true, exceptedValues.containsAll( acturalValues ) );
assertEquals( true, acturalValues.containsAll( exceptedValues ) );
}
@Test
public void testServiceBuilderProjectName() throws Exception
{
NewLiferayPluginProjectOp op = NewLiferayPluginProjectOp.TYPE.instantiate();
op.setProjectName( "test-name" );
op.setProjectProvider( "maven" );
op.setPluginType( PluginType.servicebuilder );
final IProject project = base.createProject( op, op.getProjectName() + "-portlet" );
String projectName = project.getName();
String finalProjectName = projectName.substring( 0, projectName.lastIndexOf( "-" ) );
ElementList<ProjectName> projectNames = op.getProjectNames();
List<String> finalProjectnames = new ArrayList<String>();
for( ProjectName expectedProjectName : projectNames )
{
finalProjectnames.add( expectedProjectName.getName().content() );
}
assertEquals( true, finalProjectnames.contains( finalProjectName ) );
assertEquals( true, finalProjectnames.contains( finalProjectName + "-portlet" ) );
assertEquals( true, finalProjectnames.contains( finalProjectName + "-portlet-service" ) );
}
@Test
public void testUseDefaultLocationEnablement() throws Exception
{
this.testUseDefaultLocationEnablement( true );
}
public void testUseDefaultLocationEnablement( boolean versionRestriction ) throws Exception
{
final NewLiferayPluginProjectOp op = newProjectOp( "test-use-default-location-enablement" );
op.setProjectProvider( "maven" );
assertEquals( true, op.getUseDefaultLocation().service( EnablementService.class ).enablement() );
assertEquals( true, op.getUseDefaultLocation().enabled() );
if( versionRestriction )
{
op.setProjectProvider( "ant" );
assertEquals( false, op.getUseDefaultLocation().service( EnablementService.class ).enablement() );
assertEquals( false, op.getUseDefaultLocation().enabled() );
}
}
@Test
public void testUseDefaultLocationListener() throws Exception
{
this.testUseDefaultLocationListener( false );
}
protected void testUseDefaultLocationListener( boolean versionRestriction ) throws Exception
{
final NewLiferayPluginProjectOp op = newProjectOp( "test-use-default-location-listener" );
final String projectName = op.getProjectName().content();
op.setProjectProvider( "maven" );
IPath exceptedLocation = null;
op.setUseDefaultLocation( true );
exceptedLocation = CoreUtil.getWorkspaceRoot().getLocation().append( projectName );
assertEquals( exceptedLocation, PathBridge.create( op.getLocation().content() ) );
op.setUseDefaultLocation( false );
assertEquals( null, op.getLocation().content() );
if( versionRestriction )
{
op.setProjectProvider( "ant" );
op.setPluginType( "portlet" );
op.setUseDefaultLocation( true );
final SDK sdk = SDKUtil.createSDKFromLocation( getLiferayPluginsSdkDir() );
exceptedLocation = sdk.getLocation().append( "portlets" ).append( projectName + "-portlet" );
assertEquals( exceptedLocation, PathBridge.create( op.getLocation().content() ) );
op.setUseDefaultLocation( false );
assertEquals( null, op.getLocation().content() );
}
}
}