package org.example.entities.tests; import com.google.inject.Inject; import org.eclipse.emf.ecore.EClass; import org.eclipse.xtend2.lib.StringConcatenation; import org.eclipse.xtext.junit4.InjectWith; import org.eclipse.xtext.junit4.XtextRunner; import org.eclipse.xtext.junit4.util.ParseHelper; import org.eclipse.xtext.junit4.validation.ValidationTestHelper; import org.eclipse.xtext.xbase.lib.Exceptions; import org.eclipse.xtext.xbase.lib.Extension; import org.example.entities.EntitiesInjectorProvider; import org.example.entities.entities.EntitiesPackage; import org.example.entities.entities.Model; import org.example.entities.validation.EntitiesValidator; import org.junit.Test; import org.junit.runner.RunWith; @RunWith(XtextRunner.class) @InjectWith(EntitiesInjectorProvider.class) @SuppressWarnings("all") public class EntitiesValidatorTest { @Inject @Extension private ParseHelper<Model> _parseHelper; @Inject @Extension private ValidationTestHelper _validationTestHelper; @Test public void testDuplicateAttributesInDifferentEntitiesOK() { try { StringConcatenation _builder = new StringConcatenation(); _builder.append("entity MyEntity {"); _builder.newLine(); _builder.append(" "); _builder.append("MyEntity attribute;"); _builder.newLine(); _builder.append("}"); _builder.newLine(); _builder.newLine(); _builder.append("entity MyEntity2 {"); _builder.newLine(); _builder.append(" "); _builder.append("MyEntity attribute;"); _builder.newLine(); _builder.append("}"); _builder.newLine(); final Model model = this._parseHelper.parse(_builder); this._validationTestHelper.assertNoErrors(model); } catch (Throwable _e) { throw Exceptions.sneakyThrow(_e); } } @Test public void testDuplicateEntities() { try { StringConcatenation _builder = new StringConcatenation(); _builder.append("entity MyEntity {}"); _builder.newLine(); _builder.newLine(); _builder.append("entity MyEntity {}"); _builder.newLine(); final Model model = this._parseHelper.parse(_builder); EClass _entity = EntitiesPackage.eINSTANCE.getEntity(); this._validationTestHelper.assertError(model, _entity, null, "Duplicate Entity \'MyEntity\'"); } catch (Throwable _e) { throw Exceptions.sneakyThrow(_e); } } @Test public void testDuplicateAttributes() { try { StringConcatenation _builder = new StringConcatenation(); _builder.append("entity MyEntity {"); _builder.newLine(); _builder.append(" "); _builder.append("MyEntity attribute;"); _builder.newLine(); _builder.append(" "); _builder.append("MyEntity attribute2;"); _builder.newLine(); _builder.append(" "); _builder.append("MyEntity attribute;"); _builder.newLine(); _builder.append("}"); _builder.newLine(); final Model model = this._parseHelper.parse(_builder); EClass _attribute = EntitiesPackage.eINSTANCE.getAttribute(); this._validationTestHelper.assertError(model, _attribute, null, "Duplicate Attribute \'attribute\'"); } catch (Throwable _e) { throw Exceptions.sneakyThrow(_e); } } @Test public void testAttributeWithTheSameNameOfAnEntityOK() { try { StringConcatenation _builder = new StringConcatenation(); _builder.append("entity MyEntity {"); _builder.newLine(); _builder.append(" "); _builder.append("MyEntity MyEntity;"); _builder.newLine(); _builder.append("}"); _builder.newLine(); final Model model = this._parseHelper.parse(_builder); this._validationTestHelper.assertNoErrors(model); } catch (Throwable _e) { throw Exceptions.sneakyThrow(_e); } } @Test public void testEntityExtendsItself() { try { StringConcatenation _builder = new StringConcatenation(); _builder.append("entity MyEntity extends MyEntity {"); _builder.newLine(); _builder.append(" "); _builder.newLine(); _builder.append("}"); _builder.newLine(); Model _parse = this._parseHelper.parse(_builder); EClass _entity = EntitiesPackage.eINSTANCE.getEntity(); this._validationTestHelper.assertError(_parse, _entity, EntitiesValidator.HIERARCHY_CYCLE, "cycle in hierarchy of entity \'MyEntity\'"); } catch (Throwable _e) { throw Exceptions.sneakyThrow(_e); } } @Test public void testCycleInEntityHierarchy() { try { StringConcatenation _builder = new StringConcatenation(); _builder.append("entity A extends B {}"); _builder.newLine(); _builder.append("entity B extends C {}"); _builder.newLine(); _builder.append("entity C extends A {}"); _builder.newLine(); final Model model = this._parseHelper.parse(_builder); EClass _entity = EntitiesPackage.eINSTANCE.getEntity(); this._validationTestHelper.assertError(model, _entity, EntitiesValidator.HIERARCHY_CYCLE, "cycle in hierarchy of entity \'A\'"); EClass _entity_1 = EntitiesPackage.eINSTANCE.getEntity(); this._validationTestHelper.assertError(model, _entity_1, EntitiesValidator.HIERARCHY_CYCLE, "cycle in hierarchy of entity \'B\'"); EClass _entity_2 = EntitiesPackage.eINSTANCE.getEntity(); this._validationTestHelper.assertError(model, _entity_2, EntitiesValidator.HIERARCHY_CYCLE, "cycle in hierarchy of entity \'C\'"); } catch (Throwable _e) { throw Exceptions.sneakyThrow(_e); } } @Test public void testEntityName() { try { StringConcatenation _builder = new StringConcatenation(); _builder.append("entity myEntity {} "); Model _parse = this._parseHelper.parse(_builder); EClass _entity = EntitiesPackage.eINSTANCE.getEntity(); this._validationTestHelper.assertWarning(_parse, _entity, EntitiesValidator.INVALID_ENTITY_NAME, "Entity name should start with a capital"); } catch (Throwable _e) { throw Exceptions.sneakyThrow(_e); } } @Test public void testAttributeName() { try { StringConcatenation _builder = new StringConcatenation(); _builder.append("entity MyEntity { string S; } "); Model _parse = this._parseHelper.parse(_builder); EClass _attribute = EntitiesPackage.eINSTANCE.getAttribute(); this._validationTestHelper.assertWarning(_parse, _attribute, EntitiesValidator.INVALID_ATTRIBUTE_NAME, "Attribute name should start with a lowercase"); } catch (Throwable _e) { throw Exceptions.sneakyThrow(_e); } } }