001 /*****************************************************************************
002 * Copyright (C) NanoContainer Organization. All rights reserved. *
003 * ------------------------------------------------------------------------- *
004 * The software in this package is published under the terms of the BSD *
005 * style license a copy of which has been included with this distribution in *
006 * the LICENSE.txt file. *
007 * *
008 *****************************************************************************/
009
010 package org.nanocontainer;
011
012 import java.io.File;
013 import java.io.IOException;
014 import java.net.URL;
015
016 import junit.framework.TestCase;
017
018 import org.apache.commons.cli.CommandLine;
019
020
021 /**
022 * @author Mauro Talevi
023 */
024 public class StandaloneTestCase extends TestCase {
025
026 public void testShouldBeAbleToInvokeMainMethodWithScriptFromFile() throws IOException, ClassNotFoundException {
027 File absoluteScriptPath = getAbsoluteScriptPath();
028 Standalone.main(new String[] {
029 "-c",
030 absoluteScriptPath.getAbsolutePath(),
031 "-n"
032 });
033 }
034
035 public void testShouldBeAbleToInvokeMainMethodWithScriptFromClasspathWithXmlIncludes() throws IOException, ClassNotFoundException {
036 Standalone.main(new String[] {
037 "-r",
038 "/org/nanocontainer/nanocontainer-with-include.xml",
039 "-n"
040 });
041 }
042
043 private File getAbsoluteScriptPath() {
044 String className = getClass().getName();
045 String relativeClassPath = "/" + className.replace('.', '/') + ".class";
046 URL classURL = Standalone.class.getResource(relativeClassPath);
047 String absoluteClassPath = classURL.getFile();
048 File absoluteDirPath = new File(absoluteClassPath).getParentFile();
049 File absoluteScriptPath = new File(absoluteDirPath, "nanocontainer.xml");
050 return absoluteScriptPath;
051 }
052
053 public void testCommandLineWithHelp() throws Exception {
054 CommandLine cl = Standalone.getCommandLine(new String[]{"-h"}, Standalone.createOptions());
055 assertTrue(cl.hasOption('h'));
056 assertFalse(cl.hasOption('v'));
057 assertNull(cl.getOptionValue('c'));
058 assertFalse(cl.hasOption('q'));
059 assertFalse(cl.hasOption('n'));
060 }
061
062 public void testCommandLineWithVersion() throws Exception {
063 CommandLine cl = Standalone.getCommandLine(new String[]{"-v"}, Standalone.createOptions());
064 assertFalse(cl.hasOption('h'));
065 assertTrue(cl.hasOption('v'));
066 assertNull(cl.getOptionValue('c'));
067 assertFalse(cl.hasOption('q'));
068 assertFalse(cl.hasOption('n'));
069 }
070
071 public void testCommandLineWithCompostion() throws Exception {
072 CommandLine cl = Standalone.getCommandLine(new String[]{"-cpath"}, Standalone.createOptions());
073 assertFalse(cl.hasOption('h'));
074 assertFalse(cl.hasOption('v'));
075 assertEquals("path", cl.getOptionValue('c'));
076 assertFalse(cl.hasOption('q'));
077 assertFalse(cl.hasOption('n'));
078 }
079
080 public void testCommandLineWithCompositionAndQuiet() throws Exception {
081 CommandLine cl = Standalone.getCommandLine(new String[]{"-cpath", "-q"}, Standalone.createOptions());
082 assertFalse(cl.hasOption('h'));
083 assertFalse(cl.hasOption('v'));
084 assertEquals("path", cl.getOptionValue('c'));
085 assertTrue(cl.hasOption('q'));
086 assertFalse(cl.hasOption('n'));
087 }
088
089 public void testCommandLineWithCompositionAndQuietAndNowait() throws Exception {
090 CommandLine cl = Standalone.getCommandLine(new String[]{"-cpath", "-q", "-n"}, Standalone.createOptions());
091 assertFalse(cl.hasOption('h'));
092 assertFalse(cl.hasOption('v'));
093 assertEquals("path", cl.getOptionValue('c'));
094 assertTrue(cl.hasOption('q'));
095 assertTrue(cl.hasOption('n'));
096 }
097
098 }