package com.technophobia.substeps.document.content.view.hover.model.javadoc; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.nullValue; import static org.junit.Assert.assertThat; import java.util.Arrays; import org.eclipse.core.resources.IProject; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jdt.core.IType; import org.jmock.Expectations; import org.jmock.Mockery; import org.jmock.integration.junit4.JMock; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import com.technophobia.eclipse.javadoc.ProjectJavaDocLocator; import com.technophobia.substeps.glossary.StepDescriptor; import com.technophobia.substeps.model.StepImplementation; import com.technophobia.substeps.supplier.Transformer; @RunWith(JMock.class) public class StepImplementationDescriptorJavadocLocatorTest { private Mockery context; private StepDescriptorProvider stepDescriptorProvider; private StepImplTypeContext stepImplTypeContext; private IJavaProject javaProject; private IProject project; private ProjectJavaDocLocator<StepImplTypeContext> stepDescriptorJavadocLocator; private Transformer<StepDescriptor, String> stepDescriptorToStringTransformer; @SuppressWarnings("unchecked") @Before public void initialise() throws Exception { this.context = new Mockery(); this.stepDescriptorProvider = context.mock(StepDescriptorProvider.class); this.stepImplTypeContext = StepImplTypeContext.with(context.mock(IType.class), new StepImplementation( String.class, "A keyword", "Step value", String.class.getMethod("toString"))); this.stepDescriptorToStringTransformer = context.mock(Transformer.class, "stepDescriptorToStringTransformer"); this.javaProject = context.mock(IJavaProject.class); this.project = context.mock(IProject.class); this.stepDescriptorJavadocLocator = new StepImplementationDescriptorJavadocLocator( stepDescriptorToStringTransformer, stepDescriptorProvider); } @Test public void returnsJavaDocIfStepDescriptorLocated() { final String javadoc = "Some javadoc"; final StepDescriptor descriptor1 = createDescriptor("example1", "description1"); final StepDescriptor descriptor2 = createDescriptor("example2", "description2"); final StepDescriptor descriptor3 = createDescriptor("example2", "description3"); final StepDescriptor descriptor4 = createDescriptor("Step value", "description4"); context.checking(new Expectations() { { oneOf(javaProject).getProject(); will(returnValue(project)); oneOf(stepDescriptorProvider).descriptorsForClassInProject(String.class.getName(), project); will(returnValue(Arrays.asList(descriptor1, descriptor2, descriptor3, descriptor4))); oneOf(stepDescriptorToStringTransformer).from(descriptor4); will(returnValue(javadoc)); } }); assertThat(stepDescriptorJavadocLocator.formattedJavaDocFor(stepImplTypeContext, javaProject), is(javadoc)); } @Test public void returnsNullIfStepDescriptorNotLocated() { final StepDescriptor descriptor1 = createDescriptor("example1", "description1"); final StepDescriptor descriptor2 = createDescriptor("example2", "description2"); final StepDescriptor descriptor3 = createDescriptor("example2", "description3"); final StepDescriptor descriptor4 = createDescriptor("example4", "description4"); context.checking(new Expectations() { { oneOf(javaProject).getProject(); will(returnValue(project)); oneOf(stepDescriptorProvider).descriptorsForClassInProject(String.class.getName(), project); will(returnValue(Arrays.asList(descriptor1, descriptor2, descriptor3, descriptor4))); } }); assertThat(stepDescriptorJavadocLocator.formattedJavaDocFor(stepImplTypeContext, javaProject), is(nullValue())); } private StepDescriptor createDescriptor(final String example, final String description) { final StepDescriptor stepDescriptor = new StepDescriptor(); stepDescriptor.setExample(example); stepDescriptor.setDescription(description); return stepDescriptor; } }