/** * 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.analyser; import static abs.frontend.analyser.ErrorMessage.*; import static org.junit.Assert.assertTrue; import org.junit.Test; import abs.frontend.FrontendTest; import abs.frontend.ast.Model; public class DuplicateCheckTest extends FrontendTest { @Test public void interfaceDuplicates() { Model p = assertParseOk("interface I {} interface I {}"); assertEndsWith(p.typeCheck().getFirstError(), DUPLICATE_TYPE_DECL.withArgs("I")); } @Test public void datatypeDuplicates() { Model p = assertParseOk("data D; data D;"); assertEndsWith(p.typeCheck().getFirstError(), DUPLICATE_TYPE_DECL.withArgs("D")); } @Test public void typeDuplicates() { Model p = assertParseOk("data D; interface D { }"); assertEndsWith(p.typeCheck().getFirstError(), DUPLICATE_TYPE_DECL.withArgs("D")); } @Test public void typeDuplicates2() { Model p = assertParseOk("data D; data X; type D = X;"); assertEndsWith(p.typeCheck().getFirstError(), DUPLICATE_TYPE_DECL.withArgs("D")); } @Test public void duplicateClasses() { Model p = assertParseOk("class C {} class C {}"); assertEndsWith(p.typeCheck().getFirstError(), DUPLICATE_CLASS_NAME.withArgs("C")); } @Test public void duplicateFunctions() { Model p = assertParseOk("data Test = Test; def Test zero() = Test; def Test zero() = Test;"); assertEndsWith(p.typeCheck().getFirstError(), DUPLICATE_FUN_NAME.withArgs("zero")); } private void assertEndsWith(SemanticCondition expected, String actual) { assertTrue("Expected that " + expected.getHelpMessage() + " ends with " + actual, expected.getHelpMessage() .endsWith(actual)); } }