package com.thoughtworks.gauge.findUsages; import com.intellij.psi.*; import com.intellij.psi.impl.source.PsiClassImpl; import com.intellij.psi.impl.source.PsiParameterImpl; import com.thoughtworks.gauge.BeforeStep; import com.thoughtworks.gauge.helper.ModuleHelper; import com.thoughtworks.gauge.language.psi.SpecStep; import com.thoughtworks.gauge.language.psi.impl.SpecStepImpl; import org.junit.Test; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; public class ImplUsageProviderTest { @Test public void TestIsImplicitUsageWithNoModule() throws Exception { ModuleHelper helper = mock(ModuleHelper.class); boolean isUsed = new ImplUsageProvider(null, helper).isImplicitUsage(mock(PsiElement.class)); assertFalse(isUsed); } @Test public void TestIsImplicitUsageWithNoElement() throws Exception { ModuleHelper helper = mock(ModuleHelper.class); boolean isUsed = new ImplUsageProvider(null, helper).isImplicitUsage(null); assertFalse(isUsed); } @Test public void TestIsImplicitUsageForClass() throws Exception { ModuleHelper helper = mock(ModuleHelper.class); PsiClass c = mock(PsiClassImpl.class); PsiMethod method = mock(PsiMethod.class); PsiModifierList list = mock(PsiModifierList.class); PsiAnnotation annotation = mock(PsiAnnotation.class); when(annotation.getQualifiedName()).thenReturn(BeforeStep.class.getCanonicalName()); when(list.getAnnotations()).thenReturn(new PsiAnnotation[]{annotation}); when(method.getModifierList()).thenReturn(list); when(c.getMethods()).thenReturn(new PsiMethod[]{method}); when(helper.isGaugeModule(c)).thenReturn(true); boolean isUsed = new ImplUsageProvider(null, helper).isImplicitUsage(c); assertTrue(isUsed); } @Test public void TestIsImplicitUsageForClassWithNoMethods() throws Exception { ModuleHelper helper = mock(ModuleHelper.class); PsiClass c = mock(PsiClassImpl.class); when(helper.isGaugeModule(c)).thenReturn(true); when(c.getMethods()).thenReturn(new PsiMethod[]{}); boolean isUsed = new ImplUsageProvider(null, helper).isImplicitUsage(c); assertFalse(isUsed); } @Test public void TestIsImplicitUsageForMethodParameter() throws Exception { ModuleHelper helper = mock(ModuleHelper.class); SpecStep element = mock(SpecStepImpl.class); PsiParameter parameter = mock(PsiParameterImpl.class); when(parameter.getDeclarationScope()).thenReturn(element); when(helper.isGaugeModule(parameter)).thenReturn(true); boolean isUsed = new ImplUsageProvider(null, helper).isImplicitUsage(parameter); assertTrue(isUsed); } @Test public void TestIsImplicitUsageForHook() throws Exception { ModuleHelper helper = mock(ModuleHelper.class); PsiMethod method = mock(PsiMethod.class); PsiModifierList list = mock(PsiModifierList.class); PsiAnnotation annotation = mock(PsiAnnotation.class); when(annotation.getQualifiedName()).thenReturn(BeforeStep.class.getCanonicalName()); when(list.getAnnotations()).thenReturn(new PsiAnnotation[]{annotation}); when(method.getModifierList()).thenReturn(list); when(helper.isGaugeModule(method)).thenReturn(true); boolean isUsed = new ImplUsageProvider(null, helper).isImplicitUsage(method); assertTrue(isUsed); } @Test public void TestIsImplicitUsageForNonGaugeElement() throws Exception { ModuleHelper helper = mock(ModuleHelper.class); PsiMethod method = mock(PsiMethod.class); PsiModifierList list = mock(PsiModifierList.class); when(list.getAnnotations()).thenReturn(new PsiAnnotation[]{}); when(method.getModifierList()).thenReturn(list); when(helper.isGaugeModule(method)).thenReturn(true); boolean isUsed = new ImplUsageProvider(null, helper).isImplicitUsage(method); assertFalse(isUsed); } }