/** * Copyright 2011-2013 Terracotta, Inc. * Copyright 2011-2013 Oracle, Inc. * 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.jcache.internal; import org.junit.rules.MethodRule; import org.junit.runners.model.FrameworkMethod; import org.junit.runners.model.Statement; import java.util.logging.Logger; /** * For the TCK we need to have an exclude list of bad tests so that disabling tests * can be done without changing code. * * This class creates a rule for the class provided * * The exclude list is created by {@link ExcludeList} by creating a file in the root of your * classpath called "ExcludeList". There is an example in the testRI module for testing the RI. * * @author Yannis Cosmadopoulos * @since 1.0 */ @SuppressWarnings("deprecation") public abstract class AbstractTestExcluder implements MethodRule { private final Logger logger = Logger.getLogger(getClass().getName()); /** * {@inheritDoc} */ public Statement apply(Statement statement, FrameworkMethod frameworkMethod, Object o) { final String methodName = frameworkMethod.getName(); final String className = frameworkMethod.getMethod().getDeclaringClass().getName(); if (isExcluded(methodName)) { return new ExcludedStatement(className, methodName, logger); } else { return statement; } } protected abstract boolean isExcluded(String methodName); protected Logger getLogger() { return logger; } /** * Statement for excluded methods */ private static final class ExcludedStatement extends Statement { private final String methodName; private final String className; private final Logger logger; private ExcludedStatement(String className, String methodName, Logger logger) { this.className = className; this.methodName = methodName; this.logger = logger; } @Override public void evaluate() throws Throwable { logger.info("===== EXCLUDING TEST '" + className + "'\t'" + methodName + "'."); } } }