package org.bundlemaker.core.itest.jdtprojects;
import static org.junit.Assert.assertEquals;
import java.util.LinkedList;
import java.util.List;
import org.bundlemaker.core.analysis.AnalysisCore;
import org.bundlemaker.core.analysis.AnalysisModelConfiguration;
import org.bundlemaker.core.analysis.AnalysisModelQueries;
import org.bundlemaker.core.analysis.IModuleArtifact;
import org.bundlemaker.core.analysis.IResourceArtifact;
import org.bundlemaker.core.analysis.IResourceArtifact.IResourceArtifactContent;
import org.bundlemaker.core.analysis.IRootArtifact;
import org.bundlemaker.core.common.ResourceType;
import org.bundlemaker.core.itestframework.AbstractJdtProjectTest;
import org.bundlemaker.core.jtype.ITypeResource;
import org.bundlemaker.core.project.BundleMakerProjectContentChangedEvent;
import org.bundlemaker.core.project.BundleMakerProjectContentChangedEvent.Type;
import org.bundlemaker.core.project.IBundleMakerProjectChangedListener;
import org.bundlemaker.core.project.IProjectContentEntry;
import org.bundlemaker.core.project.IProjectContentResource;
import org.eclipse.core.runtime.CoreException;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
/**
* <p>
* </p>
*
* @author Gerd Wütherich (gerd@gerd-wuetherich.de)
*/
public class ProjectContentChangedTest extends AbstractJdtProjectTest {
//
private List<BundleMakerProjectContentChangedEvent> _contentChangedEvents;
//
private IBundleMakerProjectChangedListener _changedListener;
/**
* @throws CoreException
*/
@Before
public void before() throws CoreException {
System.out.println("**********************************************************");
System.out.println("");
System.out.println("**********************************************************");
super.before();
//
_contentChangedEvents = new LinkedList<BundleMakerProjectContentChangedEvent>();
_changedListener = new IBundleMakerProjectChangedListener.Adapter() {
@Override
public void projectContentChanged(BundleMakerProjectContentChangedEvent event) {
_contentChangedEvents.add(event);
}
};
getBundleMakerProject().addBundleMakerProjectChangedListener(_changedListener);
}
/**
* @throws CoreException
*/
@After
public void after() throws CoreException {
//
getBundleMakerProject().removeBundleMakerProjectChangedListener(_changedListener);
//
super.after();
}
/**
* @throws Exception
*/
@Test
public void testSourceFileAdded() throws Exception {
//
addSource();
//
Assert.assertEquals(1, _contentChangedEvents.size());
BundleMakerProjectContentChangedEvent event = _contentChangedEvents.get(0);
Assert.assertEquals(Type.ADDED, event.getType());
Assert.assertEquals(getBundleMakerProject(), event.getBundleMakerProject());
System.out.println(event.getContentResource());
Assert.assertEquals("newPack/NewClass.java", event.getContentResource().getPath());
}
@Test
public void testSourceFileRemoved() throws Exception {
//
IRootArtifact rootArtifact = AnalysisCore.getAnalysisModel(getModularizedSystem(),
AnalysisModelConfiguration.HIERARCHICAL_SOURCE_RESOURCES_CONFIGURATION);
//
IModuleArtifact moduleArtifact = AnalysisModelQueries.getModuleArtifact(rootArtifact,
"SimpleArtifactModelTest-JDT <bin>");
Assert.assertNotNull(moduleArtifact);
//
assertEquals(2, AnalysisModelQueries.findSuccessors(moduleArtifact, IResourceArtifact.class).size());
//
removeClassKlasse();
//
Assert.assertEquals(1, _contentChangedEvents.size());
//
BundleMakerProjectContentChangedEvent event = _contentChangedEvents.get(0);
Assert.assertEquals(Type.REMOVED, event.getType());
Assert.assertEquals(getBundleMakerProject(), event.getBundleMakerProject());
Assert.assertEquals("de/test/Klasse.java", event.getContentResource().getPath());
//
assertEquals(1, AnalysisModelQueries.findSuccessors(moduleArtifact, IResourceArtifact.class).size());
}
/**
* @throws Exception
*/
@Test
public void testSourceFileChanged() throws Exception {
//
IProjectContentEntry contentEntry = getBundleMakerProject().getProjectDescription().getProjectContentEntry(
"0000000");
Assert.assertEquals(2, contentEntry.getSourceResources().size());
//
IProjectContentResource contentResource = contentEntry.getResource("de/test/Klasse.java", ResourceType.SOURCE);
ITypeResource typeResource = contentResource.adaptAs(ITypeResource.class);
Assert.assertNotNull(typeResource);
Assert.assertNotNull(typeResource.getContainedType());
Assert.assertEquals(2, typeResource.getContainedType().getReferences().size());
Assert.assertEquals(1, typeResource.getReferences().size());
//
modifyClassKlasse();
//
Assert.assertEquals(1, _contentChangedEvents.size());
BundleMakerProjectContentChangedEvent event = _contentChangedEvents.get(0);
Assert.assertEquals(Type.MODIFIED, event.getType());
Assert.assertEquals(getBundleMakerProject(), event.getBundleMakerProject());
Assert.assertEquals("de/test/Klasse.java", event.getContentResource().getPath());
//
typeResource = event.getContentResource().adaptAs(ITypeResource.class);
Assert.assertNotNull(typeResource);
Assert.assertNotNull(typeResource.getContainedType());
Assert.assertEquals(3, typeResource.getContainedType().getReferences().size());
Assert.assertEquals(1, typeResource.getReferences().size());
}
}