/* * The MIT License (MIT) * * Copyright (c) 2007-2015 Broad Institute * * 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. */ package org.broad.igv.cli_plugin; import org.broad.igv.prefs.PreferencesManager; import org.broad.igv.util.TestUtils; import org.junit.Test; import java.io.File; import java.io.FilenameFilter; import java.lang.reflect.Field; import java.net.URL; import java.net.URLClassLoader; import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Set; import static junit.framework.Assert.*; /** * User: jacob * Date: 2012-Aug-09 */ public class PluginSpecReaderTest { @Test public void testLoadExternalClassFromJar() throws Exception { File extDir = new File(TestUtils.DATA_DIR + "cli_plugin", "StubJar.jar"); tstLoadExternalClass(extDir); } @Test public void testLoadExternalClassFromDir() throws Exception { File extDir = new File(TestUtils.DATA_DIR + "cli_plugin", "/"); tstLoadExternalClass(extDir); } public void tstLoadExternalClass(File extDir) throws Exception { URL homeURL = new URL("file:" + extDir.getAbsolutePath()); ClassLoader loader = URLClassLoader.newInstance( new URL[]{homeURL}, getClass().getClassLoader() ); Class clazz = loader.loadClass("org.broad.igv.StubClass"); Object obj = clazz.newInstance(); Field name = clazz.getDeclaredField("name"); String val = (String) name.get(obj); assertTrue(val.contains("I am a stub class")); } @Test public void testReadCatSpec() throws Exception { PluginSpecReader reader = AbstractPluginTest.getCatReader(); assertNotNull(reader.document); List<PluginSpecReader.Tool> tools = reader.getTools(); assertEquals(1, tools.size()); List<PluginSpecReader.Command> commands = tools.get(0).commandList; assertEquals(1, commands.size()); List<Argument> arguments = commands.get(0).argumentList; assertEquals(3, arguments.size()); boolean defOutput = true; String[] encCodecs = {null, null, "org.broad.igv.feature.tribble.IGVBEDCodec"}; for(int ii=0; ii < arguments.size(); ii++){ Argument arg = arguments.get(ii); assertEquals(defOutput, arg.isOutput()); assertEquals(encCodecs[ii], arg.getEncodingCodec()); } } /** * Check that we can read parsing attributes * @throws Exception */ @Test public void testReadParser() throws Exception{ String path = "resources/bedtools_plugin.xml"; PluginSpecReader reader = PluginSpecReader.create(path); PluginSpecReader.Tool tool = reader.getTools().get(0); List<PluginSpecReader.Command> commands = tool.commandList; int ind = 0; PluginSpecReader.Command multiinter_command = commands.get(ind); while(!multiinter_command.cmd.equals("multiinter")){ multiinter_command = commands.get(ind++); } PluginSpecReader.Parser parser = multiinter_command.outputList.get(0).parser; assertEquals("bed", parser.format); assertEquals(true, parser.strict); assertTrue(parser.decodingCodec.contains("BEDToolsDecoder")); } /** * Check that we fail fast when reading an XML document which is NOT a cli_plugin reader * * @throws Exception */ @Test public void testReadSpecFail() throws Exception { String path = TestUtils.DATA_DIR + "sessions/testBedsRelPath.xml"; PluginSpecReader reader = PluginSpecReader.create(path); assertNull(reader); } @Test public void testCustomToolPath() throws Exception{ String path = TestUtils.DATA_DIR + "cli_plugin/cat_plugin.xml"; PluginSpecReader reader = PluginSpecReader.create(path); PluginSpecReader.Tool tool = reader.getTools().get(0); String toolName = tool.name; assertEquals("cat", toolName); String newpath = "/dev/zero"; PreferencesManager.getPreferences().putToolPath(reader.getId(), toolName, newpath); assertEquals(newpath, reader.getToolPath(tool)); } //Check that all of the plugins we specify exist @Test public void testBuiltinPluginsValid() throws Exception { List<String> pluginNames = PluginSpecReader.getBuiltinPlugins(); for (String pluginName : pluginNames) { String relPath = "resources/" + pluginName; URL url = PluginSpecReader.class.getResource(relPath); //System.out.println(url); assertNotNull(url); } } //Check that each cli_plugin file is in the contents file @Test public void testBuiltinPluginsComplete() throws Exception { String pluginsPath = "src/" + PluginSpecReader.class.getPackage().getName().replace('.', '/'); File pluginResourceDir = new File(pluginsPath, "resources"); String[] fileNames = pluginResourceDir.list(new FilenameFilter() { @Override public boolean accept(File dir, String name) { return name.endsWith(".xml"); } }); Set<String> actPlugins = new HashSet<String>(Arrays.asList(fileNames)); Set<String> expPlugins = new HashSet<String>(PluginSpecReader.getBuiltinPlugins()); assertEquals(expPlugins, actPlugins); } }