/** * <copyright> * </copyright> * * $Id: ClassTest.java,v 1.1 2009-11-02 11:25:13 bettini Exp $ */ package it.xsemantics.example.fj.tests; import it.xsemantics.example.fj.fj.Class; import it.xsemantics.example.fj.fj.FjFactory; import it.xsemantics.example.fj.fj.Program; import it.xsemantics.example.fj.validation.FJJavaValidator; import java.io.IOException; import junit.textui.TestRunner; import org.eclipse.emf.common.util.BasicDiagnostic; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.resource.Resource.Diagnostic; /** * <!-- begin-user-doc --> A test case for the model object ' * <em><b>Class</b></em>'. <!-- end-user-doc --> * * @generated NOT */ public class ClassTest extends TestWithLoader { /** * The fixture for this Class test case. <!-- begin-user-doc --> <!-- * end-user-doc --> */ protected Class fixture = null; /** * Sets the fixture for this Class test case. <!-- begin-user-doc --> <!-- * end-user-doc --> */ public void setFixture(Class fixture) { this.fixture = fixture; } /** * <!-- begin-user-doc --> <!-- end-user-doc --> */ public static void main(String[] args) { TestRunner.run(ClassTest.class); } /** * Constructs a new Class test case with the given name. <!-- begin-user-doc * --> <!-- end-user-doc --> */ public ClassTest(String name) { super(name); } /** * Returns the fixture for this Class test case. <!-- begin-user-doc --> * <!-- end-user-doc --> */ protected it.xsemantics.example.fj.fj.Class getFixture() { return fixture; } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @see junit.framework.TestCase#setUp() */ protected void setUp() throws Exception { super.setUp(); setFixture(FjFactory.eINSTANCE.createClass()); } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @see junit.framework.TestCase#tearDown() * @generated */ protected void tearDown() throws Exception { setFixture(null); super.tearDown(); } /** * Test for file class_sytanx_error.fj which contains a syntax error */ public void testClassSyntaxError() { Resource resource = loadResource("class_syntax_error.fj"); EList<Diagnostic> errors = resource.getErrors(); System.out.println(errors); assertEquals(2, errors.size()); } /** * Detects simple cycle in the hierarchy * * <pre> * class A extends A { * } * </pre> * * @throws IOException */ public void testSimpleCycle() throws IOException { Program program = loadProgramFromString("class A extends A {}"); String errors = getTypeChecker().typeCheck(program.getClasses().get( 0)); System.out.println("errors: " + errors); assertEquals("class hierarchy is not acyclic for Class 'A'", errors); } /** * Detects cycles in the class hierarchy * * A - B - C - A */ public void testAcyclic() { Class A = FjFactory.eINSTANCE.createClass(); A.setName("A"); Class B = FjFactory.eINSTANCE.createClass(); B.setName("B"); B.setSuperclass(A); Class C = FjFactory.eINSTANCE.createClass(); C.setName("C"); C.setSuperclass(B); Class A1 = FjFactory.eINSTANCE.createClass(); A1.setName("A"); A1.setSuperclass(C); // we need the resource for computing superclasses Resource resource = createResource(); resource.getContents().add(A); resource.getContents().add(B); resource.getContents().add(C); resource.getContents().add(A1); FJJavaValidator validator = getValidator(); BasicDiagnostic basicDiagnostic = new BasicDiagnostic(); validator.validate(A1, basicDiagnostic, null); System.out.println("diagnostic: " + basicDiagnostic.toString()); System.out.println("diagnostic: " + basicDiagnostic.getChildren().get(0).getMessage()); String diagnostic = basicDiagnostic.getChildren().get(0).toString(); System.out.println("diagnostic: " + diagnostic); assertEquals( "Diagnostic ERROR code=CheckTypeFailedClass \"class hierarchy is not acyclic for Class 'A'\" at Class'A'", diagnostic); } /** * Test for file classes with the same name in the same program */ public void testDuplicateClassesValidation() { Resource resource = loadResource("duplicate_classes.fj"); Program program = (Program) resource.getContents().get(0); Class A1 = program.getClasses().get(0); FJJavaValidator validator = getValidator(); BasicDiagnostic basicDiagnostic = new BasicDiagnostic(); validator.validate(A1, basicDiagnostic, null); assertEquals(2, basicDiagnostic.getChildren().size()); assertEquals("Duplicate Class 'A'", basicDiagnostic.getChildren().get(0).getMessage()); assertEquals("Duplicate Class 'A'", basicDiagnostic.getChildren().get(1).getMessage()); } } // ClassTest