package rtt.core.tests.junit.generation.executor;
import java.io.InputStream;
import org.junit.Test;
import rtt.annotations.Node;
import rtt.annotations.Node.Initialize;
import rtt.core.testing.generation.Executor;
public class ExecutorCreationTests {
// Test: anonymous classes
@Test(expected=IllegalArgumentException.class)
public void testAnonymousClass() throws Exception {
new Executor(new Object() {}.getClass());
}
// Test: local classes
@Test(expected=IllegalArgumentException.class)
public void testLocalClass() throws Exception {
@Node class LocalClass {
@Node.Initialize public LocalClass(InputStream in) {}
}
new Executor(LocalClass.class);
}
// Test: Non-static member class
@Node class NonStaticMemberClass {
@Node.Initialize public NonStaticMemberClass(InputStream in) {}
}
@Test(expected=IllegalArgumentException.class)
public void testMemberClass() throws Exception {
new Executor(NonStaticMemberClass.class);
}
// Test: no parser annotation
static class NoParserAnnotation {
public NoParserAnnotation() {}
}
@Test(expected=RuntimeException.class)
public void testNoParserAnnotation() throws Exception {
new Executor(NoParserAnnotation.class);
}
// Test: correct parser annotation
@Node static class CorrectParserAnnotation {
@Initialize public CorrectParserAnnotation(InputStream in) {}
}
@Test
public void testCorrectParserAnnotation() throws Exception {
new Executor(CorrectParserAnnotation.class);
}
// Test: super class has parser annotation
@Node static class ParserSuperClass {}
static class ExtendingParserClass extends ParserSuperClass {
@Initialize public ExtendingParserClass(InputStream in) {}
}
@Test
public void testExtending() throws Throwable {
new Executor(ExtendingParserClass.class);
}
// Test: two level super class has parser annotation
static class SecondSuperClass extends ParserSuperClass {}
static class ConcreteClass extends SecondSuperClass {
@Initialize public ConcreteClass(InputStream in) {}
}
@Test
public void testTwoLevelSuperClass() throws Exception {
new Executor(ConcreteClass.class);
}
// Test: interface has parser annotation
@Node interface ParserInterface {}
static class ImplementingParserClass implements ParserInterface {
@Initialize public ImplementingParserClass(InputStream in) {}
}
@Test
public void testImplementing() throws Exception {
new Executor(ImplementingParserClass.class);
}
}