package com.sap.furcas.parser.tcs.property; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import java.io.File; import java.util.Collection; import org.eclipse.emf.ecore.EObject; import org.junit.BeforeClass; import org.junit.Test; import com.sap.furcas.parser.tcs.scenario.ClassLookupImpl; import com.sap.furcas.parsergenerator.TCSSyntaxContainerBean; import com.sap.furcas.runtime.parser.ModelParsingResult; import com.sap.furcas.runtime.parser.ParserFacade; import com.sap.furcas.runtime.parser.testbase.EMFParsingHelper; import com.sap.furcas.runtime.parser.testbase.GeneratedParserBasedTest; import com.sap.furcas.runtime.parser.testbase.GeneratedParserTestConfiguration; import com.sap.furcas.test.fixture.FeatureFixtureData; /** * A test for the combination of lookupScope and referenceBy property arguments, * which can be used to query for elements by an identifier (e.g., find a declaration by its name). * * @author Stephan Erb */ public class TestReferenceByPArg extends GeneratedParserBasedTest { private static final String LANGUAGE = "QueryByIdentifierFeatureTestSyntax"; private static final File TCS = FeatureFixtureData.PARG_QUERY_BY_IDENTIFIER_TCS; private static final File METAMODEL = FeatureFixtureData.PARG_REFERENCE_BY_IDENTIFIER_METAMODEL; private static final String PACKAGE_URI = FeatureFixtureData.PARG_REFERENCE_BY_IDENTIFIER_PACKAGE_URI; private static EMFParsingHelper parsingHelper; @BeforeClass public static void setupParser() throws Exception { GeneratedParserTestConfiguration testConfig = new GeneratedParserTestConfiguration(LANGUAGE, TCS, METAMODEL); TCSSyntaxContainerBean mappedEnumSyntaxBean = parseSyntax(testConfig); ParserFacade facade = generateParserForLanguage(mappedEnumSyntaxBean, testConfig, new ClassLookupImpl()); parsingHelper = new EMFParsingHelper(facade, testConfig, PACKAGE_URI); } /** * All queries used to bind a usage to its corresponding definition should succeed. */ @Test public void testResolvableBindings() throws Exception { ModelParsingResult result = parsingHelper.parseFile("PropertyArgument_ReferenceByIdentifier_WellDefined.sam", FeatureFixtureData.EXAMPLE_FOLDER, /* expected errors */ 0); // Make sure all references have been resolved as expected EObject defintionUsageList = (EObject) result.getParsedModelElement(); Collection<?> usages = (Collection<?>) defintionUsageList.eGet(defintionUsageList.eClass().getEStructuralFeature("usages")); for (Object object : usages) { EObject usage = (EObject) object; assertTrue(usage.eIsSet(usage.eClass().getEStructuralFeature("boundDefinition"))); } } /** * All queries used to bind a usage to its corresponding definition should fail. * It is searched for a non-existing definitions. */ @Test public void testUnResolvableBindings() throws Exception { ModelParsingResult result = parsingHelper.parseFile("PropertyArgument_ReferenceByIdentifier_UnDefined.sam", FeatureFixtureData.EXAMPLE_FOLDER, /* expected errors */ 2); // Make sure none of the references has been resolved EObject defintionUsageList = (EObject) result.getParsedModelElement(); Collection<?> usages = (Collection<?>) defintionUsageList.eGet(defintionUsageList.eClass().getEStructuralFeature("usages")); for (Object object : usages) { EObject usage = (EObject) object; assertFalse(usage.eIsSet(usage.eClass().getEStructuralFeature("boundDefinition"))); } } }