/* * ****************************************************************************** * MontiCore Language Workbench * Copyright (c) 2015, MontiCore, All rights reserved. * * This project is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3.0 of the License, or (at your option) any later version. * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this project. If not, see <http://www.gnu.org/licenses/>. * ****************************************************************************** */ package de.monticore.types; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.io.IOException; import org.junit.BeforeClass; import org.junit.Test; import de.se_rwth.commons.logging.Log; /** * @author Martin Schindler */ public class TypeParametersTest { @BeforeClass public static void disableFailQuick() { Log.enableFailQuick(false); } @Test public void testTypeParameters1() { try { assertTrue(TypesTestHelper.getInstance().testTypeParameter( "<T extends SuperClassA<S> & SuperClassB," + " S extends a.b.c.SuperClassC<T>>")); assertTrue(TypesTestHelper.getInstance().testTypeParameter("<T extends mc.examples.ClassA>")); assertTrue(TypesTestHelper.getInstance() .testTypeParameter("<T extends ClassA.ClassB<String>.ClassC<Object>>")); assertTrue(TypesTestHelper.getInstance().testTypeParameter("<T extends A.B<String[]>.C<Object>>")); assertTrue(TypesTestHelper.getInstance().testTypeParameter("<S>")); assertTrue(TypesTestHelper.getInstance().testTypeParameter("<T extends A.B<C[]>.D<E<F<G>>,H> & I<J>>")); assertTrue(TypesTestHelper.getInstance().testTypeParameter("<T1 extends A<B<C<D>>>, T2 extends A>")); } catch (IOException e) { fail(e.getMessage()); } } // copied from JavaDSL @Test public void testTypeParameters2() { try { // Test for a simple type parameter assertTrue(TypesTestHelper.getInstance().testTypeParameter("<Class1>")); // Test for more than one type type parameter assertTrue(TypesTestHelper.getInstance() .testTypeParameter("<Class1, Class2, ExtendedClass extends UpperBound, Class3>")); // Test for a extended type parameter with a parameterized super class assertTrue(TypesTestHelper.getInstance() .testTypeParameter("<Class1, ExtendedClass extends UpperBound<Arg1>>")); // Test for a extended type parameter with a parameterized super // class with a parameterized super class assertTrue(TypesTestHelper.getInstance() .testTypeParameter("<Class1, ExtendedClass extends UpperBound<Arg1<Arg2> >>")); // Test for a extended type parameter with a parameterized super // class with a parameterized super class with a parameterized super // class assertTrue(TypesTestHelper.getInstance() .testTypeParameter("<Class1, ExtendedClass extends UpperBound<Arg1<Arg2<Arg3>>>>")); } catch (IOException e) { fail(e.getMessage()); } } @Test public void testNegativeTypeParameters1() { try { assertNull(TypesTestHelper.getInstance() .parseTypeParameters("<T extends A.B<String[]>.C<Object>[]>")); assertNull(TypesTestHelper.getInstance().parseTypeParameters("<T extends String[]>")); assertNull(TypesTestHelper.getInstance().parseTypeParameters("<T extends int[]>")); } catch (IOException e) { fail(e.getMessage()); } } // copied from JavaDSL @Test public void testNegativeTypeParameters2() { try { // Negative test with 2 '<' in the beginning assertNull(TypesTestHelper.getInstance().parseTypeParameters("<<Class1>")); // Negative test with 2 '>' in the end assertNull(TypesTestHelper.getInstance().parseTypeParameters("<Class1>>")); // Negative test with double '<< >>' assertNull(TypesTestHelper.getInstance().parseTypeParameters("<<Class1>>")); // Negative test with type argument syntax instead of type parameter assertNull(TypesTestHelper.getInstance().parseTypeParameters("<Class1<Class2>>")); // Negative test with one '>' unsufficient assertNull(TypesTestHelper.getInstance() .parseTypeParameters("<Class1, ExtendedClass extends UpperBound<Arg1<Arg2<Arg3>>>")); // Negative test with one '>' unsufficient assertNull(TypesTestHelper.getInstance() .parseTypeParameters( "<Class1, ExtendedClass extends UpperBound<Arg1<Arg2<Arg3<Arg>>>>")); // Negative test with a missing comma assertNull(TypesTestHelper.getInstance() .parseTypeParameters("<Class1,ExtendedClass extends UpperBound<Arg1> Class2 >")); } catch (Exception e) { fail(e.getMessage()); } } }