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 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; @RunWith(JMock.class) public class JavaDocForBinaryStepLocatorTest { private Mockery context; private ProjectJavaDocLocator<StepImplTypeContext> subProvider1; private ProjectJavaDocLocator<StepImplTypeContext> subProvider2; private ProjectJavaDocLocator<StepImplTypeContext> subProvider3; private StepImplTypeContext stepImplTypeContext; private IJavaProject project; private ProjectJavaDocLocator<StepImplTypeContext> binaryProvider; @SuppressWarnings("unchecked") @Before public void initialise() { this.context = new Mockery(); this.stepImplTypeContext = StepImplTypeContext.with(context.mock(IType.class), null); this.project = context.mock(IJavaProject.class); this.subProvider1 = context.mock(ProjectJavaDocLocator.class, "subProvider1"); this.subProvider2 = context.mock(ProjectJavaDocLocator.class, "subProvider2"); this.subProvider3 = context.mock(ProjectJavaDocLocator.class, "subProvider3"); this.binaryProvider = new JavaDocForBinaryStepLocator(subProvider1, subProvider2, subProvider3); } @Test public void returnsJavadocFromFirstSubProviderIfValid() { final String javadoc = "JavaDoc"; context.checking(new Expectations() { { oneOf(subProvider1).formattedJavaDocFor(stepImplTypeContext, project); will(returnValue(javadoc)); } }); assertThat(binaryProvider.formattedJavaDocFor(stepImplTypeContext, project), is(javadoc)); } @Test public void returnsJavadocFromLastSubProviderIfValid() { final String javadoc = "JavaDoc"; context.checking(new Expectations() { { oneOf(subProvider1).formattedJavaDocFor(stepImplTypeContext, project); will(returnValue(null)); oneOf(subProvider2).formattedJavaDocFor(stepImplTypeContext, project); will(returnValue(null)); oneOf(subProvider3).formattedJavaDocFor(stepImplTypeContext, project); will(returnValue(javadoc)); } }); assertThat(binaryProvider.formattedJavaDocFor(stepImplTypeContext, project), is(javadoc)); } @Test public void returnsNullIfNoSubProviderIsValid() { context.checking(new Expectations() { { oneOf(subProvider1).formattedJavaDocFor(stepImplTypeContext, project); will(returnValue(null)); oneOf(subProvider2).formattedJavaDocFor(stepImplTypeContext, project); will(returnValue(null)); oneOf(subProvider3).formattedJavaDocFor(stepImplTypeContext, project); will(returnValue(null)); } }); assertThat(binaryProvider.formattedJavaDocFor(stepImplTypeContext, project), is(nullValue())); } }