// Path: src/main/java/de/bechte/junit/runners/context/processing/ChildResolver.java
// public interface ChildResolver<T extends Object> {
//     /**
//      * Resolved the children of type T for the given {@link TestClass}.
//      *
//      * @param testClass the {@link TestClass} to resolve the children for
//      * @return a {@link List} of children of type T
//      */
//     public List<T> getChildren(final TestClass testClass);
// }
// 
// Path: src/main/java/de/bechte/junit/runners/model/TestClassPool.java
// public final class TestClassPool {
//     private static final Map<Class<?>, TestClass> testClasses =
//             Collections.synchronizedMap(new WeakHashMap<Class<?>, TestClass>());
// 
//     // Avoid instantiation
//     private TestClassPool() {
//         super();
//     }
// 
//     /**
//      * Returns a {@link TestClass} wrapping the given {@code testClass}. {@link TestClass}es will be shared and held
//      * within the pool, to avoid the expensive process that is performed during construction of the instances.
//      *
//      * @param testClass the {@link Class} to create an {@link TestClass} instance for
//      * @return the {@link TestClass} instance
//      * @throws IllegalArgumentException If {@code testClass} is {@code null}.
//      */
//     public static TestClass forClass(final Class<?> testClass) {
//         if (testClass == null)
//             throw new IllegalArgumentException("TestClass must not be null!");
// 
//         if (!testClasses.containsKey(testClass))
//             testClasses.put(testClass, new TestClass(testClass));
// 
//         return testClasses.get(testClass);
//     }
// }
// 
// Path: src/test/java/de/bechte/junit/stubs/ContextTestClassStub.java
// public class ContextTestClassStub {
//     public class A {
//         @Test
//         public void innerTestMethod() throws Exception {
//         }
//     }
// 
//     public class B {
//         public class C {
//             @Test
//             public void failingTestMethod() throws Exception {
//                 fail("Failing!");
//             }
//         }
//     }
// 
//     @Test
//     public void outerTestMethod() throws Exception {
//     }
// }
// 
// Path: src/test/java/de/bechte/junit/stubs/SimpleTestClassStub.java
// public class SimpleTestClassStub {
//     @Test
//     public void testMethod() throws Exception {
//     }
// 
//     @Test
//     public void failingTestMethod() throws Exception {
//         fail("Failing!");
//     }
// }


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.*;
package de.bechte.junit.runners.context.description;




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
// Path: src/main/java/de/bechte/junit/runners/context/processing/ChildResolver.java
// public interface ChildResolver<T extends Object> {
//     /**
//      * Resolved the children of type T for the given {@link TestClass}.
//      *
//      * @param testClass the {@link TestClass} to resolve the children for
//      * @return a {@link List} of children of type T
//      */
//     public List<T> getChildren(final TestClass testClass);
// }
// 
// Path: src/main/java/de/bechte/junit/runners/model/TestClassPool.java
// public final class TestClassPool {
//     private static final Map<Class<?>, TestClass> testClasses =
//             Collections.synchronizedMap(new WeakHashMap<Class<?>, TestClass>());
// 
//     // Avoid instantiation
//     private TestClassPool() {
//         super();
//     }
// 
//     /**
//      * Returns a {@link TestClass} wrapping the given {@code testClass}. {@link TestClass}es will be shared and held
//      * within the pool, to avoid the expensive process that is performed during construction of the instances.
//      *
//      * @param testClass the {@link Class} to create an {@link TestClass} instance for
//      * @return the {@link TestClass} instance
//      * @throws IllegalArgumentException If {@code testClass} is {@code null}.
//      */
//     public static TestClass forClass(final Class<?> testClass) {
//         if (testClass == null)
//             throw new IllegalArgumentException("TestClass must not be null!");
// 
//         if (!testClasses.containsKey(testClass))
//             testClasses.put(testClass, new TestClass(testClass));
// 
//         return testClasses.get(testClass);
//     }
// }
// 
// Path: src/test/java/de/bechte/junit/stubs/ContextTestClassStub.java
// public class ContextTestClassStub {
//     public class A {
//         @Test
//         public void innerTestMethod() throws Exception {
//         }
//     }
// 
//     public class B {
//         public class C {
//             @Test
//             public void failingTestMethod() throws Exception {
//                 fail("Failing!");
//             }
//         }
//     }
// 
//     @Test
//     public void outerTestMethod() throws Exception {
//     }
// }
// 
// Path: src/test/java/de/bechte/junit/stubs/SimpleTestClassStub.java
// public class SimpleTestClassStub {
//     @Test
//     public void testMethod() throws Exception {
//     }
// 
//     @Test
//     public void failingTestMethod() throws Exception {
//         fail("Failing!");
//     }
// }


// Path: src/test/java/de/bechte/junit/runners/context/description/SuiteDescriberTest.java
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.*;

package de.bechte.junit.runners.context.description;




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 {