package org.freeplane.main.application; import static org.junit.Assert.*; import java.util.ArrayList; import java.util.Arrays; import org.freeplane.main.application.CommandLineParser.Options; import org.junit.Before; import org.junit.Test; public class CommandLineParserTest { private String[] emptyArray = new String[0]; private String[] someFiles = args("file1", "file2"); private String menuItem = "$SomeAction0$"; private String[] menuItems = args(menuItem); private String[] menuItemsWithQuit = args(menuItem, CommandLineParser.QUIT_MENU_ITEM_KEY); @Before public void setUp() { System.setProperty("nonInteractive", "false"); } @Test public void testFilesOnly() { final Options result = CommandLineParser.parse(someFiles); assertEquals(Arrays.asList(someFiles), result.getFilesToOpen()); check(result, someFiles, emptyArray, false, false, false); } @Test public void testFilesAndMenuItemOneArg() { final String[] args = merge(args("-X" + menuItem), someFiles); check(CommandLineParser.parse(args), someFiles, menuItems, false, false, false); } @Test public void testFilesAndMenuItemTwoArgs() { final String[] args = merge(args("-X", menuItem), someFiles); check(CommandLineParser.parse(args), someFiles, menuItems, false, false, false); } // options must come first or they are interpreted as files @Test public void testWrongOrder() { final String[] args = merge(someFiles, args("-X" + menuItem)); check(CommandLineParser.parse(args), args, emptyArray , false, false, false); } @Test public void testFilesAndMenuItemAndStop() { final String[] args = merge(args("-SX" + menuItem), someFiles); check(CommandLineParser.parse(args), someFiles, menuItemsWithQuit, true, false, false); } @Test public void testFilesAndMenuItemAndHelp1() { final String[] args = merge(args("-hX" + menuItem), someFiles); check(CommandLineParser.parse(args), someFiles, menuItems, false, false, true); } @Test public void testFilesAndMenuItemAndHelp2() { final String[] args = merge(args("--help", "-X" + menuItem), someFiles); check(CommandLineParser.parse(args), someFiles, menuItems, false, false, true); } @Test public void testFilesAndMenuItemAndStopAndNonInteractive() { final String[] args = merge(args("-NSX" + menuItem), someFiles); check(CommandLineParser.parse(args), someFiles, menuItemsWithQuit, true, true, false); } @Test public void testFilesAndMenuItemAndStopTwoArgs() { final String[] args = merge(args("-X" + menuItem, "-S"), someFiles); check(CommandLineParser.parse(args), someFiles, menuItemsWithQuit, true, false, false); } @Test public void testFilesAndMenuItemAndStopAndNonInteractiveThreeArgs() { final String[] args = merge(args("-X" + menuItem, "-N", "-S"), someFiles); check(CommandLineParser.parse(args), someFiles, menuItemsWithQuit, true, true, false); } private void check(Options result, String[] filesToOpen, final String[] menuItems, final boolean stopAfterLaunch, boolean nonInteractive, boolean isHelpRequested) { assertArrayEquals(filesToOpen, result.getFilesToOpenAsArray()); assertArrayEquals(menuItems, result.getMenuItemsToExecuteAsArray()); assertEquals(stopAfterLaunch, result.isStopAfterLaunch()); assertEquals(nonInteractive, result.isNonInteractive()); } private String[] args(String... strings) { return strings; } private String[] merge(String[]... stringArrays) { ArrayList<String> result = new ArrayList<String>(); for (String[] strings : stringArrays) { result.addAll(Arrays.asList(strings)); } return result.toArray(new String[result.size()]); } }