All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.tapestry5.ioc.junit.TapestryIOCJUnit4ClassRunner Maven / Gradle / Ivy

The newest version!
// Licensed 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 org.apache.tapestry5.ioc.junit;

import org.apache.tapestry5.ioc.annotations.Inject;
import org.apache.tapestry5.ioc.def.ModuleDef;
import org.junit.runner.Description;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
import org.junit.runner.notification.RunListener;
import org.junit.runner.notification.RunNotifier;
import org.junit.runner.notification.StoppedByUserException;
import org.junit.runners.BlockJUnit4ClassRunner;
import org.junit.runners.model.InitializationError;
import org.junit.runners.model.Statement;

/**
 *
 * A JUnit4ClassRunner to help with Tapestry IOC integration tests. The test
 * runner requires a registry configuration to be defined in a {@link Registry}
 * annotation. A {@link RegistryShutdownType} can be specified to configure the
 * lifecycle of the test registry and it's services
 *
 * 
 *
 * {@link org.apache.tapestry5.ioc.junit.ModuleDef}s can be added to the
 * {@link org.apache.tapestry5.ioc.Registry} by annotating a factory method(s)
 * with {@link ModuleDef}. These {@link ModuleDef} factory methods must be
 * 
    *
  • public
  • *
  • static
  • *
  • take zero arguments
  • *
  • return a subclass of {@link org.apache.tapestry5.ioc.junit.ModuleDef}
  • *
* * * * Any services defined in the registry can be {@link Inject}ed into the test * class to be used during testing. * */ public class TapestryIOCJUnit4ClassRunner extends BlockJUnit4ClassRunner { private final TestRegistryManager registryManager; public TapestryIOCJUnit4ClassRunner(Class type) throws InitializationError { super(type); this.registryManager = new TestRegistryManager(type); } @Override public void run(RunNotifier notifier) { RunNotifier wrapper = new RegistryManagerRunNotifier(registryManager, notifier); super.run(wrapper); } @Override protected Statement withAfterClasses(Statement statement) { final Statement superStatement = super.withAfterClasses(statement); return new Statement() { @Override public void evaluate() throws Throwable { superStatement.evaluate(); registryManager.afterTestClass(); } }; } @Override protected Object createTest() throws Exception { org.apache.tapestry5.ioc.Registry registry = registryManager.getOrCreateRegistry(); return registry.autobuild(getTestClass().getJavaClass()); } public static class RegistryManagerRunNotifier extends RunNotifier { private final RunNotifier delegate; private final TestRegistryManager registryManager; public RegistryManagerRunNotifier(TestRegistryManager registryManager, RunNotifier delegate) { super(); this.delegate = delegate; this.registryManager = registryManager; } @Override public void addListener(RunListener listener) { delegate.addListener(listener); } @Override public void removeListener(RunListener listener) { delegate.removeListener(listener); } @Override public void fireTestRunStarted(Description description) { delegate.fireTestRunStarted(description); } @Override public void fireTestRunFinished(Result result) { delegate.fireTestRunFinished(result); } @Override public void fireTestStarted(Description description) throws StoppedByUserException { delegate.fireTestStarted(description); } @Override public void fireTestFailure(Failure failure) { delegate.fireTestFailure(failure); } @Override public void fireTestAssumptionFailed(Failure failure) { delegate.fireTestAssumptionFailed(failure); } @Override public void fireTestIgnored(Description description) { delegate.fireTestIgnored(description); } @Override public void fireTestFinished(Description description) { registryManager.afterTestMethod(); delegate.fireTestFinished(description); } @Override public void pleaseStop() { delegate.pleaseStop(); } @Override public void addFirstListener(RunListener listener) { delegate.addFirstListener(listener); } } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy