package tests;
import org.junit.*;
import static org.junit.Assert.*;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.*;
// Also see file FailedTests, that contains currently-failing tests.
/**
* JUnit tests for the IGJ annotation checker.
*/
public class IGJTest extends CheckerTest {
public IGJTest() {
super("checkers.igj.IGJChecker", "igj", "-Anomsgtext");
}
void runTestWithDefault(String expected, boolean shouldSucceed, String javaFile) {
try {
File tempFile = File.createTempFile("Test", ".java");
FileWriter temp = new FileWriter(tempFile);
Scanner scanner = new Scanner(new File(checkerDir + "/" + javaFile));
while (scanner.hasNextLine()) {
String s = scanner.nextLine();
s = s.replaceAll("public\\s+class", "class");
// @Mutable is the default in most places.
s = s.replaceAll("(?<!new )@Mutable", "");
temp.write(s);
temp.write('\n');
}
temp.flush();
runTest(expected, shouldSucceed, tempFile);
temp.close();
} catch (IOException exp) {
assertFalse("Couldn't compile file! ", true);
}
}
/** Tests fields. */
@Test public void testFields() {
test();
}
@Test public void testFieldsDefault() {
runTestWithDefault("Fields.out", false, "Fields.java");
}
/** Tests method invocation */
@Test public void testMethodInvocation() {
test();
}
/** Tests method invocation */
@Test public void testMethodInvocationDefault() {
runTestWithDefault("MethodInvocation.out", false, "MethodInvocation.java");
}
/** Tests Immutable Object */
@Test public void testImmutableObject() {
test();
}
/** Tests ListNode */
@Test public void testListNode() {
test();
}
/** Tests ThisReference */
@Test public void testThisReferenceReadOnly() {
test();
}
/** Tests ThisReference */
@Test public void testThisReferenceReadOnlyDefault() {
runTestWithDefault("ThisReferenceReadOnly.out", false, "ThisReferenceReadOnly.java");
}
@Test public void testThisReferenceMutable() {
test();
}
/** Tests ThisReference */
@Test public void testThisReferenceMutableDefault() {
runTestWithDefault("ThisReferenceMutable.out", false, "ThisReferenceMutable.java");
}
@Test public void testThisReferenceImmutable() {
test();
}
/** Tests ThisReference */
@Test public void testThisReferenceImmutableDefault() {
runTestWithDefault("ThisReferenceImmutable.out", false, "ThisReferenceImmutable.java");
}
/** Tests ForEnhanced */
@Test public void testForEnhanced() {
test();
}
@Test public void testTemplateImmutability() {
test();
}
@Test public void testTemplateImmutabilityDefault() {
runTestWithDefault("TemplateImmutability.out", false, "TemplateImmutability.java");
}
@Test public void testAssignability() {
test();
}
@Test public void testAssignabilityDefault() {
runTestWithDefault("Assignability.out", false, "Assignability.java");
}
@Test public void testOverrideGenericMethod() {
test();
}
@Test public void testArrays() {
test();
}
@Test public void testPrimitives() {
test();
}
@Test public void testFlow() {
test();
}
@Test public void testRandomTests() {
test();
}
@Test public void testMutableEnum() {
test();
}
@Test public void testInnerClassesThis() {
test();
}
@Test public void testInnerClassesInvok() {
test();
}
@Test public void testIResolution() {
test();
}
@Test public void testConstructors() {
test();
}
@Test public void testGenericClass() { test(); }
@Test public void testManifestClass() { test(); }
@Test public void testMutableClass() { test(); }
@Test public void testUnannoFieldArrayAccess() { test(); }
// TODO: MDE will add
// @Test public void testSubclassing() { test(); }
// currently failing
// @Test public void testFailedTests() { test(); }
}