package fitnesse.components; import static org.junit.Assert.*; import org.junit.Test; import java.io.File; public class PluginsClassLoaderTest { @Test public void whenPluginsDirectoryDoesNotExist() { try { PluginsClassLoader pluginsClassLoader = new PluginsClassLoader(); pluginsClassLoader.pluginsDirectory = "nonExistingPluginsDirectory"; assertFalse(new File(pluginsClassLoader.pluginsDirectory).exists()); pluginsClassLoader.addPluginsToClassLoader(); assertTrue("didn't cause exception", true); } catch (Exception e) { fail("if exception occurs when plugins directory does not exist"); } } @Test public void addPluginsToClassLoader() throws Exception { String[] dynamicClasses = new String[]{"fitnesse.testing.PluginX", "fitnesse.testing.PluginY"}; //todo This fails because some other test probably loads plugin path assertLoadingClassCausesException(dynamicClasses); PluginsClassLoader pluginsClassLoader = new PluginsClassLoader(); assertTrue(new File(pluginsClassLoader.pluginsDirectory).exists()); pluginsClassLoader.addPluginsToClassLoader(); assertLoadingClassWorksNow(dynamicClasses); } private void assertLoadingClassWorksNow(String... dynamicClasses) { for (String dynamicClass : dynamicClasses) { try { Class<?> dynamicallyLoadedClass = Class.forName(dynamicClass); assertEquals(dynamicClass, dynamicallyLoadedClass.getName()); } catch (ClassNotFoundException e) { fail(e.getMessage()); } } } private void assertLoadingClassCausesException(String... dynamicClasses) { for (String dynamicClass : dynamicClasses) { try { Class.forName(dynamicClass); fail("plugins are not yet added to the classloader"); } catch (ClassNotFoundException e) { assertEquals(dynamicClass, e.getMessage()); } } } }