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.util.HashSet; 8 import java.util.Set; 9 10 /** Parses command line arguments for JunitTestMain. */ 11 public class JunitTestArgParser { 12 final Set<String> mPackageFilters = new HashSet<>(); 13 final Set<Class<?>> mRunnerFilters = new HashSet<>(); 14 final Set<String> mGtestFilters = new HashSet<>(); 15 boolean mListTests; 16 String mJsonConfig; 17 String mJsonOutput; 18 parse(String[] args)19 public static JunitTestArgParser parse(String[] args) { 20 JunitTestArgParser parsed = new JunitTestArgParser(); 21 22 for (int i = 0; i < args.length; ++i) { 23 if (args[i].startsWith("--")) { 24 String argName = args[i].substring(2); 25 try { 26 if ("list-tests".equals(argName)) { 27 parsed.mListTests = true; 28 } else if ("package-filter".equals(argName)) { 29 parsed.mPackageFilters.add(args[++i]); 30 } else if ("runner-filter".equals(argName)) { 31 parsed.mRunnerFilters.add(Class.forName(args[++i])); 32 } else if ("gtest-filter".equals(argName)) { 33 parsed.mGtestFilters.add(args[++i]); 34 } else if ("json-results".equals(argName)) { 35 parsed.mJsonOutput = args[++i]; 36 } else if ("json-config".equals(argName)) { 37 parsed.mJsonConfig = args[++i]; 38 } else { 39 System.out.println("Ignoring flag: \"" + argName + "\""); 40 } 41 } catch (ArrayIndexOutOfBoundsException e) { 42 System.err.println("No value specified for argument \"" + argName + "\""); 43 System.exit(1); 44 } catch (ClassNotFoundException e) { 45 System.err.println("Class not found. (" + e + ")"); 46 System.exit(1); 47 } 48 } else { 49 System.out.println("Ignoring argument: \"" + args[i] + "\""); 50 } 51 } 52 if (parsed.mJsonConfig == null) { 53 System.err.println("Missing required argument --json-config."); 54 System.exit(1); 55 } 56 57 return parsed; 58 } 59 } 60