001package daikon.test;
002
003import static java.util.logging.Level.INFO;
004import static org.junit.Assert.assertFalse;
005import static org.junit.Assert.assertTrue;
006
007import daikon.tools.DtraceDiff;
008import java.net.URL;
009import junit.framework.TestSuite;
010import org.junit.Test;
011
012/** Daikon unit test class. */
013public class DtraceDiffTester {
014
015  /**
016   * The entry point of DtraceDiffTester
017   *
018   * @param args command-line arguments
019   */
020  public static void main(String[] args) {
021    daikon.LogHelper.setupLogs(INFO);
022    junit.textui.TestRunner.run(new TestSuite(DtraceDiffTester.class));
023  }
024
025  private static boolean diff(String file1, String file2) {
026    // System.out.println("Diff: " + file1 + " " + file2);
027    return DtraceDiff.mainTester(new String[] {find(file1), find(file2)});
028  }
029
030  private static boolean diff(String option, String optval, String file1, String file2) {
031    // System.out.println("Diff: " + file1 + " " + file2);
032    return DtraceDiff.mainTester(new String[] {option, optval, find(file1), find(file2)});
033  }
034
035  /**
036   * Returns the URL string for the specified file. A URL is used because the tests can be run from
037   * a jarfile and the 'filename' in that case is a jar URL.
038   */
039  private static String find(String file) {
040    String file1 = "daikon/test/dtracediff/" + file;
041    URL input_file_location = ClassLoader.getSystemResource(file1);
042    if (input_file_location == null) {
043      throw new Error("Cannot find " + file1);
044    }
045    return input_file_location.toExternalForm();
046  }
047
048  @Test
049  public void test_samples() {
050    // these tests should succeed
051    assertTrue(diff("AllTypes.dtrace.gz", "AllTypes.dtrace.gz"));
052    assertTrue(diff("Hanoi.dtrace.gz", "Hanoi.dtrace.gz"));
053    assertTrue(diff("Hanoi.dtrace.gz", "Hanoi-mungpointers.dtrace.gz"));
054
055    // test for the diffs that this utility is supposed to find
056    assertFalse(diff("Hanoi.dtrace.gz", "Hanoi-badvar.dtrace.gz"));
057    assertFalse(diff("Hanoi.dtrace.gz", "Hanoi-badvalue.dtrace.gz"));
058    assertFalse(diff("Hanoi.dtrace.gz", "Hanoi-truncated.dtrace.gz"));
059
060    // test that command-line options work (to avoid comparing ppts with
061    // a missing variable)
062    assertTrue(
063        diff(
064            "--ppt-omit-pattern",
065            "six170.Hanoi.showTowers*",
066            "Hanoi.dtrace.gz",
067            "Hanoi-badvar.dtrace.gz"));
068    assertTrue(
069        diff("--var-omit-pattern", "this.height", "Hanoi.dtrace.gz", "Hanoi-badvar.dtrace.gz"));
070    assertTrue(
071        diff(
072            "--ppt-select-pattern",
073            "six170.Hanoi.moveDisk*",
074            "Hanoi.dtrace.gz",
075            "Hanoi-badvar.dtrace.gz"));
076    // needs to test --var-select-pattern
077  }
078}