package com.sap.furcas.parser.tcs.syntaxmodel; import static org.junit.Assert.assertEquals; import java.io.File; import java.util.ArrayList; import java.util.List; import java.util.Set; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.resource.Resource; import org.junit.BeforeClass; import org.junit.Test; import com.sap.furcas.parser.tcs.TCSSyntaxDefinition; import com.sap.furcas.parsergenerator.GrammarGenerationSourceConfiguration; import com.sap.furcas.parsergenerator.TCSSyntaxContainerBean; import com.sap.furcas.runtime.parser.testbase.GeneratedParserBasedTest; import com.sap.furcas.runtime.parser.testbase.GeneratedParserTestConfiguration; import com.sap.furcas.test.testutils.ResourceTestHelper; /** * This class tests if the containment settings are set correctly in the TCS metamodel. * If set correctly, the transient parsing resource should only contain one element, * namely the ConreteSyntax. This means, that the concrete syntax model forms a tree with * just one root element. * * @author Sebastian Schlag (D049672) * */ public class TestContainmentTree extends GeneratedParserBasedTest { private static final String LANGUAGE = "TCS"; private static final File TCS = TCSSyntaxDefinition.TCS_TCS; private static final File[] METAMODELS = {}; private static TCSSyntaxContainerBean syntaxBean; private static Resource resource; // The transient parsing resource that contains all model elements. @BeforeClass public static void setupParser() throws Exception { final Set<URI> ref = ResourceTestHelper.createFURCASReferenceScope(); ref.addAll(ResourceTestHelper.createEcoreReferenceScope()); GeneratedParserTestConfiguration testConfig = new GeneratedParserTestConfiguration(LANGUAGE, TCS, METAMODELS) { @Override public GrammarGenerationSourceConfiguration getSourceConfiguration() { return new GrammarGenerationSourceConfiguration(ResourceTestHelper.createResourceSet(), ref); } }; syntaxBean = parseSyntax(testConfig); } @Test public void testContainment() throws Exception { resource = syntaxBean.getSyntax().eResource(); List<EObject> roots= new ArrayList<EObject>(1); for (EObject eo : resource.getContents()) { if (eo.eContainer() == null) { roots.add(eo); } } assertEquals("Resource contains more uncontained elements than the ConcreteSyntax", roots.size(), 1); } }