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

import com.google.inject.Inject
import org.eclipse.osbp.xtext.entitymock.EntityMockModel
import org.eclipse.xtext.testing.InjectWith
import org.eclipse.xtext.testing.XtextRunner
import org.eclipse.xtext.testing.util.ParseHelper
import org.junit.Assert
import org.junit.Test
import org.junit.runner.RunWith

@RunWith(XtextRunner)
@InjectWith(EntityMockDSLInjectorProvider)
class EntityMockDSLParsingTest {
	@Inject
	ParseHelper<EntityMockModel> parseHelper
	
	@Test
	def void loadModel() {
		val result = parseHelper.parse('''
			Hello Xtext!
		''')
		Assert.assertNotNull(result)
		Assert.assertTrue(result.eResource.errors.isEmpty)
	}
}
