### Question:
TempletonUtils { public static String extractPercentComplete(String line) { Matcher jar = JAR_COMPLETE.matcher(line); if (jar.find()) return jar.group().trim(); Matcher pig = PIG_COMPLETE.matcher(line); if (pig.find()) return pig.group().trim(); Matcher hive = HIVE_COMPLETE.matcher(line); if(hive.find()) { return "map " + hive.group(1) + " reduce " + hive.group(2); } Matcher tez = TEZ_COMPLETE.matcher(line); if(tez.find()) { int totalTasks = 0; int completedTasks = 0; do { Matcher counts = TEZ_COUNTERS.matcher(tez.group()); List<String> items = new ArrayList<String>(4); while(counts.find()) { items.add(counts.group()); } completedTasks += Integer.parseInt(items.get(1)); if(items.size() == 3) { totalTasks += Integer.parseInt(items.get(2)); } else { totalTasks += Integer.parseInt(items.get(3)); } } while(tez.find()); if(totalTasks == 0) { return "0% complete (0 total tasks)"; } return completedTasks * 100 / totalTasks + "% complete"; } return null; }  static boolean isset(String s); static boolean isset(char ch); static boolean isset(T[] a); static boolean isset(Collection<T> col); static boolean isset(Map<K, V> col); static String extractPercentComplete(String line); static String extractChildJobId(String line); static String encodeArray(String[] plain); static String encodeArray(List<String> list); static String[] decodeArray(String s); static String[] hadoopFsListAsArray(String files, Configuration conf,
                         String user); static String hadoopFsListAsString(String files, Configuration conf,
                        String user); static String hadoopFsFilename(String fname, Configuration conf, String user); static List<Path> hadoopFsListChildren(String dirName, Configuration conf, String user); static boolean hadoopFsIsMissing(FileSystem fs, Path p); static String addUserHomeDirectoryIfApplicable(String origPathStr, String user); static Path hadoopFsPath(String fname, final Configuration conf, String user); static int fetchUrl(URL url); static Map<String, String> hadoopUserEnv(String user,
                          String overrideClasspath); static String quoteForWindows(String param); static void addCmdForWindows(ArrayList<String> args); static String unEscapeString(String s); static String findContainingJar(Class<?> clazz, String fileNamePattern); static StringBuilder dumpPropMap(String header, Properties props); static StringBuilder dumpPropMap(String header, Map<String, String> map); static final Pattern JAR_COMPLETE; static final Pattern PIG_COMPLETE; static final Pattern HIVE_COMPLETE; static final Pattern TEZ_COMPLETE; static final Pattern TEZ_COUNTERS; static final Pattern JAR_ID; static final Pattern PIG_ID; static final Pattern[] ID_PATTERNS; }### Answer:
@Test public void testExtractPercentComplete() { Assert.assertNull(TempletonUtils.extractPercentComplete("fred")); for (String line : CONTROLLER_LINES) { Assert.assertNull(TempletonUtils.extractPercentComplete(line)); } String fifty = "2011-12-15 18:12:36,333 [main] INFO org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher - 50% complete"; Assert.assertEquals("50% complete", TempletonUtils.extractPercentComplete(fifty)); }