/** * This file is part of muCommander, http://www.mucommander.com * Copyright (C) 2002-2016 Maxence Bernard * * muCommander is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * muCommander is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package com.mucommander.commons.file; import org.testng.IMethodInstance; import org.testng.IMethodInterceptor; import org.testng.ITestContext; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import java.util.Properties; /** * Used to import system properties and disable specific class tests at runtime. * @author Nicolas Rinaudo */ public class FileTestTransformer implements IMethodInterceptor { // - Constants ----------------------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------------------------------- private static final String PATH_PROPERTY = "test.properties.file"; // - Initialisation ------------------------------------------------------------------------------------------------ // ----------------------------------------------------------------------------------------------------------------- static { String path; InputStream in; Properties properties; // Makes sure the required System property is set. if((path = System.getProperty(PATH_PROPERTY)) == null) throw new IllegalStateException(PATH_PROPERTY + " not set."); // Loads the properties. in = null; try { in = new FileInputStream(new File(path)); properties = new Properties(); properties.load(in); } catch(IOException e) {throw new IllegalStateException(e);} finally { if(in != null) { try {in.close();} catch(IOException e) { // Nothing we can do about this. } } } // Configures the system properties. for(Object key: properties.keySet()) System.setProperty(key.toString(), properties.get(key).toString()); } // - IAnnotationTransformer implementation ------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------------------------------- public List<IMethodInstance> intercept(List<IMethodInstance> methods, ITestContext context) { List<IMethodInstance> out; String value; out = new ArrayList<IMethodInstance>(); for(IMethodInstance method: methods) { Class aClass; aClass = method.getMethod().getTestClass().getRealClass(); if(aClass == null || (value = System.getProperty(aClass.getName() + "#enabled")) == null || Boolean.parseBoolean(value)) out.add(method); } return out; } }