/**
 * generated by Xtext 2.11.0
 */
package org.eclipse.osbp.xtext.entitymock.tests;

import com.google.inject.Inject;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.osbp.xtext.entitymock.EntityMockModel;
import org.eclipse.osbp.xtext.entitymock.tests.EntityMockDSLInjectorProvider;
import org.eclipse.xtend2.lib.StringConcatenation;
import org.eclipse.xtext.testing.InjectWith;
import org.eclipse.xtext.testing.XtextRunner;
import org.eclipse.xtext.testing.util.ParseHelper;
import org.eclipse.xtext.xbase.lib.Exceptions;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;

@RunWith(XtextRunner.class)
@InjectWith(EntityMockDSLInjectorProvider.class)
@SuppressWarnings("all")
public class EntityMockDSLParsingTest {
  @Inject
  private ParseHelper<EntityMockModel> parseHelper;
  
  @Test
  public void loadModel() {
    try {
      StringConcatenation _builder = new StringConcatenation();
      _builder.append("Hello Xtext!");
      _builder.newLine();
      final EntityMockModel result = this.parseHelper.parse(_builder);
      Assert.assertNotNull(result);
      Resource _eResource = result.eResource();
      EList<Resource.Diagnostic> _errors = _eResource.getErrors();
      boolean _isEmpty = _errors.isEmpty();
      Assert.assertTrue(_isEmpty);
    } catch (Throwable _e) {
      throw Exceptions.sneakyThrow(_e);
    }
  }
}
