package org.projectusus.core.proportions.rawdata.jdtdriver.classrelations; import static org.hamcrest.Matchers.contains; import static org.hamcrest.Matchers.empty; import static org.hamcrest.Matchers.is; import static org.junit.Assert.assertThat; import org.eclipse.core.resources.IFile; import org.junit.Test; import org.projectusus.core.proportions.rawdata.jdtdriver.JavaFileDriver; import org.projectusus.core.statistics.test.PDETestForMetricsComputation; import com.google.common.collect.Multimap; public class ClassRelations_PDETest extends PDETestForMetricsComputation { @Test public void assumptionsAreValid() throws Exception { project.createFolder( "cr" ); project.createFolder( "cr2" ); IFile file = createJavaFile( "cr/ClassRelations.java" ); IFile anonymousClassBug = createJavaFile( "cr/AnonymousClassBug.java" ); IFile methodStaticImport = createJavaFile( "cr/MethodStaticImport.java" ); IFile fieldStaticImport = createJavaFile( "cr/FieldStaticImport.java" ); IFile methodChainStaticImport = createJavaFile( "cr/MethodChainStaticImport.java" ); IFile fieldChainStaticImport = createJavaFile( "cr/FieldChainStaticImport.java" ); IFile fieldChainPublic = createJavaFile( "cr/FieldChainPublic.java" ); IFile methodChainPublic = createJavaFile( "cr/MethodChainPublic.java" ); IFile imports = createJavaFile( "cr2/Imports.java" ); IFile staticImportInParam = createJavaFile( "cr2/ClassWithStaticImportInMethodParameter.java" ); createJavaFile( "cr/UnloadedClass.java" ); IFile unloadedFile2 = createJavaFile( "cr2/UnloadedClass2.java" ); ClassRelationsInspector inspector = new ClassRelationsInspector(); new JavaFileDriver( file ).compute( createSetWith( inspector ) ); new JavaFileDriver( anonymousClassBug ).compute( createSetWith( inspector ) ); new JavaFileDriver( methodChainPublic ).compute( createSetWith( inspector ) ); new JavaFileDriver( methodStaticImport ).compute( createSetWith( inspector ) ); new JavaFileDriver( methodChainStaticImport ).compute( createSetWith( inspector ) ); new JavaFileDriver( fieldChainPublic ).compute( createSetWith( inspector ) ); new JavaFileDriver( fieldStaticImport ).compute( createSetWith( inspector ) ); new JavaFileDriver( fieldChainStaticImport ).compute( createSetWith( inspector ) ); new JavaFileDriver( imports ).compute( createSetWith( inspector ) ); new JavaFileDriver( staticImportInParam ).compute( createSetWith( inspector ) ); Multimap<String, String> map = inspector.getTypeConnections(); assertThat( map.get( "cr/AnonymousClassBug" ), is( empty() ) ); assertThat( map.get( "cr/ClassRelations" ), is( empty() ) ); assertThat( map.get( "cr/ClassWithStrings" ), is( empty() ) ); assertThat( map.get( "cr/EmptyClass" ), is( empty() ) ); assertThat( map.get( "cr/ToEmptyClass" ), contains( "cr/EmptyClass", "cr/EmptyClass" ) ); assertThat( map.get( "cr/ClassWithGeneric" ), is( empty() ) ); assertThat( map.get( "cr/ToClassWithGeneric" ), contains( "cr/ClassWithGeneric", "cr/ClassWithGeneric" ) ); assertThat( map.get( "cr/ToClassAsGenericArgument" ), contains( "cr/ClassRelations", "cr/ClassRelations" ) ); assertThat( map.get( "cr/ToTwoClasses" ), contains( "cr/EmptyClass", "cr/EmptyClass", "cr/ClassRelations", "cr/ClassRelations" ) ); assertThat( map.get( "cr/ToUnloadedClass" ), contains( "cr/UnloadedClass", "cr/UnloadedClass" ) ); assertThat( map.get( "cr/ToUnloadedClassInDifferentPackage" ), contains( "cr2/UnloadedClass2", "cr2/UnloadedClass2" ) ); assertThat( map.get( "cr/EmptyInterface" ), is( empty() ) ); assertThat( map.get( "cr/InterfaceToClass" ), contains( "cr/ClassRelations", "cr/ClassRelations" ) ); assertThat( map.get( "cr/ImplementingClass" ), contains( "cr/EmptyInterface", "cr/EmptyInterface" ) ); assertThat( map.get( "cr/ExtendingClass" ), contains( "cr/ClassRelations", "cr/ClassRelations" ) ); assertThat( map.get( "cr/InvokingStaticMethod" ), contains( "cr/ClassRelations" ) ); assertThat( map.get( "cr/ReferencingStaticField" ), contains( "cr/ClassRelations", "cr/ClassRelations" ) ); assertThat( map.get( "cr/MethodChain" ), is( empty() ) ); assertThat( map.get( "cr/MethodChain_StaticNonstatic" ), contains( "cr/MethodChain" ) ); assertThat( map.get( "cr/MethodChain_NonstaticStatic" ), contains( "cr/MethodChain", "cr/MethodChain" ) ); assertThat( map.get( "cr/FieldChain" ), is( empty() ) ); assertThat( map.get( "cr/FieldChain_StaticNonstatic" ), contains( "cr/FieldChain", "cr/FieldChain", "cr/FieldChain" ) ); assertThat( map.get( "cr/FieldChain_NonstaticStatic" ), contains( "cr/FieldChain", "cr/FieldChain", "cr/FieldChain", "cr/FieldChain" ) ); assertThat( map.get( "cr/ClassWithArrayReferenceInField" ), contains( "cr/EmptyClass", "cr/EmptyClass" ) ); assertThat( map.get( "cr/ClassWithArrayReferenceInLocalVariable" ), contains( "cr/EmptyClass", "cr/EmptyClass" ) ); assertThat( map.get( "cr/ClassWithArrayReferenceInMethodParameter" ), contains( "cr/EmptyClass", "cr/EmptyClass" ) ); assertThat( map.get( "cr/ClassWithArrayReferenceInMethodReturnType" ), contains( "cr/EmptyClass", "cr/EmptyClass" ) ); assertThat( map.get( "cr/ClassWithInnerBeforeAttribute" ), contains( "cr/EmptyClass", "cr/EmptyClass" ) ); assertThat( map.get( "cr/InnerClassBeforeAttribute" ), contains( "cr/EmptyClass", "cr/EmptyClass" ) ); assertThat( map.get( "cr/ClassWithInnerAfterAttribute" ), contains( "cr/EmptyClass", "cr/EmptyClass" ) ); assertThat( map.get( "cr/InnerClassAfterAttribute" ), contains( "cr/EmptyClass", "cr/EmptyClass" ) ); // the following tests use more than one file assertThat( map.get( "cr/MethodStaticImport" ), is( empty() ) ); // eclipse bug! assertThat( map.get( "cr/MethodStaticImportPublic" ), contains( "cr/MethodChainPublic" ) ); assertThat( map.get( "cr/MethodChainPublic" ), is( empty() ) ); assertThat( map.get( "cr/MethodChainStaticImport" ), is( empty() ) ); // eclipse bug! assertThat( map.get( "cr/MethodChainStaticImportPublic" ), contains( "cr/MethodChainPublic" ) ); assertThat( map.get( "cr/FieldStaticImport" ), is( empty() ) ); // eclipse bug! assertThat( map.get( "cr/FieldStaticImportPublic" ), contains( "cr/FieldChainPublic" ) ); assertThat( map.get( "cr/FieldChainPublic" ), is( empty() ) ); assertThat( map.get( "cr/FieldChainStaticImport" ), is( empty() ) ); // eclipse bug! assertThat( map.get( "cr/FieldChainStaticImportPublic" ), contains( "cr/FieldChainPublic", "cr/FieldChainPublic" ) ); assertThat( map.get( "cr2/Imports" ), is( empty() ) ); assertThat( map.get( "cr2/ClassWithStaticImportInMethodParameter" ), contains( "cr/ClassRelations" ) ); // das geh�rt nicht hier hin! // Stattdessen sicherstellen, dass beim Anlegen und L�schen die entsprechende Neuberechnung auch stattfindet! project.delete( unloadedFile2 ); inspector = new ClassRelationsInspector(); new JavaFileDriver( file ).compute( createSetWith( inspector ) ); map = inspector.getTypeConnections(); assertThat( map.get( "cr/ToUnloadedClassInDifferentPackage" ), is( empty() ) ); } }