    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    }