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

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