1 // Copyright 2014 The Chromium Authors 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 package org.chromium.testing.local; 6 7 import java.io.File; 8 import java.util.HashSet; 9 import java.util.Set; 10 import java.util.regex.Pattern; 11 12 /** 13 * Parses command line arguments for JunitTestMain. 14 */ 15 public class JunitTestArgParser { 16 17 private static final Pattern COLON = Pattern.compile(":"); 18 19 private final Set<String> mPackageFilters; 20 private final Set<Class<?>> mRunnerFilters; 21 private final Set<String> mGtestFilters; 22 private boolean mListTests; 23 private File mJsonOutput; 24 private String[] mTestJars; 25 parse(String[] args)26 public static JunitTestArgParser parse(String[] args) { 27 28 JunitTestArgParser parsed = new JunitTestArgParser(); 29 30 for (int i = 0; i < args.length; ++i) { 31 if (args[i].startsWith("-")) { 32 String argName; 33 if (args[i].startsWith("-", 1)) { 34 argName = args[i].substring(2, args[i].length()); 35 } else { 36 argName = args[i].substring(1, args[i].length()); 37 } 38 try { 39 if ("list-tests".equals(argName)) { 40 // Read the command line argument after the flag. 41 parsed.mListTests = true; 42 } else if ("package-filter".equals(argName)) { 43 // Read the command line argument after the flag. 44 parsed.addPackageFilter(args[++i]); 45 } else if ("runner-filter".equals(argName)) { 46 // Read the command line argument after the flag. 47 parsed.addRunnerFilter(Class.forName(args[++i])); 48 } else if ("gtest-filter".equals(argName)) { 49 // Read the command line argument after the flag. 50 parsed.addGtestFilter(args[++i]); 51 } else if ("json-results-file".equals(argName)) { 52 // Read the command line argument after the flag. 53 parsed.setJsonOutputFile(args[++i]); 54 } else { 55 System.out.println("Ignoring flag: \"" + argName + "\""); 56 } 57 } catch (ArrayIndexOutOfBoundsException e) { 58 System.err.println("No value specified for argument \"" + argName + "\""); 59 System.exit(1); 60 } catch (ClassNotFoundException e) { 61 System.err.println("Class not found. (" + e.toString() + ")"); 62 System.exit(1); 63 } 64 } else { 65 System.out.println("Ignoring argument: \"" + args[i] + "\""); 66 } 67 } 68 69 return parsed; 70 } 71 JunitTestArgParser()72 private JunitTestArgParser() { 73 mPackageFilters = new HashSet<String>(); 74 mRunnerFilters = new HashSet<Class<?>>(); 75 mGtestFilters = new HashSet<String>(); 76 mJsonOutput = null; 77 } 78 isListTests()79 public boolean isListTests() { 80 return mListTests; 81 } 82 getPackageFilters()83 public Set<String> getPackageFilters() { 84 return mPackageFilters; 85 } 86 getRunnerFilters()87 public Set<Class<?>> getRunnerFilters() { 88 return mRunnerFilters; 89 } 90 getGtestFilters()91 public Set<String> getGtestFilters() { 92 return mGtestFilters; 93 } 94 getJsonOutputFile()95 public File getJsonOutputFile() { 96 return mJsonOutput; 97 } 98 addPackageFilter(String packageFilter)99 private void addPackageFilter(String packageFilter) { 100 mPackageFilters.add(packageFilter); 101 } 102 addRunnerFilter(Class<?> runnerFilter)103 private void addRunnerFilter(Class<?> runnerFilter) { 104 mRunnerFilters.add(runnerFilter); 105 } 106 addGtestFilter(String gtestFilter)107 private void addGtestFilter(String gtestFilter) { 108 mGtestFilters.add(gtestFilter); 109 } 110 setJsonOutputFile(String path)111 private void setJsonOutputFile(String path) { 112 mJsonOutput = new File(path); 113 } 114 }