package de.bechte.junit.runners.context.description;
import de.bechte.junit.runners.context.processing.ChildResolver;
import de.bechte.junit.runners.model.TestClassPool;
import de.bechte.junit.stubs.ContextTestClassStub;
import de.bechte.junit.stubs.SimpleTestClassStub;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.junit.runner.Description;
import org.junit.runners.model.TestClass;
import java.util.Arrays;
import java.util.List;
import static org.hamcrest.Matchers.*;
import static org.junit.Assert.assertThat;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.*;
public class SuiteDescriberTest {
private Class simpleTestClass;
private ChildResolver<Class<?>> childrenResolver;
private SuiteDescriber describer;
@Before
public void setUp() throws Exception {
simpleTestClass = SimpleTestClassStub.class;
childrenResolver = mock(ChildResolver.class);
describer = new SuiteDescriber(childrenResolver);
}
@Rule
public final ExpectedException thrown = ExpectedException.none();
@Test
public void whenDescribeIsCalledWithNull_anIllegalArgumentExceptionIsRaised() throws Exception {
thrown.expect(IllegalArgumentException.class);
thrown.expectMessage("Class must not be null!");
describer.describe(null);
}
@Test
public void whenDescribeIsCalled_descriptionHasTheCorrectTestClass() throws Exception {
Description description = describer.describe(simpleTestClass);
assertThat((Class) description.getTestClass(), is(equalTo(simpleTestClass)));
}
@Test
public void whenDescribeIsCalled_descriptionHasTheCorrectDisplayName() throws Exception {
Description description = describer.describe(simpleTestClass);
assertThat(description.getDisplayName(), is(equalTo(simpleTestClass.getCanonicalName())));
}
@Test
public void whenDescribeIsCalled_descriptionHasTheCorrectAnnotations() throws Exception {
Description description = describer.describe(simpleTestClass);
assertThat(description.getAnnotations(), containsInAnyOrder(simpleTestClass.getAnnotations()));
}
@Test
public void whenDescribeIsCalled_descriptionHasTheCorrectChildren() throws Exception {
Description descriptionA = mock(Description.class);
Description descriptionB = mock(Description.class);
SuiteDescriber spiedDescriber = spy(describer);
doReturn(descriptionA).when(spiedDescriber).describe(ContextTestClassStub.A.class);
doReturn(descriptionB).when(spiedDescriber).describe(ContextTestClassStub.B.class);
List<Class<?>> children = Arrays.asList(ContextTestClassStub.A.class, ContextTestClassStub.B.class);
TestClass testClass = TestClassPool.forClass(ContextTestClassStub.class);
when(childrenResolver.getChildren(testClass)).thenReturn(children);
Description description = spiedDescriber.describe(ContextTestClassStub.class);
assertThat(description.getChildren(), containsInAnyOrder(descriptionA, descriptionB));
verify(spiedDescriber).addChildren(any(Description.class), same(testClass));
verify(spiedDescriber).describe(ContextTestClassStub.class);
verify(spiedDescriber).describe(ContextTestClassStub.A.class);
verify(spiedDescriber).describe(ContextTestClassStub.B.class);
}
}