Package net.java.quickcheck.junit4

Source Code of net.java.quickcheck.junit4.OnlyQuickCheckRunner

/*
*  Licensed to the author under one or more
*  contributor license agreements.  See the NOTICE file distributed with
*  this work for additional information regarding copyright ownership.
*  The ASF licenses this file to You under the Apache License, Version 2.0
*  (the "License"); you may not use this file except in compliance with
*  the License.  You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
*  Unless required by applicable law or agreed to in writing, software
*  distributed under the License is distributed on an "AS IS" BASIS,
*  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*  See the License for the specific language governing permissions and
*  limitations under the License.
*/
package net.java.quickcheck.junit4;

import static org.junit.runner.Description.createSuiteDescription;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.List;

import junit.framework.AssertionFailedError;
import net.java.quickcheck.junit.support.Discovery;

import org.junit.internal.runners.InitializationError;
import org.junit.internal.runners.JUnit4ClassRunner;
import org.junit.internal.runners.TestClass;
import org.junit.runner.Description;
import org.junit.runner.notification.Failure;
import org.junit.runner.notification.RunNotifier;

// TODO eclipse can not locate the test method (bug in getDescription?)
class OnlyQuickCheckRunner extends JUnit4ClassRunner {

  private final List<Method> testMethods;
  private final TestClass testClass;

  public OnlyQuickCheckRunner(Class<?> clazz) throws InitializationError {
    super(clazz);
    testClass = new TestClass(clazz);
    testMethods = Discovery.getCharacteristicMethods(clazz);
  }

  @Override
  protected void validate() throws InitializationError {
  }

  @Override
  public Description getDescription() {
    Description spec = createSuiteDescription(getTestClass().getName(),
        testClass.getJavaClass().getAnnotations());
    for (Method method : testMethods)
      spec.addChild(methodDescription(method));
    return spec;
  }

  @Override
  protected void runMethods(final RunNotifier notifier) {
    for (Method method : testMethods)
      invokeTestMethod(method, notifier);
  }

  @Override
  protected void invokeTestMethod(Method method, RunNotifier notifier) {
    Description description = methodDescription(method);
    Object test;
    try {
      test = createTest();
      QuickCheckTestMethod testMethod = wrapMethod(method);
      new QuickCheckMethodRoadie(test, testMethod, notifier, description)
          .run();
    } catch (AssertionFailedError e) {
      failure(notifier, description, e);
    } catch (InvocationTargetException e) {
      failure(notifier, description, e.getCause());
    } catch (Exception e) {
      failure(notifier, description, e);
    }

  }

  private void failure(RunNotifier notifier, Description description,
      Throwable cause) {
    notifier.fireTestFailure(new Failure(description, cause));
  }

  @Override
  protected QuickCheckTestMethod wrapMethod(Method method) {
    return new QuickCheckTestMethod(method, testClass);
  }
}
TOP

Related Classes of net.java.quickcheck.junit4.OnlyQuickCheckRunner

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.