/******************************************************************************* * 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.gradle.core.tests; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import com.liferay.blade.gradle.model.CustomModel; import com.liferay.ide.core.IBundleProject; import com.liferay.ide.core.LiferayCore; import com.liferay.ide.core.tests.TestUtil; import com.liferay.ide.core.util.CoreUtil; import com.liferay.ide.gradle.core.GradleCore; import com.liferay.ide.gradle.core.GradleUtil; import com.liferay.ide.gradle.core.LiferayGradleProject; import com.liferay.ide.gradle.core.parser.GradleDependency; import com.liferay.ide.gradle.core.parser.GradleDependencyUpdater; import com.liferay.ide.project.core.IProjectBuilder; import com.liferay.ide.project.core.modules.NewLiferayModuleProjectOp; import java.io.File; import java.util.Arrays; import java.util.List; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IWorkspace; import org.eclipse.core.resources.IWorkspaceRoot; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.resources.WorkspaceJob; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Status; import org.eclipse.sapphire.platform.ProgressMonitorBridge; import org.junit.BeforeClass; import org.junit.Test; /** * @author Gregory Amerson * @author Andy Wu */ public class GradleProjectTests { @BeforeClass public static void deleteAllWorkspaceProjects() throws Exception { Util.deleteAllWorkspaceProjects(); } public static LiferayGradleProject fullImportGradleProject( String projectPath ) throws Exception { IWorkspace ws = ResourcesPlugin.getWorkspace(); IWorkspaceRoot root = ws.getRoot(); File src = new File( projectPath ); File dst = new File( root.getLocation().toFile(), src.getName() ); TestUtil.copyDir( src, dst ); IProgressMonitor monitor = new NullProgressMonitor(); IStatus status = GradleUtil.importGradleProject( dst, monitor ); if( status.isOK() ) { IProject project = CoreUtil.getProject( dst.getName() ); return new LiferayGradleProject( project ); } else { throw new Exception( status.getException() ); } } @Test public void getSymbolicName() throws Exception { LiferayGradleProject gradleProject = fullImportGradleProject( "projects/getSymbolicName" ); assertNotNull( gradleProject ); NullProgressMonitor monitor = new NullProgressMonitor(); IPath outputJar = gradleProject.getOutputBundle( false, monitor ); if( outputJar != null && outputJar.toFile().exists() ) { outputJar = gradleProject.getOutputBundle( true, monitor ); } assertTrue( outputJar.toFile().exists() ); assertEquals( "com.liferay.test.bsn", gradleProject.getSymbolicName() ); } @Test public void getOutputJar() throws Exception { LiferayGradleProject gradleProject = fullImportGradleProject( "projects/getOutputJar" ); assertNotNull( gradleProject ); NullProgressMonitor monitor = new NullProgressMonitor(); IPath outputJar = gradleProject.getOutputBundle( false, monitor ); assertNotNull( outputJar ); if( outputJar.toFile().exists() ) { outputJar.toFile().delete(); } assertTrue( !outputJar.toFile().exists() ); outputJar = gradleProject.getOutputBundle( true, monitor ); assertNotNull( outputJar ); assertTrue( outputJar.toFile().exists() ); } /* @Test public void gradleProjectProviderCache() throws Exception { final int[] consolesAdded = new int[1]; IConsoleListener consoleListener = new IConsoleListener() { @Override public void consolesRemoved( IConsole[] consoles ) { } @Override public void consolesAdded( IConsole[] consoles ) { consolesAdded[0]++; } }; ConsolePlugin.getDefault().getConsoleManager().addConsoleListener( consoleListener );; LiferayGradleProject gradleProject = fullImportGradleProject( "projects/cacheTest" ); assertNotNull( gradleProject ); IBundleProject bundleProject = LiferayCore.create( IBundleProject.class, gradleProject.getProject() ); assertNotNull( bundleProject ); assertEquals( LiferayGradleProject.class, bundleProject.getClass() ); assertEquals( 1, consolesAdded[0] ); bundleProject = LiferayCore.create( IBundleProject.class, gradleProject.getProject() ); assertNotNull( bundleProject ); assertEquals( LiferayGradleProject.class, bundleProject.getClass() ); assertEquals( 1, consolesAdded[0] ); IFile buildFile = gradleProject.getProject().getFile( "build.gradle" ); String buildFileContents = CoreUtil.readStreamToString( buildFile.getContents( true ), true ); String updatedContents = buildFileContents.replaceAll( "apply plugin: 'org.dm.bundle'", "" ); buildFile.setContents( new ByteArrayInputStream( updatedContents.getBytes() ), IResource.FORCE, new NullProgressMonitor() ); final Object lock = new Object(); IGradleModelListener gradleModelListener = new IGradleModelListener() { @Override public <T> void modelChanged( GradleProject project, Class<T> type, T model ) { synchronized( lock ) { lock.notify(); } } }; gradleProject.addModelListener( gradleModelListener ); gradleProject.requestGradleModelRefresh(); synchronized( lock ) { lock.wait(); } bundleProject = LiferayCore.create( IBundleProject.class, gradleProject.getProject() ); assertNull( bundleProject ); assertEquals( 2, consolesAdded[0] ); buildFile.setContents( new ByteArrayInputStream( buildFileContents.getBytes() ), IResource.FORCE, new NullProgressMonitor() ); gradleProject.requestGradleModelRefresh(); synchronized( lock ) { lock.wait(); } bundleProject = LiferayCore.create( IBundleProject.class, gradleProject.getProject() ); assertNotNull( bundleProject ); assertEquals( 3, consolesAdded[0] ); }*/ @Test public void hasGradleBundlePluginDetection() throws Exception { final LiferayGradleProject gradleProject = fullImportGradleProject( "projects/biz.aQute.bundle" ); assertNotNull( gradleProject ); final IBundleProject[] bundleProject = new IBundleProject[1]; WorkspaceJob job = new WorkspaceJob("") { @Override public IStatus runInWorkspace( IProgressMonitor monitor ) throws CoreException { bundleProject[0] = LiferayCore.create( IBundleProject.class, gradleProject.getProject() ); return Status.OK_STATUS; } }; job.schedule( 5000 ); job.join(); assertNotNull( bundleProject[0] ); assertEquals( LiferayGradleProject.class, bundleProject[0].getClass() ); } @Test public void testThemeProjectPluginDetection() throws Exception { NewLiferayModuleProjectOp op = NewLiferayModuleProjectOp.TYPE.instantiate(); op.setProjectName( "gradle-theme-test" ); op.setProjectProvider( "gradle-module" ); op.setProjectTemplateName( "theme" ); op.execute( ProgressMonitorBridge.create( new NullProgressMonitor() ) ); IProject project = CoreUtil.getProject( "gradle-theme-test" ); assertNotNull( project ); Util.waitForBuildAndValidation(); IBundleProject bundleProject = LiferayCore.create( IBundleProject.class, project ); assertNotNull( bundleProject ); } @Test public void toolingApiCustomModel() throws Exception { LiferayGradleProject gradleProject = fullImportGradleProject( "projects/customModel" ); assertNotNull( gradleProject ); CustomModel customModel = GradleCore.getToolingModel( GradleCore.getDefault(), CustomModel.class, gradleProject.getProject() ); assertNotNull( customModel ); assertFalse( customModel.hasPlugin( "not.a.plugin" ) ); assertTrue( customModel.hasPlugin( "org.dm.gradle.plugins.bundle.BundlePlugin" ) ); } @Test public void testAddGradleDependency() throws Exception { LiferayGradleProject gradleProject = fullImportGradleProject( "projects/GradleDependencyTestProject" ); String[][] gradleDependencies = new String[][] { { "com.liferay.portal", "com.liferay.portal.kernel", "2.6.0" } }; GradleDependency gd = new GradleDependency( gradleDependencies[0][0], gradleDependencies[0][1], gradleDependencies[0][2] ); assertNotNull( gradleProject ); IProject project = gradleProject.getProject(); IFile gradileFile = project.getFile( "build.gradle" ); GradleDependencyUpdater updater = new GradleDependencyUpdater( gradileFile.getLocation().toFile() ); List<GradleDependency> existDependencies = updater.getAllDependencies(); assertFalse( existDependencies.contains( gd ) ); IProjectBuilder gradleProjectBuilder = gradleProject.adapt( IProjectBuilder.class ); gradleProjectBuilder.updateProjectDependency( project, Arrays.asList( gradleDependencies ) ); GradleDependencyUpdater dependencyUpdater = new GradleDependencyUpdater( gradileFile.getLocation().toFile() ); List<GradleDependency> updatedDependencies = dependencyUpdater.getAllDependencies(); assertTrue( updatedDependencies.contains( gd ) ); } }