/*******************************************************************************
* 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.project.core.tests;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import com.liferay.ide.core.util.ZipUtil;
import com.liferay.ide.project.core.PluginClasspathContainerInitializer;
import com.liferay.ide.project.core.ProjectCore;
import com.liferay.ide.project.core.SDKClasspathContainer;
import com.liferay.ide.project.core.util.ProjectImportUtil;
import com.liferay.ide.sdk.core.SDK;
import com.liferay.ide.sdk.core.SDKUtil;
import java.io.File;
import java.net.URL;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.FileLocator;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Platform;
import org.eclipse.jdt.core.IClasspathEntry;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.JavaCore;
import org.junit.AfterClass;
import org.junit.Test;
/**
* @author Simon Jiang
*/
public class ImportPluginsSDKProjectTests extends ProjectCoreBase
{
@AfterClass
public static void removePluginsSDK() throws Exception
{
deleteAllWorkspaceProjects();
}
private boolean isLiferayRuntimePluginClassPath(List<IClasspathEntry> entries, final String entryPath)
{
boolean retval = false;
for( Iterator<IClasspathEntry> iterator = entries.iterator(); iterator.hasNext(); )
{
IClasspathEntry entry = iterator.next();
if( entry.getEntryKind() == IClasspathEntry.CPE_CONTAINER )
{
for( String path : entry.getPath().segments() )
{
if ( path.equals( entryPath ))
{
retval = true;
break;
}
}
}
}
return retval;
}
@Override
protected IPath getLiferayPluginsSdkDir()
{
return ProjectCore.getDefault().getStateLocation().append( "com.liferay.portal.plugins.sdk-7.0" );
}
@Override
protected IPath getLiferayPluginsSDKZip()
{
return getLiferayBundlesPath().append( "com.liferay.portal.plugins.sdk-7.0-ga3-20160804222206210.zip" );
}
@Override
protected String getLiferayPluginsSdkZipFolder()
{
return "com.liferay.portal.plugins.sdk-7.0/";
}
private IPath importProject( String pluginType, String name ) throws Exception
{
SDK sdk = SDKUtil.getWorkspaceSDK();
final IPath pluginTypeFolder = sdk.getLocation().append( pluginType );
final URL projectZipUrl =
Platform.getBundle( "com.liferay.ide.project.core.tests" ).getEntry( "projects/" + name + ".zip" );
final File projectZipFile = new File( FileLocator.toFileURL( projectZipUrl ).getFile() );
ZipUtil.unzip( projectZipFile, pluginTypeFolder.toFile() );
final IPath projectFolder = pluginTypeFolder.append( name );
assertEquals( true, projectFolder.toFile().exists() );
return projectFolder;
}
@Test
public void testSDKSetting() throws Exception
{
if( shouldSkipBundleTests() ) return;
SDK sdk = SDKUtil.getWorkspaceSDK();
Map<String, Object> sdkProperties = sdk.getBuildProperties(true);
assertNotNull( sdkProperties.get( "app.server.type" ) );
assertNotNull( sdkProperties.get( "app.server.dir" ) );
assertNotNull( sdkProperties.get( "app.server.deploy.dir" ) );
assertNotNull( sdkProperties.get( "app.server.lib.global.dir" ) );
assertNotNull( sdkProperties.get( "app.server.parent.dir" ) );
assertNotNull( sdkProperties.get( "app.server.portal.dir" ) );
assertEquals( sdkProperties.get( "app.server.type" ), "tomcat" );
assertEquals( sdkProperties.get( "app.server.dir" ), getLiferayRuntimeDir().toPortableString() );
assertEquals( sdkProperties.get( "app.server.deploy.dir" ), getLiferayRuntimeDir().append( "webapps" ).toPortableString() );
assertEquals( sdkProperties.get( "app.server.lib.global.dir" ), getLiferayRuntimeDir().append( "lib/ext" ).toPortableString() );
assertEquals( sdkProperties.get( "app.server.parent.dir" ), getLiferayRuntimeDir().removeLastSegments( 1 ).toPortableString() );
assertEquals( sdkProperties.get( "app.server.portal.dir" ), getLiferayRuntimeDir().append( "webapps/ROOT" ).toPortableString() );
}
@Test
public void testImportBasicHookProject() throws Exception
{
if( shouldSkipBundleTests() ) return;
final IPath projectPath = importProject( "hooks", "Import-IDE3.0-hook" );
IProject hookProjectForIDE3 = ProjectImportUtil.importProject( projectPath, new NullProgressMonitor(), null );
assertNotNull( hookProjectForIDE3 );
IJavaProject javaProject = JavaCore.create( hookProjectForIDE3 );
IClasspathEntry[] rawClasspath = javaProject.getRawClasspath();
List<IClasspathEntry> rawClasspaths = Arrays.asList( rawClasspath );
final boolean hasPluginClasspathDependencyContainer =
isLiferayRuntimePluginClassPath(rawClasspaths, SDKClasspathContainer.ID);
assertEquals( hasPluginClasspathDependencyContainer, true );
}
@Test
public void testImportConfiguredPortletProject() throws Exception
{
if( shouldSkipBundleTests() ) return;
final IPath projectPath = importProject( "portlets", "Import-Old-Configured-portlet" );
IProject portletProjectForIDE3 = ProjectImportUtil.importProject( projectPath, new NullProgressMonitor(), null );
assertNotNull( portletProjectForIDE3 );
IJavaProject javaProject = JavaCore.create( portletProjectForIDE3 );
IClasspathEntry[] rawClasspath = javaProject.getRawClasspath();
List<IClasspathEntry> rawClasspaths = Arrays.asList( rawClasspath );
final boolean hasOldPluginClasspathContainer =
isLiferayRuntimePluginClassPath(rawClasspaths, PluginClasspathContainerInitializer.ID);
final boolean hasPluginClasspathDependencyContainer =
isLiferayRuntimePluginClassPath(rawClasspaths, SDKClasspathContainer.ID);
final boolean hasOldRuntimeClasspathContainer =
isLiferayRuntimePluginClassPath(rawClasspaths, "com.liferay.studio.server.tomcat.runtimeClasspathProvider");
assertEquals( hasOldPluginClasspathContainer, false );
assertEquals( hasOldRuntimeClasspathContainer, false );
assertEquals( hasPluginClasspathDependencyContainer, true );
}
}