package org.opennms.util.ilr; import static org.junit.Assert.*; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import org.junit.Before; import org.junit.Test; public class OptionTest { private OptionTester m_argHandler; private ArgumentParser m_argParser; public static class OptionTester { boolean arg1 = false; boolean arg2 = false; boolean arg3 = false; String fileName = ""; @Option(shortName = "arg1", longName = "argumentOne", help = "this is argument one") public void handleArg1() { arg1 = true; } @Option(shortName = "arg2", longName = "argumentTwo", help = "this is argument two") public void handleArg2() { arg2 = true; } @Option(shortName = "arg3", longName = "argumentThree", help = "this is argument three") public void handleArg3() { arg3 = true; } @Arguments(help = "this is one or more String Arguments") public void handleFileArguments(String arg) { fileName += " "+ arg; } public boolean getArg1(){ return arg1; } public boolean getArg2(){ return arg2; } public boolean getArg3(){ return arg3; } public String getFileName(){ return fileName; } public void reset() { arg1 = false; arg2 = false; arg3 = false; } } @Before public void setUp() { m_argHandler = new OptionTester(); m_argParser = new ArgumentParser("Test", m_argHandler); } @Test public void testAnnotations() { OptionTester argHandler = new OptionTester(); Method [] methods = argHandler.getClass().getMethods(); for(Method m: methods){ if(m.isAnnotationPresent(Option.class)){ System.err.println(m); Option option = m.getAnnotation(Option.class); System.err.println(option); } } } @Test public void testParseLongOption() throws IllegalArgumentException, IllegalAccessException, InvocationTargetException { m_argParser.processArgs(new String []{"--argumentOne"}); assertTrue(m_argHandler.getArg1()); } @Test public void testParseShortOption() throws IllegalArgumentException, IllegalAccessException, InvocationTargetException { m_argParser.processArgs(new String []{"-arg1"}); assertTrue(m_argHandler.getArg1()); } @Test public void testFindOption() { assertNotNull(m_argParser.findOptionByShortName("arg1")); assertNotNull(m_argParser.findOptionByLongName("argumentOne")); } @Test public void testFindAndParseMultipleOptions() throws IllegalArgumentException, IllegalAccessException, InvocationTargetException{ m_argParser.processArgs(new String []{"--argumentTwo", "-arg1", "--argumentThree"}); assertTrue(m_argHandler.getArg1()); assertTrue(m_argHandler.getArg2()); assertTrue(m_argHandler.getArg3()); m_argHandler.reset(); m_argParser.processArgs(new String []{"--argumentOne", "-arg3"}); assertTrue(m_argHandler.getArg1()); assertFalse(m_argHandler.getArg2()); assertTrue(m_argHandler.getArg3()); m_argHandler.reset(); m_argParser.processArgs(new String []{"TestLogFile.log", "-arg1", "--argumentTwo"}); assertTrue(m_argHandler.getArg1()); assertTrue(m_argHandler.getArg2()); assertFalse(m_argHandler.getArg3()); } @Test public void testParseHelpOption() throws IllegalArgumentException, IllegalAccessException, InvocationTargetException { m_argParser.processArgs(new String [] {"-h"}); } @Test(expected=IllegalArgumentException.class) public void testParseInvalidArgument() throws IllegalArgumentException, IllegalAccessException, InvocationTargetException { m_argParser.processArgs(new String [] {"-arg4"}); } @Test public void testFileArgument() throws IllegalArgumentException, IllegalAccessException, InvocationTargetException { m_argParser.processArgs(new String [] {"-arg3", "--argumentTwo", "a", "b", "c", "d", "e"}); assertEquals(" a b c d e", m_argHandler.getFileName()); assertFalse(m_argHandler.getArg1()); assertTrue(m_argHandler.getArg2()); assertTrue(m_argHandler.getArg3()); } }