blob: 4348f460ecbdffefb8ed7e5f9e0ab2014bd777b4 [file] [log] [blame]
/******************************************************************************
* 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.asSet;
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.waitForCondition;
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.runtime.CoreException;
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.tests.support.TestUtils.ICondition;
/**
* @author <a href="mailto:kosta@bea.com">Konstantin Komissarchik</a>
*/
@SuppressWarnings( "unused" )
public final class ProjectChangeReactionTests
extends AbstractTests
{
private static final String METADATA_FILE
= ".settings/org.eclipse.wst.common.project.facet.core.xml";
private static final String TEST_PROJECT_NAME = "testProject";
private static IProjectFacet f1;
private static IProjectFacetVersion f1v10;
private static IProjectFacetVersion f1v12;
private static IProjectFacetVersion f1v121;
private static IProjectFacetVersion f1v13;
private static IProjectFacetVersion f1v20;
static
{
try
{
f1 = ProjectFacetsManager.getProjectFacet( "facet1" );
f1v10 = f1.getVersion( "1.0" );
f1v12 = f1.getVersion( "1.2" );
f1v121 = f1.getVersion( "1.2.1" );
f1v13 = f1.getVersion( "1.3" );
f1v20 = f1.getVersion( "2.0" );
}
catch( Exception e )
{
// Ignore failures. This api is tested explicitly.
}
}
private IProject pj;
private IFacetedProject fpj;
private IFile mdfile;
private ProjectChangeReactionTests( final String name )
{
super( name );
}
public static Test suite()
{
final TestSuite suite = new TestSuite();
suite.setName( "Project Change Reaction Tests" );
suite.addTest( new ProjectChangeReactionTests( "testReactionToProjectDelete" ) );
suite.addTest( new ProjectChangeReactionTests( "testReactionToMetadataFileDelete" ) );
suite.addTest( new ProjectChangeReactionTests( "testReactionToMetadataFileChange" ) );
return suite;
}
protected void setUp()
throws CoreException
{
assertFalse( ws.getRoot().getProject( TEST_PROJECT_NAME ).exists() );
this.fpj = ProjectFacetsManager.create( TEST_PROJECT_NAME, null, null );
this.pj = this.fpj.getProject();
addResourceToCleanup( this.pj );
assertTrue( this.fpj.getProject().exists() );
this.fpj.installProjectFacet( f1v12, null, null );
assertEquals( this.fpj.getProjectFacets(), asSet( f1v12 ) );
this.mdfile = this.pj.getFile( METADATA_FILE );
}
public void testReactionToProjectDelete()
throws CoreException
{
this.pj.delete( true, null );
waitForCondition( createNoFacetsCondition( this.fpj ) );
assertNull( ProjectFacetsManager.create( this.pj ) );
}
public void testReactionToMetadataFileDelete()
throws CoreException
{
this.mdfile.delete( true, null );
waitForCondition( createNoFacetsCondition( this.fpj ) );
}
public void testReactionToMetadataFileChange()
throws CoreException, IOException
{
String contents;
contents = readFromFile( this.mdfile );
contents = contents.replaceFirst( "1.2", "2.0" );
writeToFile( this.mdfile, contents );
waitForCondition( createFacetCondition( this.fpj, f1v20 ) );
contents = contents.replaceFirst( "2.0", "1.2.1" );
writeToFile( this.mdfile, contents );
waitForCondition( createFacetCondition( this.fpj, f1v121 ) );
contents = contents.replaceFirst( "<installed facet=\"facet1\" version=\"1.2.1\"/>", "" );
writeToFile( this.mdfile, contents );
waitForCondition( createNoFacetsCondition( this.fpj ) );
}
private static ICondition createNoFacetsCondition( final IFacetedProject fpj )
{
return new ICondition()
{
public boolean check()
{
return fpj.getProjectFacets().size() == 0;
}
};
}
private static ICondition createFacetCondition( final IFacetedProject fpj,
final IProjectFacetVersion fv )
{
return new ICondition()
{
public boolean check()
{
return fpj.hasProjectFacet( fv );
}
};
}
}