/** * */ package com.sap.furcas.modeladaptation.emf.lookup; import static com.sap.furcas.test.testutils.ResolutionBeanHelper.refE; import static com.sap.furcas.test.testutils.StringListHelper.list; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import java.util.Arrays; import java.util.List; import org.eclipse.emf.ecore.EObject; import org.junit.Test; import com.sap.furcas.runtime.common.interfaces.ResolvedNameAndReferenceBean; import com.sap.furcas.test.fixture.ScenarioFixtureData; import com.sap.furcas.test.testutils.ResolutionBeanHelper; /** * Tests the Ecore based lookup class that is used for testing, prerequisite for scenario tests (!). */ public class TestFileBasedEcoreMetaModelLookup { @Test public void testIsClassNameWithBibText() throws Exception { FileBasedEcoreMetaModelLookUp lookup = new FileBasedEcoreMetaModelLookUp(ScenarioFixtureData.BIBTEXT_METAMODEL, ScenarioFixtureData.BIBTEXT1_METAMODEL); assertNotNull(lookup.resolveReference(list("BibText", "Article"))); assertNotNull(lookup.resolveReference(list("BibText", "Author"))); assertNotNull(lookup.resolveReference(list("BibText", "BibTextFile"))); assertNotNull(lookup.resolveReference(list("BibText", "BibTextEntry"))); assertNotNull(lookup.resolveReference(list("PrimitiveTypes", "String"))); // important assertNull(lookup.resolveReference(list("Article2"))); assertNull(lookup.resolveReference(list("BibText2", "Article"))); assertNull(lookup.resolveReference(list("BibTex", "Article"))); assertNull(lookup.resolveReference(list("Artice"))); assertNull(lookup.resolveReference(list("Autho"))); } @Test public void testIsSubtypeWithBibText() throws Exception { FileBasedEcoreMetaModelLookUp lookup = new FileBasedEcoreMetaModelLookUp(ScenarioFixtureData.BIBTEXT_METAMODEL, ScenarioFixtureData.BIBTEXT1_METAMODEL); assertTrue(lookup.isSubTypeOf(refE("BibText", "Article"), refE("BibText", "Article"))); assertTrue(lookup.isSubTypeOf(refE("BibText", "Article"), refE("BibText", "BibTextEntry"))); assertTrue(lookup.isSubTypeOf(refE("BibText", "Author"), refE("BibText", "BibTextEntry"))); assertTrue(lookup.isSubTypeOf(refE("BibText", "BibTextEntry"), refE("BibText", "BibTextEntry"))); assertTrue(lookup.isSubTypeOf(refE("BibText", "Year"), refE("BibText", "Attribute"))); assertFalse(lookup.isSubTypeOf(refE("BibText", "Article"), refE("BibText", "Author"))); assertFalse(lookup.isSubTypeOf(refE("BibText", "Author"), refE("BibText", "Article"))); assertFalse(lookup.isSubTypeOf(refE("BibText", "BibTextEntry"), refE("BibText", "Article"))); assertFalse(lookup.isSubTypeOf(refE("BibText", "Attribute"), refE("BibText", "Year"))); assertFalse(lookup.isSubTypeOf(refE("BibText", "Year"), refE("BibText", "Article"))); assertFalse(lookup.isSubTypeOf(refE("BibText", "Article"), refE("BibText", "Attribute"))); } @Test public void testMultiWithBibText() throws Exception { FileBasedEcoreMetaModelLookUp lookup = new FileBasedEcoreMetaModelLookUp(ScenarioFixtureData.BIBTEXT_METAMODEL, ScenarioFixtureData.BIBTEXT1_METAMODEL); assertFalse(lookup.getMultiplicity(refE("BibText", "Article"), "author").isOptional()); assertFalse(lookup.getMultiplicity(refE("BibText", "Article"), "author").isMultiple()); assertFalse(lookup.getMultiplicity(refE("BibText", "Article"), "key").isMultiple()); assertFalse(lookup.getMultiplicity(refE("BibText", "Author"), "key").isMultiple()); assertTrue(lookup.getMultiplicity(refE("BibText", "Author"), "articles").isOptional()); assertTrue(lookup.getMultiplicity(refE("BibText", "Author"), "articles").isMultiple()); assertTrue(lookup.getMultiplicity(refE("BibText", "BibTextFile"), "entries").isMultiple()); assertTrue(lookup.getMultiplicity(refE("BibText", "BibTextEntry"), "attributes").isMultiple()); assertEquals(5, lookup.getMultiplicity(refE("BibText", "BibTextEntry"), "attributes").getUpperBound()); assertNull(lookup.getMultiplicity(ResolutionBeanHelper.refE("blabla"), "xyz")); } @Test public void testFeatureClassNameWithBibText() throws Exception { FileBasedEcoreMetaModelLookUp lookup = new FileBasedEcoreMetaModelLookUp(ScenarioFixtureData.BIBTEXT_METAMODEL, ScenarioFixtureData.BIBTEXT1_METAMODEL); assertEquals(refE("BibText", "Author"), lookup.getFeatureClassReference(refE("BibText", "Article"), "author")); assertEquals(refE("PrimitiveTypes", "String"), lookup.getFeatureClassReference(refE("BibText", "Article"), "key")); assertEquals(refE("PrimitiveTypes", "String"), lookup.getFeatureClassReference(refE("BibText", "Author"), "key")); assertEquals(refE("BibText", "Article"), lookup.getFeatureClassReference(refE("BibText", "Author"), "articles")); assertEquals(refE("BibText", "BibTextEntry"), lookup.getFeatureClassReference(refE("BibText", "BibTextFile"), "entries")); assertEquals(refE("PrimitiveTypes", "String"), lookup.getFeatureClassReference(refE("BibText", "BibTextEntry"), "key")); assertEquals(refE("BibText", "BibTextEntry"), lookup.getFeatureClassReference(ResolutionBeanHelper.refE("BibText", "BibTextFile"), "entries")); assertEquals(refE("BibText", "Author"), lookup.getFeatureClassReference(ResolutionBeanHelper.refE("BibText", "Article"), "author")); assertNull(lookup.getFeatureClassReference(refE("BibTextEntry"), "")); assertNull(lookup.getFeatureClassReference(refE("BibTextEntry"), "key2")); assertNull(lookup.getFeatureClassReference(refE("BibTextEntry"), "ke")); assertNull(lookup.getFeatureClassReference(refE("BibTextEntry"), null)); } @Test public void testSubTypesWithBibText() throws Exception { FileBasedEcoreMetaModelLookUp lookup = new FileBasedEcoreMetaModelLookUp(ScenarioFixtureData.BIBTEXT_METAMODEL, ScenarioFixtureData.BIBTEXT1_METAMODEL); ResolvedNameAndReferenceBean<EObject> bibEntry = lookup.resolveReference(Arrays.asList("BibText", "BibTextEntry")); List<ResolvedNameAndReferenceBean<EObject>> result = lookup.getDirectSubTypes(bibEntry); assertEquals(2, result.size()); assertTrue(result.contains(refE("BibText", "Article"))); assertTrue(result.contains(refE("BibText", "Author"))); ResolvedNameAndReferenceBean<EObject> article = lookup.resolveReference(Arrays.asList("BibText", "Article")); assertEquals(list(), lookup.getDirectSubTypes(article)); ResolvedNameAndReferenceBean<EObject> attribute = lookup.resolveReference(Arrays.asList("BibText", "Attribute")); result = lookup.getDirectSubTypes(attribute); assertEquals(1, result.size()); assertTrue(result.contains(refE("BibText", "Year"))); ResolvedNameAndReferenceBean<EObject> author = lookup.resolveReference(Arrays.asList("BibText", "Author")); assertEquals(list(), lookup.getDirectSubTypes(author)); } @Test public void testSubTypesWithXPath() throws Exception { FileBasedEcoreMetaModelLookUp lookup = new FileBasedEcoreMetaModelLookUp(ScenarioFixtureData.XPATH1_METAMODEL, ScenarioFixtureData.XPATH_METAMODEL); ResolvedNameAndReferenceBean<EObject> locatedElement = lookup.resolveReference(Arrays.asList("XPath", "LocatedElement")); List<ResolvedNameAndReferenceBean<EObject>> result = lookup.getDirectSubTypes(locatedElement); assertEquals(6, result.size()); assertTrue(result.contains(refE("XPath", "Axis"))); assertTrue(result.contains(refE("XPath", "Expression"))); assertTrue(result.contains(refE("XPath", "NamedElement"))); ResolvedNameAndReferenceBean<EObject> nodeTest = lookup.resolveReference(Arrays.asList("XPath", "NodeTest")); result = lookup.getDirectSubTypes(nodeTest); assertEquals(4, result.size()); assertTrue(result.contains(refE("XPath", "WildCardTest"))); assertTrue(result.contains(refE("XPath", "IsTextTest"))); ResolvedNameAndReferenceBean<EObject> axis = lookup.resolveReference(Arrays.asList("XPath", "Axis")); result = lookup.getDirectSubTypes(axis); assertEquals(13, result.size()); assertTrue(result.contains(refE("XPath", "ParentAxis"))); assertTrue(result.contains(refE("XPath", "SelfAxis"))); ResolvedNameAndReferenceBean<EObject> expression = lookup.resolveReference(Arrays.asList("XPath", "Expression")); result = lookup.getDirectSubTypes(expression); assertEquals(5, result.size()); assertTrue(result.contains(refE("XPath", "PathExpression"))); assertTrue(result.contains(refE("XPath", "FunctionCallExp"))); } @Test public void testSubTypesWithMultiPackages() throws Exception { FileBasedEcoreMetaModelLookUp lookup = new FileBasedEcoreMetaModelLookUp(ScenarioFixtureData.MULTIPACKAGE_METAMODEL); ResolvedNameAndReferenceBean<EObject> expression = lookup.resolveReference(Arrays.asList("expression", "Expression")); List<ResolvedNameAndReferenceBean<EObject>> result = lookup.getDirectSubTypes(expression); assertEquals(3, result.size()); assertTrue(result.contains(refE("expression", "rightPackage", "BinaryExpression"))); assertTrue(result.contains(refE("expression", "rightPackage", "ValueExpression"))); assertTrue(result.contains(refE("expression", "rightPackage", "StringExpression"))); } @Test public void testQualifyNamesWithMultiPackages() throws Exception { FileBasedEcoreMetaModelLookUp lookup = new FileBasedEcoreMetaModelLookUp(ScenarioFixtureData.MULTIPACKAGE_METAMODEL); List<ResolvedNameAndReferenceBean<EObject>> result = lookup.qualifyName("Expression"); assertNotNull(result); assertEquals(1, result.size()); assertTrue(result.contains(refE("expression", "Expression"))); result = lookup.qualifyName("BinaryExpression"); assertNotNull(result); assertEquals(2, result.size()); assertTrue(result.contains(refE("expression", "rightPackage", "BinaryExpression"))); assertTrue(result.contains(refE("expression", "wrongPackage", "BinaryExpression"))); result = lookup.qualifyName("ValueExpression"); assertNotNull(result); assertEquals(1, result.size()); assertTrue(result.contains(refE("expression", "rightPackage", "ValueExpression"))); result = lookup.qualifyName("StringExpression"); assertNotNull(result); assertEquals(2, result.size()); assertTrue(result.contains(refE("expression", "rightPackage", "StringExpression"))); assertTrue(result.contains(refE("expression", "wrongPackage", "StringExpression"))); result = lookup.qualifyName("ExpressionList"); assertNotNull(result); assertEquals(2, result.size()); assertTrue(result.contains(refE("expression", "rightPackage", "ExpressionList"))); assertTrue(result.contains(refE("expression", "wrongPackage", "ExpressionList"))); } @Test public void testGetClassesWithBibText() throws Exception { FileBasedEcoreMetaModelLookUp lookup = new FileBasedEcoreMetaModelLookUp(ScenarioFixtureData.BIBTEXT_METAMODEL, ScenarioFixtureData.BIBTEXT1_METAMODEL); assertNotNull(lookup.resolveReference(list("BibText", "BibTextFile"))); assertNotNull(lookup.resolveReference(list("BibText", "BibTextEntry"))); assertNotNull(lookup.resolveReference(list("BibText", "Article"))); assertNotNull(lookup.resolveReference(list("BibText", "Author"))); assertNotNull(lookup.resolveReference(list("BibText", "Attribute"))); assertNotNull(lookup.resolveReference(list("BibText", "Year"))); assertNotNull(lookup.resolveReference(list("BibText", "LocatedElement"))); assertNull(lookup.resolveReference(list("BibText", "Classifier"))); assertNull(lookup.resolveReference(list("BibText", "XYZ"))); assertNull(lookup.resolveReference(list("BibText", "Year123"))); assertNull(lookup.resolveReference(list(""))); } }