Java程序  |  93行  |  2.8 KB

import java.io.*;
import java.util.*;

/**
 * Little program that checks to see if every file ending in .diff in
 * the current directory is empty.  For each file, displays whether or not
 * it is empty.  If any file is non-empty, exits with an error exit status,
 * else exits with a 0 exit status.
 *
 * Usage: java VerifyDiffs [--show_all]
 *
 * If --show_all option is used, all tests that pass will also be displayed.
 * If --show_all is not used, and all tests pass, then there will be no
 * output.
 */
public class VerifyDiffs {
    private static boolean show_all = false;

    private static void parseArgs(String[] args) {
        for (String s : args) {
            if (s.equals("--show_all")) {
                VerifyDiffs.show_all = true;
            }
        }
    }

    public static void main(String[] args) {
        parseArgs(args);

        int passCount = 0;
        int failCount = 0;
        boolean pass = true;
        try {

            File dir = new File(".");

            List<File> allDiffs = new ArrayList<File>();
            gatherDiffs(allDiffs, dir);
            Collections.sort(allDiffs);
            for (File f : allDiffs) {
                String fileName = f.toString();
                if (fileName.startsWith("./")) {
                    fileName = fileName.substring(2);
                }
                FileReader fr = new FileReader(f);
                if (fr.read() != -1) { // if not empty, output error message
                    System.out.println(fileName + " ...FAILED");
                    pass = false;
                    failCount++;
                } else {
                    if (VerifyDiffs.show_all) {
                        System.out.println(fileName + " ...OK");
                    }
                    passCount++;
                }
                fr.close();
            }
        } catch (Exception e) {
            System.out.println("verify diffs failed due to exception: "
                               + e.getMessage());
            pass = false;
        }

        System.out.println("Passed: " + passCount + "    Failed: " + failCount);
        if (pass) {
            if (VerifyDiffs.show_all) {
                System.out.println("All tests succeeded.");
            }
        } else {
            System.out.println("Tests failed.");
            System.exit(1);
        }
    }

    /**
     * Recursively adds all files in directory dir ending in .diff to
     * the list diffs.
     *
     * @param diffs the array to place all diff files in
     * @param dir the directory to start gathering diffs
     */
    private static void gatherDiffs(List<File> diffs, File dir) {
      for (File f : dir.listFiles()) {
        if (f.toString().endsWith(".diff")) {
          diffs.add(f);
        }
        if (f.isDirectory()) {
          gatherDiffs(diffs, f);
        }
      }
    }
}