package org.codehaus.plexus; /* * The MIT License * * Copyright (c) 2004, The Codehaus * * Permission is hereby granted, free of charge, to any person obtaining a copy of * this software and associated documentation files (the "Software"), to deal in * the Software without restriction, including without limitation the rights to * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies * of the Software, and to permit persons to whom the Software is furnished to do * so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ import java.io.File; import java.io.InputStream; import java.io.InputStreamReader; import org.codehaus.plexus.context.Context; import org.junit.After; import org.junit.Before; public abstract class PlexusJUnit4TestCase { protected PlexusContainer container; protected String basedir; private static String basedirPath; @Before public void setUp() throws Exception { InputStream configuration = null; try { configuration = getCustomConfiguration(); if (configuration == null) { configuration = getConfiguration(); } } catch (Exception e) { System.out.println("Error with configuration:"); System.out.println("configuration = " + configuration); throw e; } basedir = getBasedir(); container = createContainerInstance(); container.addContextValue("basedir", getBasedir()); // this method was deprecated customizeContext(); customizeContext(getContext()); boolean hasPlexusHome = getContext().contains("plexus.home"); if (!hasPlexusHome) { File f = getTestFile("target/plexus-home"); if (!f.isDirectory()) { f.mkdir(); } getContext().put("plexus.home", f.getAbsolutePath()); } if (configuration != null) { container.setConfigurationResource(new InputStreamReader(configuration)); } container.initialize(); container.start(); } @After public void tearDown() throws Exception { container.dispose(); container = null; } protected PlexusContainer createContainerInstance() { return new DefaultPlexusContainer(); } private Context getContext() { return container.getContext(); } //!!! this should probably take a context as a parameter so that the // user is not forced to do getContainer().addContextValue(..) // this would require a change to PlexusContainer in order to get // hold of the context ... // @deprecated use void customizeContext( Context context ) protected void customizeContext() throws Exception { } protected void customizeContext(Context context) throws Exception { } protected InputStream getCustomConfiguration() throws Exception { return null; } protected PlexusContainer getContainer() { return container; } protected InputStream getConfiguration() throws Exception { return getConfiguration(null); } protected InputStream getConfiguration(String subname) throws Exception { String className = getClass().getName(); String base = className.substring(className.lastIndexOf(".") + 1); String config = null; if (subname == null || subname.equals("")) { config = base + ".xml"; } else { config = base + "-" + subname + ".xml"; } InputStream configStream = getResourceAsStream(config); return configStream; } protected InputStream getResourceAsStream(String resource) { return getClass().getResourceAsStream(resource); } protected ClassLoader getClassLoader() { return getClass().getClassLoader(); } // ---------------------------------------------------------------------- // Container access // ---------------------------------------------------------------------- protected Object lookup(String componentKey) throws Exception { return getContainer().lookup(componentKey); } protected Object lookup(String role, String id) throws Exception { return getContainer().lookup(role, id); } protected void release(Object component) throws Exception { getContainer().release(component); } // ---------------------------------------------------------------------- // Helper methods for sub classes // ---------------------------------------------------------------------- public static File getTestFile(String path) { return new File(getBasedir(), path); } public static File getTestFile(String basedir, String path) { File basedirFile = new File(basedir); if (!basedirFile.isAbsolute()) { basedirFile = getTestFile(basedir); } return new File(basedirFile, path); } public static String getTestPath(String path) { return getTestFile(path).getAbsolutePath(); } public static String getTestPath(String basedir, String path) { return getTestFile(basedir, path).getAbsolutePath(); } public static String getBasedir() { if (basedirPath != null) { return basedirPath; } basedirPath = System.getProperty("basedir"); if (basedirPath == null) { basedirPath = new File("").getAbsolutePath(); } return basedirPath; } }