/** * Copyright (c) 2009-2011, The HATS Consortium. All rights reserved. * This file is licensed under the terms of the Modified BSD License. */ package abs.frontend.parser; import static org.junit.Assert.*; import org.junit.Test; import abs.frontend.FrontendTest; import abs.frontend.ast.ClassDecl; import abs.frontend.ast.Decl; import abs.frontend.ast.MethodImpl; import abs.frontend.ast.Model; public class RecoverTest extends FrontendTest { @Test public void importTest() { Model m = assertParseError("x class C { }"); assertContainsDeclWithName(m, "C"); } @Test public void intfTest() { Model m = assertParseError(" interface I { class C { }"); assertContainsDeclWithName(m, "I"); } @Test public void intfTest2() { Model m = assertParseError(" interface I class C { }"); assertContainsDeclWithName(m, "I"); } @Test public void intfTest3() { Model m = assertParseError(" interface I extends J,K class C { }"); assertContainsDeclWithName(m, "I"); } @Test public void intfTest4() { Model m = assertParseError(" interface I { I m() } class C { }"); assertContainsDeclWithName(m, "I"); } @Test public void classDeclTest() { Model m = assertParseError(" class C { class D { }"); assertContainsDeclWithName(m, "C"); } @Test public void classDeclTest2() { Model m = assertParseError(" class C implements I { class D { }"); assertContainsDeclWithName(m, "C"); } @Test public void classDeclTest3() { Model m = assertParseError(" class C implements I { XXX asd statasd asdasd }"); assertContainsDeclWithName(m, "C"); } @Test public void methodTest3() { Model m = assertParseError(" class C { Unit m() { asdasd } }"); assertContainsMethodWithName(m, "m"); } // FIXME: recovery fails: //@Test public void caseExp() { Model m = assertParseError("interface K {} { Maybe<[Somewhere] K> m = Nothing; " + "[Far] K k = case m { Nothing => null; Just(x) => x; _ => null }; }"); assertContainsDeclWithName(m, "K"); } private void assertContainsMethodWithName(Model m, String name) { boolean found = false; for (MethodImpl mi : ((ClassDecl) m.getCompilationUnit(0).getModuleDecl(0).getDecl(0)).getMethods()) { if (mi.getMethodSig().getName().equals(name)) { found = true; } } assertTrue("Did not found method with name " + name, found); } private void assertContainsDeclWithName(Model m, String name) { boolean found = false; for (Decl d : m.getCompilationUnit(0).getModuleDecl(0).getDecls()) { if (d.getName().equals(name)) { found = true; } } assertTrue("Did not found decl with name " + name, found); } }