1 package jester; 2 3 import java.io.PrintStream ; 4 import java.util.ArrayList ; 5 import java.util.Iterator ; 6 import java.util.List ; 7 8 11 public class MainArguments { 12 public static final String CLASSPATH_PROPERTY = "java.class.path"; 13 14 private static final String OPTIONAL_ARGUMENT_START = "-"; 15 private static final String CLASSPATH_OPTION_START = OPTIONAL_ARGUMENT_START+"cp="; 16 private static final String SHOW_PROGRESS_DIALOG_OPTION_START = OPTIONAL_ARGUMENT_START+"q"; 17 18 private List directoryOrFileNames = null; 19 private String testClassName = null; 20 private FileExistenceChecker aFileExistenceChecker; 21 private boolean shouldShowProgressDialog = true; 22 23 public MainArguments(String [] args, FileExistenceChecker aFileExistenceChecker) throws JesterArgumentException { 24 this.aFileExistenceChecker = aFileExistenceChecker; 25 readArguments(args); 26 } 27 28 public static void printUsage(PrintStream out, String version) { 29 out.println("Jester version " + version); 30 out.println("java jester.TestTester <TestSuite> <sourceDirOrFile> <sourceDirOrFile> ..."); 31 out.println("example usage: java jester.TestTester com.xpdeveloper.tests.TestAll com/xpdeveloper/server"); 32 out.println("for FAQ see http://jester.sourceforge.net"); 33 out.println("Copyright (2000-2005) Ivan Moore. Read the license."); 34 } 35 36 public String [] getDirectoryOrFileNames() { 37 return (String []) directoryOrFileNames.toArray(new String [directoryOrFileNames.size()]); 38 } 39 40 public String getTestClassName() { 41 return testClassName; 42 } 43 44 public boolean shouldShowProgressDialog(){ 45 return shouldShowProgressDialog; 46 } 47 48 private void readArguments(String [] arguments) throws JesterArgumentException { 49 List normalArgs = new ArrayList (); 50 List optionalArgs = new ArrayList (); 51 for (int i = 0; i < arguments.length; i++) { 52 if(arguments[i].trim().startsWith(OPTIONAL_ARGUMENT_START)){ 53 optionalArgs.add(arguments[i]); 54 }else{ 55 normalArgs.add(arguments[i]); 56 } 57 } 58 setTestClassFromArguments(normalArgs); 59 setDirectoriesOrFilesToMutateFromArguments(normalArgs); 60 setOptionalClasspathFromArguments(optionalArgs); 61 setOptionalShouldShowProgressDialogFromArguments(optionalArgs); 62 63 if (testClassName == null) throw new JesterArgumentException("missing test class name argument"); 64 checkDirectoriesOrFilesToMutateExist(); 65 } 66 67 private void checkDirectoriesOrFilesToMutateExist() throws JesterArgumentException { 68 if (directoryOrFileNames == null) throw new JesterArgumentException("missing source directory/file name argument"); 69 for (Iterator name = directoryOrFileNames.iterator(); name.hasNext();) { 70 String directoryOrFileName = (String ) name.next(); 71 if(!aFileExistenceChecker.exists(directoryOrFileName)){ 72 throw new JesterArgumentException("source directory/file \""+directoryOrFileName+"\" does not exist"); 73 } 74 } 75 } 76 77 private void setTestClassFromArguments(List normalArgs) throws JesterArgumentException { 78 if(normalArgs.size() == 0){ 79 throw new JesterArgumentException("Missing Test Class Argument"); 80 } 81 testClassName = (String ) normalArgs.get(0); 82 } 83 84 private void setDirectoriesOrFilesToMutateFromArguments(List normalArgs) throws JesterArgumentException { 85 if(normalArgs.size() < 2){ 86 throw new JesterArgumentException("Missing Directories Or Files To Mutate Arguments"); 87 } 88 directoryOrFileNames = new ArrayList (); 89 directoryOrFileNames.addAll(normalArgs); 90 directoryOrFileNames.remove(0); 91 } 92 93 private void setOptionalClasspathFromArguments(List optionalArgs) { 94 for (Iterator args = optionalArgs.iterator(); args.hasNext();) { 95 String arg = (String ) args.next(); 96 if (arg.startsWith(CLASSPATH_OPTION_START)) 97 { 98 String classpath = arg.substring(CLASSPATH_OPTION_START.length()); 99 System.setProperty(CLASSPATH_PROPERTY, classpath); 100 } 101 } 102 } 103 104 private void setOptionalShouldShowProgressDialogFromArguments(List optionalArgs) { 105 for (Iterator args = optionalArgs.iterator(); args.hasNext();) { 106 String arg = (String ) args.next(); 107 if (arg.startsWith(SHOW_PROGRESS_DIALOG_OPTION_START)) 108 { 109 shouldShowProgressDialog = false; 110 return; 111 } 112 } 113 } 114 } 115 | Popular Tags |