| /****************************************************************************** |
| * Copyright (c) 2005-2007 BEA Systems, Inc. |
| * 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: |
| * Konstantin Komissarchik |
| ******************************************************************************/ |
| |
| package org.eclipse.wst.common.project.facet.core.tests; |
| |
| import static org.eclipse.wst.common.project.facet.core.tests.support.TestUtils.readFromFile; |
| import static org.eclipse.wst.common.project.facet.core.tests.support.TestUtils.writeToFile; |
| |
| import java.io.IOException; |
| |
| import junit.framework.Test; |
| import junit.framework.TestSuite; |
| |
| import org.eclipse.core.resources.IFile; |
| import org.eclipse.core.resources.IProject; |
| import org.eclipse.core.resources.IProjectDescription; |
| import org.eclipse.core.runtime.CoreException; |
| import org.eclipse.wst.common.project.facet.core.FacetedProjectFramework; |
| import org.eclipse.wst.common.project.facet.core.IFacetedProject; |
| import org.eclipse.wst.common.project.facet.core.IProjectFacet; |
| import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion; |
| import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager; |
| import org.eclipse.wst.common.project.facet.core.internal.FacetedProject; |
| import org.eclipse.wst.common.project.facet.core.tests.support.TestUtils; |
| |
| /** |
| * @author <a href="mailto:kosta@bea.com">Konstantin Komissarchik</a> |
| */ |
| |
| public final class ProjectCreationTests |
| |
| extends AbstractTests |
| |
| { |
| private static final String FACETED_PROJECT_NATURE |
| = "org.eclipse.wst.common.project.facet.core.nature"; |
| |
| private static IProjectFacet f1; |
| private static IProjectFacetVersion f1v1; |
| |
| private static IProjectFacet f2; |
| private static IProjectFacetVersion f2v1; |
| private static IProjectFacetVersion f2v2; |
| |
| static |
| { |
| f1 = ProjectFacetsManager.getProjectFacet( "pct-f1" ); |
| f1v1 = f1.getVersion( "1.0" ); |
| |
| f2 = ProjectFacetsManager.getProjectFacet( "pct-f2" ); |
| f2v1 = f2.getVersion( "1.0" ); |
| f2v2 = f2.getVersion( "2.0" ); |
| } |
| |
| private ProjectCreationTests( final String name ) |
| { |
| super( name ); |
| } |
| |
| public static Test suite() |
| { |
| final TestSuite suite = new TestSuite(); |
| |
| suite.setName( "Project Creation Tests" ); |
| |
| suite.addTest( new ProjectCreationTests( "testCreationFromScratch1" ) ); |
| suite.addTest( new ProjectCreationTests( "testCreationFromScratch2" ) ); |
| suite.addTest( new ProjectCreationTests( "testCreationFromScratch3" ) ); |
| suite.addTest( new ProjectCreationTests( "testCreationFromScratch4" ) ); |
| suite.addTest( new ProjectCreationTests( "testCreationFromNonFacetedProject1" ) ); |
| suite.addTest( new ProjectCreationTests( "testCreationFromNonFacetedProject2" ) ); |
| suite.addTest( new ProjectCreationTests( "testCreationFromNonFacetedProject3" ) ); |
| suite.addTest( new ProjectCreationTests( "testCreationFromNonFacetedProject4" ) ); |
| suite.addTest( new ProjectCreationTests( "testWrapperCreation1" ) ); |
| suite.addTest( new ProjectCreationTests( "testWrapperCreation2" ) ); |
| suite.addTest( new ProjectCreationTests( "testWrapperCreation3" ) ); |
| suite.addTest( new ProjectCreationTests( "testHasProjectFacet1" ) ); |
| suite.addTest( new ProjectCreationTests( "testHasProjectFacet2" ) ); |
| |
| return suite; |
| } |
| |
| /** |
| * Tests {@link ProjectFacetsManager.create(String,IPath,IProgressMonitor)} |
| * method. In this scenario, there is no project with the same name. |
| * |
| * @throws CoreException |
| * @throws IOException |
| */ |
| |
| public void testCreationFromScratch1() |
| |
| throws CoreException, IOException |
| |
| { |
| final IFacetedProject fproj |
| = ProjectFacetsManager.create( "abc", null, null ); |
| |
| final IProject proj = fproj.getProject(); |
| |
| assertNotNull( proj ); |
| assertTrue( proj.exists() ); |
| |
| this.resourcesToCleanup.add( proj ); |
| |
| TestUtils.assertFileContains( proj.getFile( ".project" ), FACETED_PROJECT_NATURE ); |
| |
| assertEquals( fproj.getFixedProjectFacets().size(), 0 ); |
| assertEquals( fproj.getProjectFacets().size(), 0 ); |
| assertEquals( fproj.getTargetedRuntimes().size(), 0 ); |
| assertNull( fproj.getPrimaryRuntime() ); |
| } |
| |
| /** |
| * Tests {@link ProjectFacetsManager.create(String,IPath,IProgressMonitor)} |
| * method. In this scenario, there is a faceted project with the same name. |
| * |
| * @throws CoreException |
| * @throws IOException |
| */ |
| |
| public void testCreationFromScratch2() |
| |
| throws CoreException, IOException |
| |
| { |
| final IFacetedProject fproj |
| = ProjectFacetsManager.create( "abc", null, null ); |
| |
| this.resourcesToCleanup.add( fproj.getProject() ); |
| |
| try |
| { |
| ProjectFacetsManager.create( "abc", null, null ); |
| fail(); |
| } |
| catch( CoreException e ) |
| { |
| // expected |
| } |
| } |
| |
| /** |
| * Tests {@link ProjectFacetsManager.create(String,IPath,IProgressMonitor)} |
| * method. In this scenario, there is a non-faceted project with the same |
| * name. |
| * |
| * @throws CoreException |
| * @throws IOException |
| */ |
| |
| public void testCreationFromScratch3() |
| |
| throws CoreException, IOException |
| |
| { |
| final IProject project = ws.getRoot().getProject( "abc" ); |
| final IProjectDescription desc = ws.newProjectDescription( "abc" ); |
| |
| desc.setLocation( null ); |
| |
| project.create( desc, null ); |
| project.open( null ); |
| |
| this.resourcesToCleanup.add( project ); |
| |
| try |
| { |
| ProjectFacetsManager.create( "abc", null, null ); |
| fail(); |
| } |
| catch( CoreException e ) |
| { |
| // expected |
| } |
| } |
| |
| /** |
| * Tests {@link ProjectFacetsManager.create(String,IPath,IProgressMonitor)} method. In this |
| * scenario, there was previously a faceted project at the specified location. The test |
| * verifies that previously-installed facets are recognized after the project is resurrected. |
| * |
| * @throws CoreException |
| * @throws IOException |
| */ |
| |
| public void testCreationFromScratch4() |
| |
| throws CoreException, IOException |
| |
| { |
| IFacetedProject fproj; |
| |
| fproj = ProjectFacetsManager.create( "abc", null, null ); |
| this.resourcesToCleanup.add( fproj.getProject() ); |
| |
| fproj.installProjectFacet( f1v1, null, null ); |
| fproj.installProjectFacet( f2v1, null, null ); |
| |
| fproj.getProject().delete( false, false, null ); |
| |
| fproj = ProjectFacetsManager.create( "abc", null, null ); |
| |
| assertEquals( fproj.getFixedProjectFacets().size(), 0 ); |
| assertEquals( fproj.getProjectFacets().size(), 2 ); |
| assertTrue( fproj.hasProjectFacet( f1v1 ) ); |
| assertTrue( fproj.hasProjectFacet( f2v1 ) ); |
| assertEquals( fproj.getTargetedRuntimes().size(), 0 ); |
| assertNull( fproj.getPrimaryRuntime() ); |
| } |
| |
| /** |
| * Tests {@link ProjectFacetsManager.create(IProject,boolean,IProgressMonitor)} |
| * method. In this scenario project is not faceted and convertIfNecessary |
| * is set to true. |
| * |
| * @throws CoreException |
| * @throws IOException |
| */ |
| |
| public void testCreationFromNonFacetedProject1() |
| |
| throws CoreException, IOException |
| |
| { |
| final IProject project = ws.getRoot().getProject( "abc" ); |
| final IProjectDescription desc = ws.newProjectDescription( "abc" ); |
| |
| desc.setLocation( null ); |
| |
| project.create( desc, null ); |
| project.open( null ); |
| |
| this.resourcesToCleanup.add( project ); |
| |
| final IFacetedProject fproj |
| = ProjectFacetsManager.create( project, true, null ); |
| |
| assertEquals( fproj.getFixedProjectFacets().size(), 0 ); |
| assertEquals( fproj.getProjectFacets().size(), 0 ); |
| assertEquals( fproj.getTargetedRuntimes().size(), 0 ); |
| assertNull( fproj.getPrimaryRuntime() ); |
| } |
| |
| /** |
| * Tests {@link ProjectFacetsManager.create(IProject,boolean,IProgressMonitor)} |
| * method. In this scenario project is faceted and convertIfNecessary |
| * is set to true. |
| * |
| * @throws CoreException |
| * @throws IOException |
| */ |
| |
| public void testCreationFromNonFacetedProject2() |
| |
| throws CoreException, IOException |
| |
| { |
| final IFacetedProject prior |
| = ProjectFacetsManager.create( "abc", null, null ); |
| |
| final IProject project = prior.getProject(); |
| |
| this.resourcesToCleanup.add( project ); |
| |
| final IFacetedProject fproj |
| = ProjectFacetsManager.create( project, true, null ); |
| |
| assertEquals( fproj.getFixedProjectFacets().size(), 0 ); |
| assertEquals( fproj.getProjectFacets().size(), 0 ); |
| assertEquals( fproj.getTargetedRuntimes().size(), 0 ); |
| assertNull( fproj.getPrimaryRuntime() ); |
| } |
| |
| /** |
| * Tests {@link ProjectFacetsManager.create(IProject,boolean,IProgressMonitor)} |
| * method. In this scenario project is faceted and convertIfNecessary |
| * is set to false. |
| * |
| * @throws CoreException |
| * @throws IOException |
| */ |
| |
| public void testCreationFromNonFacetedProject3() |
| |
| throws CoreException, IOException |
| |
| { |
| final IFacetedProject prior |
| = ProjectFacetsManager.create( "abc", null, null ); |
| |
| final IProject project = prior.getProject(); |
| |
| this.resourcesToCleanup.add( project ); |
| |
| final IFacetedProject fproj |
| = ProjectFacetsManager.create( project, false, null ); |
| |
| assertEquals( fproj.getFixedProjectFacets().size(), 0 ); |
| assertEquals( fproj.getProjectFacets().size(), 0 ); |
| assertEquals( fproj.getTargetedRuntimes().size(), 0 ); |
| assertNull( fproj.getPrimaryRuntime() ); |
| } |
| |
| /** |
| * Tests {@link ProjectFacetsManager.create(IProject,boolean,IProgressMonitor)} |
| * method. In this scenario project is not faceted and convertIfNecessary |
| * is set to false. |
| * |
| * @throws CoreException |
| * @throws IOException |
| */ |
| |
| public void testCreationFromNonFacetedProject4() |
| |
| throws CoreException, IOException |
| |
| { |
| final IProject project = ws.getRoot().getProject( "abc" ); |
| final IProjectDescription desc = ws.newProjectDescription( "abc" ); |
| |
| desc.setLocation( null ); |
| |
| project.create( desc, null ); |
| project.open( null ); |
| |
| this.resourcesToCleanup.add( project ); |
| |
| assertNull( ProjectFacetsManager.create( project, false, null ) ); |
| } |
| |
| /** |
| * Tests {@link ProjectFacetsManager.create(IProject)} method. This scenario |
| * validates that the wrapper cache is working and the same instance is |
| * returned when the create method is called multiple times. |
| * |
| * @throws CoreException |
| */ |
| |
| public void testWrapperCreation1() |
| |
| throws CoreException |
| |
| { |
| final IFacetedProject fproj |
| = ProjectFacetsManager.create( "abc", null, null ); |
| |
| final IProject proj = fproj.getProject(); |
| this.resourcesToCleanup.add( proj ); |
| |
| assertTrue( fproj == ProjectFacetsManager.create( proj ) ); |
| assertTrue( fproj == ProjectFacetsManager.create( proj ) ); |
| assertTrue( fproj == ProjectFacetsManager.create( proj ) ); |
| assertTrue( fproj == ProjectFacetsManager.create( proj ) ); |
| assertTrue( fproj == ProjectFacetsManager.create( proj ) ); |
| } |
| |
| /** |
| * Tests {@link ProjectFacetsManager.create(IProject)} method. In this |
| * scenario, the input project does not exist. |
| * |
| * @throws CoreException |
| */ |
| |
| public void testWrapperCreation2() |
| |
| throws CoreException |
| |
| { |
| final IProject proj = ws.getRoot().getProject( "abc" ); |
| assertNull( ProjectFacetsManager.create( proj ) ); |
| } |
| |
| /** |
| * Tests {@link ProjectFacetsManager.create(IProject)} method. In this |
| * scenario, the input project is closed. |
| * |
| * @throws CoreException |
| */ |
| |
| public void testWrapperCreation3() |
| |
| throws CoreException |
| |
| { |
| final IFacetedProject fproj |
| = ProjectFacetsManager.create( "abc", null, null ); |
| |
| final IProject proj = fproj.getProject(); |
| this.resourcesToCleanup.add( proj ); |
| |
| proj.close( null ); |
| |
| assertNull( ProjectFacetsManager.create( proj ) ); |
| } |
| |
| /** |
| * Tests the various methods that check whether a particular facet is present in a project:<br/><br/> |
| * |
| * {@link IFacetedProject.hasProjecFacet(IProjectFacet)}<br/> |
| * {@link IFacetedProject.hasProjecFacet(IProjectFacet)}<br/> |
| * {@link FacetedProjectFramework.hasProjectFacet(IProject,String,String)}</br><br/> |
| * |
| * In this scenario, the facets being tested are known to the framework. |
| * |
| * @throws CoreException |
| */ |
| |
| public void testHasProjectFacet1() |
| |
| throws CoreException |
| |
| { |
| final IFacetedProject fproj |
| = ProjectFacetsManager.create( "abc", null, null ); |
| |
| final IProject proj = fproj.getProject(); |
| this.resourcesToCleanup.add( proj ); |
| |
| fproj.installProjectFacet( f1v1, null, null ); |
| fproj.installProjectFacet( f2v1, null, null ); |
| |
| assertTrue( fproj.hasProjectFacet( f1 ) ); |
| assertTrue( fproj.hasProjectFacet( f1v1 ) ); |
| |
| assertTrue( fproj.hasProjectFacet( f2 ) ); |
| assertTrue( fproj.hasProjectFacet( f2v1 ) ); |
| assertFalse( fproj.hasProjectFacet( f2v2 ) ); |
| |
| assertTrue( FacetedProjectFramework.hasProjectFacet( proj, f1.getId() ) ); |
| assertTrue( FacetedProjectFramework.hasProjectFacet( proj, f1.getId(), null ) ); |
| assertTrue( FacetedProjectFramework.hasProjectFacet( proj, f1.getId(), "1.0" ) ); |
| assertTrue( FacetedProjectFramework.hasProjectFacet( proj, f1.getId(), "[0.5-3.7]" ) ); |
| assertFalse( FacetedProjectFramework.hasProjectFacet( proj, f1.getId(), "2.3" ) ); |
| assertFalse( FacetedProjectFramework.hasProjectFacet( proj, f1.getId(), "[2.3-5.8)" ) ); |
| |
| assertTrue( FacetedProjectFramework.hasProjectFacet( proj, f2.getId() ) ); |
| assertTrue( FacetedProjectFramework.hasProjectFacet( proj, f2.getId(), null ) ); |
| assertTrue( FacetedProjectFramework.hasProjectFacet( proj, f2.getId(), "1.0" ) ); |
| assertTrue( FacetedProjectFramework.hasProjectFacet( proj, f2.getId(), "[0.5-3.7]" ) ); |
| assertFalse( FacetedProjectFramework.hasProjectFacet( proj, f2.getId(), "2.3" ) ); |
| assertFalse( FacetedProjectFramework.hasProjectFacet( proj, f2.getId(), "[2.3-5.8)" ) ); |
| } |
| |
| /** |
| * Tests the various methods that check whether a particular facet is present in a project:<br/><br/> |
| * |
| * {@link FacetedProjectFramework.hasProjectFacet(IProject,String,String)}</br><br/> |
| * |
| * In this scenario, the facets being tested are not known to the framework. This comes up as part of |
| * upgrade and transition scenarios where facets previously installed are no longer defined. |
| * |
| * @throws CoreException |
| */ |
| |
| public void testHasProjectFacet2() |
| |
| throws CoreException, IOException |
| |
| { |
| final IFacetedProject fproj |
| = ProjectFacetsManager.create( "abc", null, null ); |
| |
| final IProject proj = fproj.getProject(); |
| this.resourcesToCleanup.add( proj ); |
| |
| fproj.installProjectFacet( f1v1, null, null ); |
| fproj.installProjectFacet( f2v1, null, null ); |
| |
| final IFile fpjMdFile = proj.getFile( FacetedProject.METADATA_FILE ); |
| |
| String fpjMdFileContents = readFromFile( fpjMdFile ); |
| fpjMdFileContents = fpjMdFileContents.replace( "pct-f1", "foo" ); |
| fpjMdFileContents = fpjMdFileContents.replace( "<installed facet=\"pct-f2\" version=\"1.0\"/>", "<installed facet=\"pct-f2\" version=\"1.1\"/>" ); |
| writeToFile( fpjMdFile, fpjMdFileContents ); |
| |
| assertTrue( FacetedProjectFramework.hasProjectFacet( proj, "foo" ) ); |
| assertTrue( FacetedProjectFramework.hasProjectFacet( proj, "foo", null ) ); |
| assertTrue( FacetedProjectFramework.hasProjectFacet( proj, "foo", "1.0" ) ); |
| assertTrue( FacetedProjectFramework.hasProjectFacet( proj, "foo", "[0.5-3.7]" ) ); |
| assertFalse( FacetedProjectFramework.hasProjectFacet( proj, "foo", "2.3" ) ); |
| assertFalse( FacetedProjectFramework.hasProjectFacet( proj, "foo", "[2.3-5.8)" ) ); |
| |
| assertTrue( FacetedProjectFramework.hasProjectFacet( proj, f2.getId() ) ); |
| assertTrue( FacetedProjectFramework.hasProjectFacet( proj, f2.getId(), null ) ); |
| assertTrue( FacetedProjectFramework.hasProjectFacet( proj, f2.getId(), "1.1" ) ); |
| assertTrue( FacetedProjectFramework.hasProjectFacet( proj, f2.getId(), "[0.5-3.7]" ) ); |
| assertFalse( FacetedProjectFramework.hasProjectFacet( proj, f2.getId(), "2.3" ) ); |
| assertFalse( FacetedProjectFramework.hasProjectFacet( proj, f2.getId(), "[2.3-5.8)" ) ); |
| |
| assertFalse( FacetedProjectFramework.hasProjectFacet( proj, "abc" ) ); |
| assertFalse( FacetedProjectFramework.hasProjectFacet( proj, "abc", null ) ); |
| } |
| } |