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}