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

import com.google.inject.Inject
import org.eclipse.osbp.xtext.messagedsl.MessageModel
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(MessageDslInjectorProvider)
class MessageDslParsingTest {
	@Inject
	ParseHelper<MessageModel> parseHelper
	
	@Test
	def void loadModel() {
		val result = parseHelper.parse('''
			Hello Xtext!
		''')
		Assert.assertNotNull(result)
		Assert.assertTrue(result.eResource.errors.isEmpty)
	}
}
