Package net.java.quickcheck.junit3

Source Code of net.java.quickcheck.junit3.CharacteristicsTester

/*
*  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.junit3;

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

import junit.framework.TestCase;
import net.java.quickcheck.Characteristic;
import net.java.quickcheck.Generator;
import net.java.quickcheck.RunnerFactory;

class CharacteristicsTester extends TestCase {

  private final Method fMethod;
  private final Object fInstance;
  private final int fRuns;
  private final boolean fVerbose;
  private final Generator<Object> fGenerator;
  private final Method fSetupMethod;
  private final Method fTearDownMethod;

  CharacteristicsTester(Object testClassInstance,
      Generator<Object> generator, Method method, int runs,
      boolean verbose) {

    fInstance = testClassInstance;
    fGenerator = generator;
    fMethod = method;
    fSetupMethod = getMethod(testClassInstance, "setUp");
    fTearDownMethod = getMethod(testClassInstance, "tearDown");
    fRuns = runs;
    fVerbose = verbose;
  }

  @Override
  public int countTestCases() {
    return 1;
  }

  @Override
  public void runTest() {
    new RunnerFactory().createRunner(fGenerator, fRuns, characteristic(), fVerbose).forAll();
  }

  /**
   * @return
   */
  private Characteristic<Object> characteristic() {
    return new Characteristic<Object>() {

      public void setUp() throws Exception {
        if (fSetupMethod != null) {
          fSetupMethod.invoke(fInstance);
        }
      }

      public void specify(Object instance) throws Throwable {
        try {
          fMethod.invoke(fInstance, instance);
        } catch (InvocationTargetException e) {
          // exceptions thrown by characteristic methods may not
          // be part of their signatures so there's a
          // invocation target exception thrown
          throw e.getCause();
        }
      }

      public void tearDown() throws Exception {
        if (fTearDownMethod != null) {
          fTearDownMethod.invoke(fInstance);
        }
      }

      public String name() {
        return getClass().getName();
      }
    };
  }

  @Override
  public String getName() {
    return String.format("%s.%s[%s]", fInstance.getClass().getName(),
        fMethod.getName(), fGenerator.getClass().getName());
  }

  private static Method getMethod(Object newInstance, String methodName) {
    try {
      return newInstance.getClass().getMethod(methodName);
    } catch (NoSuchMethodException e) {
      return null;
    }
  }
}
TOP

Related Classes of net.java.quickcheck.junit3.CharacteristicsTester

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.