package org.bundlemaker.core.itest.misc_models;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import org.bundlemaker.core.common.ResourceType;
import org.bundlemaker.core.itestframework.AbstractBundleMakerModelTest;
import org.bundlemaker.core.jtype.IType;
import org.bundlemaker.core.jtype.ITypeModule;
import org.bundlemaker.core.project.IProjectContentResource;
import org.bundlemaker.core.resource.IModule;
import org.bundlemaker.core.resource.IModuleResource;
import org.bundlemaker.core.resource.IModuleAwareMovableUnit;
import org.eclipse.core.runtime.CoreException;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
/**
* <p>
* </p>
*
* @author Gerd Wütherich (gerd@gerd-wuetherich.de)
*/
public class MovableUnitTest extends AbstractBundleMakerModelTest {
// the resource module
private IModule _resourceModule;
@Before
public void initResourceModule() throws CoreException {
_resourceModule = getModularizedSystem().getModule("InnerClassTest", "1.0.0");
}
/**
* <p>
* This test assures that the (test) resource module contains only the following four types:
* <ul>
* <li>de.test.innertypes.A</li>
* <li>de.test.innertypes.A$AA</li>
* <li>de.test.innertypes.B</li>
* <li>de.test.innertypes.B$BB</li>
* <li></li>
* </ul>
* </p>
*/
@Test
public void testResourceModuleTypes() {
// test the resource module
Assert.assertNotNull(_resourceModule.adaptAs(ITypeModule.class).getType("de.test.innertypes.A"));
Assert.assertNotNull(_resourceModule.adaptAs(ITypeModule.class).getType("de.test.innertypes.A$AA"));
Assert.assertNotNull(_resourceModule.adaptAs(ITypeModule.class).getType("de.test.innertypes.B"));
Assert.assertNotNull(_resourceModule.adaptAs(ITypeModule.class).getType("de.test.innertypes.B$BB"));
Assert.assertNull(_resourceModule.adaptAs(ITypeModule.class).getType("de.test.innertypes.A$1"));
Assert.assertNull(_resourceModule.adaptAs(ITypeModule.class).getType("de.test.innertypes.B$1"));
}
//
// /**
// * <p>
// * This test assures that all MovableUnits contains the same resources and types.
// * </p>
// */
// @Test
// public void testMovableUnit() {
//
// //
// assertMovableUnit(MovableUnit.createFromType(
// _resourceModule.adaptAs(ITypeModule.class).getType("de.test.innertypes.A"), getModularizedSystem()));
// assertMovableUnit(MovableUnit.createFromType(
// _resourceModule.adaptAs(ITypeModule.class).getType("de.test.innertypes.A$AA"), getModularizedSystem()));
// assertMovableUnit(MovableUnit.createFromType(
// _resourceModule.adaptAs(ITypeModule.class).getType("de.test.innertypes.B"), getModularizedSystem()));
// assertMovableUnit(MovableUnit.createFromType(
// _resourceModule.adaptAs(ITypeModule.class).getType("de.test.innertypes.B$BB"), getModularizedSystem()));
//
// //
// assertMovableUnit(MovableUnit.createFromResource(
// _resourceModule.getResource("de/test/innertypes/A.java", ProjectContentType.SOURCE), getModularizedSystem()));
//
// //
// assertMovableUnit(MovableUnit.createFromResource(
// _resourceModule.getResource("de/test/innertypes/A.class", ProjectContentType.BINARY), getModularizedSystem()));
// assertMovableUnit(MovableUnit
// .createFromResource(_resourceModule.getResource("de/test/innertypes/A$AA.class", ProjectContentType.BINARY),
// getModularizedSystem()));
// assertMovableUnit(MovableUnit.createFromResource(
// _resourceModule.getResource("de/test/innertypes/B.class", ProjectContentType.BINARY), getModularizedSystem()));
// assertMovableUnit(MovableUnit
// .createFromResource(_resourceModule.getResource("de/test/innertypes/B$BB.class", ProjectContentType.BINARY),
// getModularizedSystem()));
// assertMovableUnit(MovableUnit.createFromResource(
// _resourceModule.getResource("de/test/innertypes/B$1.class", ProjectContentType.BINARY), getModularizedSystem()));
// assertMovableUnit(MovableUnit.createFromResource(
// _resourceModule.getResource("de/test/innertypes/A$1.class", ProjectContentType.BINARY), getModularizedSystem()));
// }
// /**
// * <p>
// * </p>
// *
// */
// @Test
// public void testAssertEquals() {
//
// Assert.assertEquals(MovableUnit.createFromType(
// _resourceModule.adaptAs(ITypeModule.class).getType("de.test.innertypes.A"), getModularizedSystem()),
// MovableUnit.createFromType(_resourceModule.adaptAs(ITypeModule.class).getType("de.test.innertypes.A$AA"),
// getModularizedSystem()));
//
// Assert.assertEquals(MovableUnit.createFromType(
// _resourceModule.adaptAs(ITypeModule.class).getType("de.test.innertypes.A"), getModularizedSystem()),
// MovableUnit.createFromType(_resourceModule.adaptAs(ITypeModule.class).getType("de.test.innertypes.B"),
// getModularizedSystem()));
// }
/**
* <p>
* Helper method that checks the specified {@link IModuleAwareMovableUnit}.
* </p>
*
* @param movableUnit
*/
private void assertMovableUnit(IModuleAwareMovableUnit movableUnit) {
// assert not null
Assert.assertNotNull(movableUnit);
// // assert associated types
// List<IType> types = movableUnit.getAssociatedTypes();
// Collections.sort(types, new Comparator<IType>() {
// public int compare(IType o1, IType o2) {
// return o1.getName().compareTo(o2.getName());
// }
// });
// Assert.assertEquals(4, types.size());
// Assert.assertEquals("A", types.get(0).getName());
// Assert.assertEquals("A$AA", types.get(1).getName());
// Assert.assertEquals("B", types.get(2).getName());
// Assert.assertEquals("B$BB", types.get(3).getName());
// assert binary resources
List<? extends IProjectContentResource> binaryResources = movableUnit.getAssociatedBinaryResources();
Collections.sort(binaryResources, new Comparator<IProjectContentResource>() {
public int compare(IProjectContentResource o1, IProjectContentResource o2) {
return o1.getName().compareTo(o2.getName());
}
});
Assert.assertEquals(6, binaryResources.size());
Assert.assertEquals("A$1.class", binaryResources.get(0).getName());
Assert.assertEquals("A$AA.class", binaryResources.get(1).getName());
Assert.assertEquals("A.class", binaryResources.get(2).getName());
Assert.assertEquals("B$1.class", binaryResources.get(3).getName());
Assert.assertEquals("B$BB.class", binaryResources.get(4).getName());
Assert.assertEquals("B.class", binaryResources.get(5).getName());
// test source resources
IProjectContentResource sourceResources = movableUnit.getAssociatedSourceResource();
Assert.assertNotNull(sourceResources);
Assert.assertEquals("A.java", sourceResources.getName());
}
@Override
protected String getTestProjectName() {
return InnerClassTest.class.getSimpleName();
}
}