package org.projectusus.core.filerelations.model.test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.mockito.Matchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.jdt.core.IJavaElement; import org.eclipse.jdt.core.JavaModelException; import org.eclipse.jdt.core.dom.IPackageBinding; import org.eclipse.jdt.core.dom.ITypeBinding; import org.junit.Before; import org.junit.Test; import org.projectusus.core.filerelations.model.Classname; import org.projectusus.core.filerelations.model.TypeBindingChecker; import org.projectusus.core.filerelations.model.WrappedTypeBinding; import org.projectusus.core.project2.IUSUSProject; public class TypeBindingCheckerTest { private ITypeBinding binding = mock( ITypeBinding.class ); private IFile resource = mock( IFile.class ); private IJavaElement javaElement = mock( IJavaElement.class ); private IProject project = mock( IProject.class ); private IUSUSProject adapter = mock( IUSUSProject.class ); private IPackageBinding packg = mock( IPackageBinding.class ); private IJavaElement packageJavaElement = mock( IJavaElement.class ); private TypeBindingChecker checker = new TypeBindingChecker(); @Before public void setup() throws JavaModelException { when( new Boolean( binding.isPrimitive() ) ).thenReturn( Boolean.FALSE ); when( binding.getErasure() ).thenReturn( binding ); when( new Boolean( binding.isTypeVariable() ) ).thenReturn( Boolean.FALSE ); when( new Boolean( binding.isCapture() ) ).thenReturn( Boolean.FALSE ); when( new Boolean( binding.isWildcardType() ) ).thenReturn( Boolean.FALSE ); when( new Boolean( binding.isAnonymous() ) ).thenReturn( Boolean.FALSE ); when( resource.getProject() ).thenReturn( project ); when( resource.getFileExtension() ).thenReturn( "java" ); //$NON-NLS-1$ when( binding.getJavaElement() ).thenReturn( javaElement ); when( javaElement.getUnderlyingResource() ).thenReturn( resource ); when( new Boolean( project.isAccessible() ) ).thenReturn( Boolean.TRUE ); when( project.getAdapter( any( Class.class ) ) ).thenReturn( adapter ); when( new Boolean( adapter.isUsusProject() ) ).thenReturn( Boolean.TRUE ); when( binding.getName() ).thenReturn( "BindingName" ); //$NON-NLS-1$ when( binding.getPackage() ).thenReturn( packg ); when( packg.getName() ).thenReturn( "PackageName" ); //$NON-NLS-1$ when( packg.getJavaElement() ).thenReturn( packageJavaElement ); } @Test public void nullTypeBindingYieldsInvalidWrapper() { assertNull( checker.checkForRelevanceAndWrap( null ) ); } @Test public void primitiveTypeBindingYieldsInvalidWrapper() { when( new Boolean( binding.isPrimitive() ) ).thenReturn( Boolean.TRUE ); assertNull( checker.checkForRelevanceAndWrap( binding ) ); } @Test public void erasedBindingYieldsInvalidWrapper() { when( binding.getErasure() ).thenReturn( null ); assertNull( checker.checkForRelevanceAndWrap( binding ) ); } @Test public void erasedBindingTypeVariableYieldsInvalidWrapper() { when( new Boolean( binding.isTypeVariable() ) ).thenReturn( Boolean.TRUE ); assertNull( checker.checkForRelevanceAndWrap( binding ) ); } @Test public void erasedBindingCaptureYieldsInvalidWrapper() { when( new Boolean( binding.isCapture() ) ).thenReturn( Boolean.TRUE ); assertNull( checker.checkForRelevanceAndWrap( binding ) ); } @Test public void erasedBindingWildcardTypeYieldsInvalidWrapper() { when( new Boolean( binding.isWildcardType() ) ).thenReturn( Boolean.TRUE ); assertNull( checker.checkForRelevanceAndWrap( binding ) ); } @Test public void erasedBindingNullJavaElementYieldsInvalidWrapper() { when( binding.getJavaElement() ).thenReturn( null ); assertNull( checker.checkForRelevanceAndWrap( binding ) ); } @Test public void erasedBindingNullUnderlyingResourceYieldsInvalidWrapper() throws JavaModelException { when( javaElement.getUnderlyingResource() ).thenReturn( null ); assertNull( checker.checkForRelevanceAndWrap( binding ) ); } @Test public void erasedBindingNonJavaFileYieldsInvalidWrapper() { when( resource.getFileExtension() ).thenReturn( "xyz" ); //$NON-NLS-1$ assertNull( checker.checkForRelevanceAndWrap( binding ) ); } @Test public void erasedBindingProjectNotAccessibleYieldsInvalidWrapper() { when( new Boolean( project.isAccessible() ) ).thenReturn( Boolean.FALSE ); assertNull( checker.checkForRelevanceAndWrap( binding ) ); } @Test public void erasedBindingProjectAdapterWrongTypeYieldsInvalidWrapper() { Object wrongAdapter = mock( Object.class ); when( project.getAdapter( any( Class.class ) ) ).thenReturn( wrongAdapter ); assertNull( checker.checkForRelevanceAndWrap( binding ) ); } @Test public void erasedBindingNotInUsusProjectYieldsInvalidWrapper() { when( new Boolean( adapter.isUsusProject() ) ).thenReturn( Boolean.FALSE ); assertNull( checker.checkForRelevanceAndWrap( binding ) ); } @Test public void erasedBindingInUsusProjectYieldsBoundType() { WrappedTypeBinding boundType = checker.checkForRelevanceAndWrap( binding ); assertNotNull( boundType ); assertEquals( resource, boundType.getUnderlyingResource() ); assertEquals( new Classname( "BindingName" ), boundType.getClassname() ); //$NON-NLS-1$ } }