/*
 * generated by Xtext 2.11.0
 */
package org.eclipse.osbp.ecview.uisemantics.tests

import com.google.inject.Inject
import org.eclipse.osbp.ecview.semantic.uisemantics.UxModel
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(UISemanticsGrammarInjectorProvider)
class UISemanticsGrammarParsingTest {
	@Inject
	ParseHelper<UxModel> parseHelper
	
	@Test
	def void loadModel() {
		val result = parseHelper.parse('''
			Hello Xtext!
		''')
		Assert.assertNotNull(result)
		Assert.assertTrue(result.eResource.errors.isEmpty)
	}
}
