/** * 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); } }