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

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