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

import com.google.inject.Inject;
import org.eclipse.osbp.xtext.datamartdsl.DatamartModel;
import org.eclipse.osbp.xtext.datamartdsl.tests.DatamartDSLInjectorProvider;
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(DatamartDSLInjectorProvider.class)
@SuppressWarnings("all")
public class DatamartDSLParsingTest {
  @Inject
  private ParseHelper<DatamartModel> parseHelper;
  
  @Test
  public void loadModel() {
    try {
      StringConcatenation _builder = new StringConcatenation();
      _builder.append("Hello Xtext!");
      _builder.newLine();
      final DatamartModel result = this.parseHelper.parse(_builder);
      Assert.assertNotNull(result);
      Assert.assertTrue(result.eResource().getErrors().isEmpty());
    } catch (Throwable _e) {
      throw Exceptions.sneakyThrow(_e);
    }
  }
}
