1/* */ package org.junit.runners;2/* */ 3/* */ import java.lang.annotation.ElementType;4/* */ import java.lang.annotation.Inherited;5/* */ import java.lang.annotation.Retention;6/* */ import java.lang.annotation.RetentionPolicy;7/* */ import java.lang.annotation.Target;8/* */ import java.text.MessageFormat;9/* */ import java.util.ArrayList;10/* */ import java.util.Arrays;11/* */ import java.util.Collections;12/* */ import java.util.List;13/* */ import org.junit.runner.Runner;14/* */ import org.junit.runners.model.FrameworkMethod;15/* */ import org.junit.runners.model.InitializationError;16/* */ import org.junit.runners.model.TestClass;17/* */ import org.junit.runners.parameterized.BlockJUnit4ClassRunnerWithParametersFactory;18/* */ import org.junit.runners.parameterized.ParametersRunnerFactory;19/* */ import org.junit.runners.parameterized.TestWithParameters;20/* */ 21/* */ 22/* */ 23/* */ 24/* */ 25/* */ 26/* */ 27/* */ 28/* */ 29/* */ 30/* */ 31/* */ 32/* */ 33/* */ 34/* */ 35/* */ 36/* */ 37/* */ 38/* */ 39/* */ 40/* */ 41/* */ 42/* */ 43/* */ 44/* */ 45/* */ 46/* */ 47/* */ 48/* */ 49/* */ 50/* */ 51/* */ 52/* */ 53/* */ 54/* */ 55/* */ 56/* */ 57/* */ 58/* */ 59/* */ 60/* */ 61/* */ 62/* */ 63/* */ 64/* */ 65/* */ 66/* */ 67/* */ 68/* */ 69/* */ 70/* */ 71/* */ 72/* */ 73/* */ 74/* */ 75/* */ 76/* */ 77/* */ 78/* */ 79/* */ 80/* */ 81/* */ 82/* */ 83/* */ 84/* */ 85/* */ 86/* */ 87/* */ 88/* */ 89/* */ 90/* */ 91/* */ 92/* */ 93/* */ 94/* */ 95/* */ 96/* */ 97/* */ 98/* */ 99/* */ 100/* */ 101/* */ 102/* */ 103/* */ 104/* */ 105/* */ 106/* */ 107/* */ 108/* */ 109/* */ 110/* */ 111/* */ 112/* */ 113/* */ 114/* */ 115/* */ 116/* */ 117/* */ 118/* */ 119/* */ 120/* */ 121/* */ 122/* */ 123/* */ 124/* */ 125/* */ 126/* */ 127/* */ 128/* */ 129/* */ 130/* */ 131/* */ 132/* */ 133/* */ 134/* */ 135/* */ 136/* */ 137/* */ 138/* */ 139/* */ 140/* */ 141/* */ 142/* */ 143/* */ 144/* */ 145/* */ 146/* */ 147/* */ 148/* */ 149/* */ 150/* */ 151/* */ 152/* */ 153/* */ 154/* */ 155/* */ 156/* */ 157/* */ 158/* */ 159/* */ 160/* */ 161/* */ 162/* */ 163/* */ 164/* */ 165/* */ 166/* */ 167/* */ 168/* */ 169/* */ 170/* */ 171/* */ 172/* */ 173/* */ 174/* */ 175/* */ 176/* */ 177/* */ 178/* */ 179/* */ 180/* */ 181/* */ 182/* */ 183/* */ 184/* */ 185/* */ 186/* */ 187/* */ 188/* */ 189/* */ 190/* */ 191/* */ 192/* */ 193/* */ 194/* */ 195/* */ 196/* */ 197/* */ 198/* */ 199/* */ 200/* */ 201/* */ 202/* */ 203/* */ 204/* */ 205/* */ 206/* */ 207/* */ 208/* */ 209/* */ 210/* */ 211/* */ 212/* */ 213/* */ 214/* */ 215/* */ 216/* */ 217/* */ 218/* */ 219/* */ 220/* */ 221/* */ 222/* */ 223/* */ 224/* */ 225/* */ 226/* */ 227/* */ 228/* */ 229/* */ 230/* */ public class Parameterized231/* */ extends Suite232/* */ {233/* 233 */ private static final ParametersRunnerFactory DEFAULT_FACTORY = (ParametersRunnerFactory)new BlockJUnit4ClassRunnerWithParametersFactory();234/* */ 235/* 235 */ private static final List<Runner> NO_RUNNERS = Collections.emptyList();236/* */ 237/* */ 238/* */ private final List<Runner> runners;239/* */ 240/* */ 241/* */ 242/* */ public Parameterized(Class<?> klass) throws Throwable {243/* 243 */ super(klass, NO_RUNNERS);244/* 244 */ ParametersRunnerFactory runnerFactory = getParametersRunnerFactory(klass);245/* */ 246/* 246 */ Parameters parameters = (Parameters)getParametersMethod().getAnnotation(Parameters.class);247/* */ 248/* 248 */ this.runners = Collections.unmodifiableList(createRunnersForParameters(allParameters(), parameters.name(), runnerFactory));249/* */ }250/* */ 251/* */ 252/* */ 253/* */ private ParametersRunnerFactory getParametersRunnerFactory(Class<?> klass) throws InstantiationException, IllegalAccessException {254/* 254 */ UseParametersRunnerFactory annotation = klass.<UseParametersRunnerFactory>getAnnotation(UseParametersRunnerFactory.class);255/* */ 256/* 256 */ if (annotation == null) {257/* 257 */ return DEFAULT_FACTORY;258/* */ }259/* 259 */ Class<? extends ParametersRunnerFactory> factoryClass = annotation.value();260/* */ 261/* 261 */ return factoryClass.newInstance();262/* */ }263/* */ 264/* */ 265/* */ 266/* */ protected List<Runner> getChildren() {267/* 267 */ return this.runners;268/* */ }269/* */ 270/* */ 271/* */ private TestWithParameters createTestWithNotNormalizedParameters(String pattern, int index, Object parametersOrSingleParameter) {272/* 272 */ (new Object[1])[0] = parametersOrSingleParameter; Object[] parameters = (parametersOrSingleParameter instanceof Object[]) ? (Object[])parametersOrSingleParameter : new Object[1];273/* */ 274/* 274 */ return createTestWithParameters(getTestClass(), pattern, index, parameters);275/* */ }276/* */ 277/* */ 278/* */ 279/* */ private Iterable<Object> allParameters() throws Throwable {280/* 280 */ Object parameters = getParametersMethod().invokeExplosively(null, new Object[0]);281/* 281 */ if (parameters instanceof Iterable)282/* 282 */ return (Iterable<Object>)parameters; 283/* 283 */ if (parameters instanceof Object[]) {284/* 284 */ return Arrays.asList((Object[])parameters);285/* */ }286/* 286 */ throw parametersMethodReturnedWrongType();287/* */ }288/* */ 289/* */ 290/* */ private FrameworkMethod getParametersMethod() throws Exception {291/* 291 */ List<FrameworkMethod> methods = getTestClass().getAnnotatedMethods(Parameters.class);292/* */ 293/* 293 */ for (FrameworkMethod each : methods) {294/* 294 */ if (each.isStatic() && each.isPublic()) {295/* 295 */ return each;296/* */ }297/* */ } 298/* */ 299/* 299 */ throw new Exception("No public static parameters method on class " + getTestClass().getName());300/* */ }301/* */ 302/* */ 303/* */ 304/* */ 305/* */ 306/* */ 307/* */ private List<Runner> createRunnersForParameters(Iterable<Object> allParameters, String namePattern, ParametersRunnerFactory runnerFactory) throws InitializationError, Exception {308/* */ try {309/* 309 */ List<TestWithParameters> tests = createTestsForParameters(allParameters, namePattern);310/* */ 311/* 311 */ List<Runner> runners = new ArrayList<Runner>();312/* 312 */ for (TestWithParameters test : tests) {313/* 313 */ runners.add(runnerFactory.createRunnerForTestWithParameters(test));314/* */ }315/* */ 316/* 316 */ return runners;317/* 317 */ } catch (ClassCastException e) {318/* 318 */ throw parametersMethodReturnedWrongType();319/* */ } 320/* */ }321/* */ 322/* */ 323/* */ 324/* */ private List<TestWithParameters> createTestsForParameters(Iterable<Object> allParameters, String namePattern) throws Exception {325/* 325 */ int i = 0;326/* 326 */ List<TestWithParameters> children = new ArrayList<TestWithParameters>();327/* 327 */ for (Object parametersOfSingleTest : allParameters) {328/* 328 */ children.add(createTestWithNotNormalizedParameters(namePattern, i++, parametersOfSingleTest));329/* */ }330/* */ 331/* 331 */ return children;332/* */ }333/* */ 334/* */ private Exception parametersMethodReturnedWrongType() throws Exception {335/* 335 */ String className = getTestClass().getName();336/* 336 */ String methodName = getParametersMethod().getName();337/* 337 */ String message = MessageFormat.format("{0}.{1}() must return an Iterable of arrays.", new Object[] { className, methodName });338/* */ 339/* */ 340/* 340 */ return new Exception(message);341/* */ }342/* */ 343/* */ 344/* */ private static TestWithParameters createTestWithParameters(TestClass testClass, String pattern, int index, Object[] parameters) {345/* 345 */ String finalPattern = pattern.replaceAll("\\{index\\}", Integer.toString(index));346/* */ 347/* 347 */ String name = MessageFormat.format(finalPattern, parameters);348/* 348 */ return new TestWithParameters("[" + name + "]", testClass, Arrays.asList(parameters));349/* */ }350/* */ 351/* */ @Retention(RetentionPolicy.RUNTIME)352/* */ @Inherited353/* */ @Target({ElementType.TYPE})354/* */ public static @interface UseParametersRunnerFactory {355/* */ Class<? extends ParametersRunnerFactory> value() default BlockJUnit4ClassRunnerWithParametersFactory.class;356/* */ }357/* */ 358/* */ @Retention(RetentionPolicy.RUNTIME)359/* */ @Target({ElementType.FIELD})360/* */ public static @interface Parameter {361/* */ int value() default 0;362/* */ }363/* */ 364/* */ @Retention(RetentionPolicy.RUNTIME)365/* */ @Target({ElementType.METHOD})366/* */ public static @interface Parameters {367/* */ String name() default "{index}";368/* */ }369/* */ }370/* Location: /home/arpit/Downloads/Picking-Tool-6.5.2.jar!/org/junit/runners/Parameterized.class371 * Java compiler version: 5 (49.0)372 * JD-Core Version: 1.1.3373 */...