import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

/**
 * TestWrapper is a class that examines JUnit test results and outputs reports
 *  only if one or more tests failed.
 */
public class TestWrapper {

  /**
   * Prints each file listed in args to standard out, only if it
   * contained a failed JUnit test.
   * @param args the file names of the test results to examine
   */
  public static void main(String[] args) {
    for (String filename : args) {
      try {
        if (containsJUnitFailure(filename)) {
          System.out.println();
          System.out.println("Failed tests in: " + filename);
          print(filename);
        }
      } catch (Exception e) {
        System.out.println("Problem reading file " + filename);
        e.printStackTrace(System.out);
      }
    }
  }

  /**
   * Examines the given file and displays it if there are failed tests.
   *
   * @param filename the name of the file to examine.
   */
  private static boolean containsJUnitFailure(String filename) throws IOException {
    BufferedReader in = new BufferedReader(new FileReader(filename));
    String line = in.readLine();
    while (line != null) {
      if (line.contains("FAILED")) {
        in.close();
        return true;
      }
      line = in.readLine();
    }
    in.close();
    return false;
  }

  /**
   * Prints the specified file.
   * @param filename the name of the file to print
   * @throws Exception if an error occurs
   */
  private static void print(String filename) throws IOException {
    BufferedReader in = new BufferedReader(new FileReader(filename));
    String line = in.readLine();
    while (line != null) {
      System.out.println(line);
      line = in.readLine();
    }
    in.close();
  }
}