170a85db220c116bd9894652f3d27eda2e30a72bbMichael Ernstimport java.io.*;
270a85db220c116bd9894652f3d27eda2e30a72bbMichael Ernstimport java.util.*;
370a85db220c116bd9894652f3d27eda2e30a72bbMichael Ernst
410353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali/**
510353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali * Little program that checks to see if every file ending in .diff in
610353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali * the current directory is empty.  For each file, displays whether or not
710353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali * it is empty.  If any file is non-empty, exits with an error exit status,
810353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali * else exits with a 0 exit status.
910353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali *
1010353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali * Usage: java VerifyDiffs [--show_all]
1110353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali *
1210353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali * If --show_all option is used, all tests that pass will also be displayed.
1310353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali * If --show_all is not used, and all tests pass, then there will be no
1410353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali * output.
1510353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali */
1610353ed766fc48a0af6bd33d934439e695c03e3Mahmood Alipublic class VerifyDiffs {
1710353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali    private static boolean show_all = false;
1810353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali
1910353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali    private static void parseArgs(String[] args) {
204ae81f26445bc9397bd3e1edb062e0388ed82a6fMichael Ernst        for (String s : args) {
214ae81f26445bc9397bd3e1edb062e0388ed82a6fMichael Ernst            if (s.equals("--show_all")) {
2210353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali                VerifyDiffs.show_all = true;
2310353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali            }
2410353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali        }
2510353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali    }
2610353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali
2710353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali    public static void main(String[] args) {
2810353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali        parseArgs(args);
2910353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali
3010353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali        int passCount = 0;
3110353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali        int failCount = 0;
3210353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali        boolean pass = true;
3310353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali        try {
3410353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali
3510353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali            File dir = new File(".");
3610353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali
370ac5df5c9441577dac8592f1512d4a3ae7c6d156Michael Ernst            List<File> allDiffs = new ArrayList<File>();
380ac5df5c9441577dac8592f1512d4a3ae7c6d156Michael Ernst            gatherDiffs(allDiffs, dir);
390ac5df5c9441577dac8592f1512d4a3ae7c6d156Michael Ernst            Collections.sort(allDiffs);
404ae81f26445bc9397bd3e1edb062e0388ed82a6fMichael Ernst            for (File f : allDiffs) {
410ac5df5c9441577dac8592f1512d4a3ae7c6d156Michael Ernst                String fileName = f.toString();
420ac5df5c9441577dac8592f1512d4a3ae7c6d156Michael Ernst                if (fileName.startsWith("./")) {
430ac5df5c9441577dac8592f1512d4a3ae7c6d156Michael Ernst                    fileName = fileName.substring(2);
440ac5df5c9441577dac8592f1512d4a3ae7c6d156Michael Ernst                }
450ac5df5c9441577dac8592f1512d4a3ae7c6d156Michael Ernst                FileReader fr = new FileReader(f);
464ae81f26445bc9397bd3e1edb062e0388ed82a6fMichael Ernst                if (fr.read() != -1) { // if not empty, output error message
470ac5df5c9441577dac8592f1512d4a3ae7c6d156Michael Ernst                    System.out.println(fileName + " ...FAILED");
480ac5df5c9441577dac8592f1512d4a3ae7c6d156Michael Ernst                    pass = false;
490ac5df5c9441577dac8592f1512d4a3ae7c6d156Michael Ernst                    failCount++;
500ac5df5c9441577dac8592f1512d4a3ae7c6d156Michael Ernst                } else {
514ae81f26445bc9397bd3e1edb062e0388ed82a6fMichael Ernst                    if (VerifyDiffs.show_all) {
520ac5df5c9441577dac8592f1512d4a3ae7c6d156Michael Ernst                        System.out.println(fileName + " ...OK");
5310353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali                    }
540ac5df5c9441577dac8592f1512d4a3ae7c6d156Michael Ernst                    passCount++;
5510353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali                }
560ac5df5c9441577dac8592f1512d4a3ae7c6d156Michael Ernst                fr.close();
5710353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali            }
584ae81f26445bc9397bd3e1edb062e0388ed82a6fMichael Ernst        } catch (Exception e) {
5910353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali            System.out.println("verify diffs failed due to exception: "
6010353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali                               + e.getMessage());
6110353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali            pass = false;
6210353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali        }
6310353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali
6410353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali        System.out.println("Passed: " + passCount + "    Failed: " + failCount);
654ae81f26445bc9397bd3e1edb062e0388ed82a6fMichael Ernst        if (pass) {
664ae81f26445bc9397bd3e1edb062e0388ed82a6fMichael Ernst            if (VerifyDiffs.show_all) {
6710353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali                System.out.println("All tests succeeded.");
6810353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali            }
6910353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali        } else {
7010353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali            System.out.println("Tests failed.");
7110353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali            System.exit(1);
7210353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali        }
7310353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali    }
740ac5df5c9441577dac8592f1512d4a3ae7c6d156Michael Ernst
750ac5df5c9441577dac8592f1512d4a3ae7c6d156Michael Ernst    /**
760ac5df5c9441577dac8592f1512d4a3ae7c6d156Michael Ernst     * Recursively adds all files in directory dir ending in .diff to
770ac5df5c9441577dac8592f1512d4a3ae7c6d156Michael Ernst     * the list diffs.
780ac5df5c9441577dac8592f1512d4a3ae7c6d156Michael Ernst     *
790ac5df5c9441577dac8592f1512d4a3ae7c6d156Michael Ernst     * @param diffs the array to place all diff files in
800ac5df5c9441577dac8592f1512d4a3ae7c6d156Michael Ernst     * @param dir the directory to start gathering diffs
810ac5df5c9441577dac8592f1512d4a3ae7c6d156Michael Ernst     */
820ac5df5c9441577dac8592f1512d4a3ae7c6d156Michael Ernst    private static void gatherDiffs(List<File> diffs, File dir) {
834ae81f26445bc9397bd3e1edb062e0388ed82a6fMichael Ernst      for (File f : dir.listFiles()) {
844ae81f26445bc9397bd3e1edb062e0388ed82a6fMichael Ernst        if (f.toString().endsWith(".diff")) {
850ac5df5c9441577dac8592f1512d4a3ae7c6d156Michael Ernst          diffs.add(f);
860ac5df5c9441577dac8592f1512d4a3ae7c6d156Michael Ernst        }
874ae81f26445bc9397bd3e1edb062e0388ed82a6fMichael Ernst        if (f.isDirectory()) {
880ac5df5c9441577dac8592f1512d4a3ae7c6d156Michael Ernst          gatherDiffs(diffs, f);
890ac5df5c9441577dac8592f1512d4a3ae7c6d156Michael Ernst        }
900ac5df5c9441577dac8592f1512d4a3ae7c6d156Michael Ernst      }
910ac5df5c9441577dac8592f1512d4a3ae7c6d156Michael Ernst    }
9210353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali}
93