blob: eb4db2521165571ca168321fd670720a256f0dcd [file] [log] [blame]
/**
* Licensed to Jasig under one or more contributor license
* agreements. See the NOTICE file distributed with this work
* for additional information regarding copyright ownership.
* Jasig 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 org.apache.tapestry5.jcache.internal;
// import org.jsr107.tck.testutil.AbstractTestExcluder;
import java.util.Iterator;
import java.util.ServiceLoader;
import javax.cache.annotation.BeanProvider;
import org.junit.Rule;
import org.junit.rules.MethodRule;
/**
* Base class that ALL annotation/interceptor tests MUST extend from
*
* @author Eric Dalquist
* @version $Revision$
*/
@SuppressWarnings("deprecation")
public class AbstractInterceptionTest
{
private static final BeanProvider beanProvider;
static
{
BeanProvider localBeanProvider = null;
try
{
final ServiceLoader<BeanProvider> serviceLoader = ServiceLoader
.load(BeanProvider.class);
final Iterator<BeanProvider> it = serviceLoader.iterator();
localBeanProvider = it.hasNext() ? it.next() : null;
}
catch (Throwable t)
{
// ignore
System.err
.println("Failed to load BeanProvider SPI impl, annotation tests will be ignored");
t.printStackTrace(System.err);
}
beanProvider = localBeanProvider;
}
/**
* Rule used to exclude tests that do not implement Annotations
*/
@Rule
public final MethodRule rule = new AbstractTestExcluder()
{
@Override
protected boolean isExcluded(String methodName)
{
// Exclude all tests if annotations are not supported or no beanProvider has been set
return beanProvider == null;
}
};
/**
* Loads a specified bean by type, used to retrieve an annotated bean to test from the
* underlying implementation
*
* @param beanClass
* The type to load
* @return The loaded bean
*/
protected final <T> T getBeanByType(Class<T> beanClass)
{
if (beanProvider == null) { throw new IllegalStateException(
"No tests should be run if beanProvider is null"); }
return beanProvider.getBeanByType(beanClass);
}
}