blob: fd9b941d6fe997d2563954675a9d6e4d558ff34f [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009, 2012 Obeo.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Obeo - initial API and implementation
*******************************************************************************/
package org.eclipse.acceleo.traceability.tests.unit.model;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.util.List;
import org.eclipse.acceleo.traceability.GeneratedFile;
import org.eclipse.acceleo.traceability.GeneratedText;
import org.eclipse.acceleo.traceability.InputElement;
import org.eclipse.acceleo.traceability.ModuleElement;
import org.eclipse.acceleo.traceability.tests.unit.AbstractTraceabilityTest;
import org.eclipse.acceleo.traceability.tests.unit.AcceleoTraceabilityListener;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EEnum;
import org.eclipse.emf.ecore.EGenericType;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.ocl.ecore.PropertyCallExp;
import org.eclipse.ocl.utilities.ASTNode;
import org.eclipse.uml2.uml.Operation;
import org.eclipse.uml2.uml.VisibilityKind;
import org.junit.Test;
public class AcceleoTraceabilityModelTests extends AbstractTraceabilityTest {
@Test
public void testTraceabilityModelSimple() {
AcceleoTraceabilityListener traceabilityListener = this.parseAndGenerate(
"data/model/modelSimple.mtl", //$NON-NLS-1$
"main", "data/model/model.ecore", true); //$NON-NLS-1$ //$NON-NLS-2$
List<GeneratedFile> generatedFiles = traceabilityListener.getGeneratedFiles();
assertEquals(4, generatedFiles.size());
int cpt = 1;
for (GeneratedFile generatedFile : generatedFiles) {
List<GeneratedText> generatedRegions = generatedFile.getGeneratedRegions();
assertEquals(1, generatedRegions.size());
assertEquals(("class" + cpt).length(), generatedFile.getLength()); //$NON-NLS-1$
List<InputElement> sourceElements = generatedFile.getSourceElements();
assertEquals(2, sourceElements.size()); // the class and its name
assertEquals("class" + cpt + ", feature='name'", sourceElements.get(0).toString()); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals("class" + cpt, sourceElements.get(1).toString()); //$NON-NLS-1$
assertEquals("class" + cpt + ".txt", generatedFile.getPath()); //$NON-NLS-1$ //$NON-NLS-2$
GeneratedText generatedText = generatedRegions.get(0);
assertEquals(0, generatedText.getStartOffset());
assertEquals(("class" + cpt).length(), generatedText.getEndOffset()); //$NON-NLS-1$
ModuleElement moduleElement = generatedText.getModuleElement();
EObject element = moduleElement.getModuleElement();
assertTrue(element instanceof ASTNode);
assertTrue(element instanceof PropertyCallExp);
PropertyCallExp propertyCall = (PropertyCallExp)element;
EGenericType eGenericType = propertyCall.getEGenericType();
assertTrue(eGenericType.getERawType().getInstanceClass().equals(String.class));
assertEquals("eClass.name", propertyCall.toString()); //$NON-NLS-1$
assertEquals(178, propertyCall.getStartPosition());
assertEquals(178 + "eClass.name".length(), propertyCall.getEndPosition()); //$NON-NLS-1$
InputElement sourceElement = generatedText.getSourceElement();
EObject modelElement = sourceElement.getModelElement();
assertTrue(modelElement instanceof EClass);
assertEquals("class" + cpt, ((EClass)modelElement).getName()); //$NON-NLS-1$
assertEquals("/plugin/org.eclipse.acceleo.traceability.tests/data/model/model.ecore", //$NON-NLS-1$
modelElement.eResource().getURI().path());
cpt++;
}
}
@Test
public void testTraceabilityModelMetamodel() {
AcceleoTraceabilityListener traceabilityListener = this.parseAndGenerate(
"data/model/modelMetamodel.mtl", //$NON-NLS-1$
"main", "data/model/model.ecore", true); //$NON-NLS-1$ //$NON-NLS-2$
List<GeneratedFile> generatedFiles = traceabilityListener.getGeneratedFiles();
assertEquals(4, generatedFiles.size());
int cpt = 1;
for (GeneratedFile generatedFile : generatedFiles) {
List<GeneratedText> generatedRegions = generatedFile.getGeneratedRegions();
assertEquals(2, generatedRegions.size());
assertEquals(("class" + cpt + "EClass").length(), generatedFile.getLength()); //$NON-NLS-1$ //$NON-NLS-2$
List<InputElement> sourceElements = generatedFile.getSourceElements();
assertEquals(2, sourceElements.size()); // the class and its name
assertEquals("class" + cpt + ", feature='name'", sourceElements.get(0).toString()); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals("class" + cpt, sourceElements.get(1).toString()); //$NON-NLS-1$
assertEquals("class" + cpt + ".txt", generatedFile.getPath()); //$NON-NLS-1$ //$NON-NLS-2$
GeneratedText generatedText = generatedRegions.get(0);
assertEquals(0, generatedText.getStartOffset());
assertEquals(("class" + cpt).length(), generatedText.getEndOffset()); //$NON-NLS-1$
ModuleElement moduleElement = generatedText.getModuleElement();
EObject element = moduleElement.getModuleElement();
assertTrue(element instanceof ASTNode);
assertTrue(element instanceof PropertyCallExp);
PropertyCallExp propertyCall = (PropertyCallExp)element;
EGenericType eGenericType = propertyCall.getEGenericType();
assertTrue(eGenericType.getERawType().getInstanceClass().equals(String.class));
assertEquals("eClass.name", propertyCall.toString()); //$NON-NLS-1$
assertEquals(181, propertyCall.getStartPosition());
assertEquals(181 + "eClass.name".length(), propertyCall.getEndPosition()); //$NON-NLS-1$
InputElement sourceElement = generatedText.getSourceElement();
EObject modelElement = sourceElement.getModelElement();
assertTrue(modelElement instanceof EClass);
assertEquals("class" + cpt, ((EClass)modelElement).getName()); //$NON-NLS-1$
assertEquals("/plugin/org.eclipse.acceleo.traceability.tests/data/model/model.ecore", //$NON-NLS-1$
modelElement.eResource().getURI().path());
generatedText = generatedRegions.get(1);
assertEquals(("class" + cpt).length(), generatedText.getStartOffset()); //$NON-NLS-1$
assertEquals(("class" + cpt + "EClass").length(), generatedText.getEndOffset()); //$NON-NLS-1$ //$NON-NLS-2$
moduleElement = generatedText.getModuleElement();
element = moduleElement.getModuleElement();
assertTrue(element instanceof ASTNode);
assertTrue(element instanceof PropertyCallExp);
propertyCall = (PropertyCallExp)element;
eGenericType = propertyCall.getEGenericType();
assertTrue(eGenericType.getERawType().getInstanceClass().equals(String.class));
assertEquals("eClass.eClass().name", propertyCall.toString()); //$NON-NLS-1$
assertEquals(195, propertyCall.getStartPosition());
assertEquals(195 + "eClass.eClass().name".length(), propertyCall.getEndPosition()); //$NON-NLS-1$
sourceElement = generatedText.getSourceElement();
modelElement = sourceElement.getModelElement();
assertTrue(modelElement instanceof EClass);
assertEquals("EClass", ((EClass)modelElement).getName()); //$NON-NLS-1$
assertEquals("/emf/2002/Ecore", //$NON-NLS-1$
modelElement.eResource().getURI().path());
cpt++;
}
}
@Test
public void testTraceabilityModelPropertyOperationSize() {
AcceleoTraceabilityListener traceabilityListener = this.parseAndGenerate(
"data/model/modelPropertyOperationSize.mtl", //$NON-NLS-1$
"main", "data/model/model.ecore", true); //$NON-NLS-1$ //$NON-NLS-2$
List<GeneratedFile> generatedFiles = traceabilityListener.getGeneratedFiles();
assertEquals(4, generatedFiles.size());
int cpt = 1;
for (GeneratedFile generatedFile : generatedFiles) {
List<GeneratedText> generatedRegions = generatedFile.getGeneratedRegions();
assertEquals(1, generatedRegions.size());
assertEquals("6".length(), generatedFile.getLength()); //$NON-NLS-1$
List<InputElement> sourceElements = generatedFile.getSourceElements();
assertEquals(2, sourceElements.size()); // the class and its name
assertEquals("class" + cpt + ", feature='name'", sourceElements.get(0).toString()); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals("class" + cpt, sourceElements.get(1).toString()); //$NON-NLS-1$
assertEquals("class" + cpt + ".txt", generatedFile.getPath()); //$NON-NLS-1$ //$NON-NLS-2$
GeneratedText generatedText = generatedRegions.get(0);
assertEquals(0, generatedText.getStartOffset());
assertEquals("6".length(), generatedText.getEndOffset()); //$NON-NLS-1$
ModuleElement moduleElement = generatedText.getModuleElement();
EObject element = moduleElement.getModuleElement();
assertTrue(element instanceof ASTNode);
assertTrue(element instanceof PropertyCallExp);
PropertyCallExp propertyCall = (PropertyCallExp)element;
EGenericType eGenericType = propertyCall.getEGenericType();
assertTrue(eGenericType.getERawType().getInstanceClass().equals(String.class));
assertEquals("eClass.name", propertyCall.toString()); //$NON-NLS-1$
assertEquals(193, propertyCall.getStartPosition());
assertEquals(193 + "eClass.name".length(), propertyCall.getEndPosition()); //$NON-NLS-1$
InputElement sourceElement = generatedText.getSourceElement();
EObject modelElement = sourceElement.getModelElement();
assertTrue(modelElement instanceof EClass);
assertEquals("class" + cpt, ((EClass)modelElement).getName()); //$NON-NLS-1$
assertEquals("/plugin/org.eclipse.acceleo.traceability.tests/data/model/model.ecore", //$NON-NLS-1$
modelElement.eResource().getURI().path());
cpt++;
}
}
@Test
public void testTraceabilityModelEnum() {
AcceleoTraceabilityListener traceabilityListener = this.parseAndGenerate("data/model/modelEnum.mtl", //$NON-NLS-1$
"main", "data/model/model.ecore", true); //$NON-NLS-1$ //$NON-NLS-2$
List<GeneratedFile> generatedFiles = traceabilityListener.getGeneratedFiles();
assertEquals(1, generatedFiles.size());
for (GeneratedFile generatedFile : generatedFiles) {
List<GeneratedText> generatedRegions = generatedFile.getGeneratedRegions();
assertEquals(1, generatedRegions.size());
assertEquals(("MyEnum").length(), generatedFile.getLength()); //$NON-NLS-1$
List<InputElement> sourceElements = generatedFile.getSourceElements();
assertEquals(1, sourceElements.size()); // the class and its name
assertEquals("MyEnum", sourceElements.get(0).toString()); //$NON-NLS-1$
assertEquals("enum.txt", generatedFile.getPath()); //$NON-NLS-1$
GeneratedText generatedText = generatedRegions.get(0);
assertEquals(0, generatedText.getStartOffset());
assertEquals(("MyEnum").length(), generatedText.getEndOffset()); //$NON-NLS-1$
ModuleElement moduleElement = generatedText.getModuleElement();
EObject element = moduleElement.getModuleElement();
assertTrue(element instanceof ASTNode);
assertTrue(element instanceof PropertyCallExp);
PropertyCallExp propertyCall = (PropertyCallExp)element;
EGenericType eGenericType = propertyCall.getEGenericType();
assertTrue(eGenericType.getERawType().getInstanceClass().equals(String.class));
assertEquals("eEnum.name", propertyCall.toString()); //$NON-NLS-1$
assertEquals(164, propertyCall.getStartPosition());
assertEquals(164 + "eEnum.name".length(), propertyCall.getEndPosition()); //$NON-NLS-1$
InputElement sourceElement = generatedText.getSourceElement();
EObject modelElement = sourceElement.getModelElement();
assertTrue(modelElement instanceof EEnum);
assertEquals("MyEnum", ((EEnum)modelElement).getName()); //$NON-NLS-1$
assertEquals("/plugin/org.eclipse.acceleo.traceability.tests/data/model/model.ecore", //$NON-NLS-1$
modelElement.eResource().getURI().path());
}
}
@Test
public void testTraceabilityModelEnumToString() {
AcceleoTraceabilityListener traceabilityListener = this.parseAndGenerate(
"data/model/modelEnumToString.mtl", //$NON-NLS-1$
"main", "data/model/model.uml", true); //$NON-NLS-1$ //$NON-NLS-2$
List<GeneratedFile> generatedFiles = traceabilityListener.getGeneratedFiles();
assertEquals(1, generatedFiles.size());
for (GeneratedFile generatedFile : generatedFiles) {
List<GeneratedText> generatedRegions = generatedFile.getGeneratedRegions();
assertEquals(1, generatedRegions.size());
assertEquals(("private").length(), generatedFile.getLength()); //$NON-NLS-1$
List<InputElement> sourceElements = generatedFile.getSourceElements();
assertEquals(1, sourceElements.size()); // the class and its name
assertEquals("myoperation", sourceElements.get(0).toString()); //$NON-NLS-1$
assertEquals("operation.txt", generatedFile.getPath()); //$NON-NLS-1$
GeneratedText generatedText = generatedRegions.get(0);
assertEquals(0, generatedText.getStartOffset());
assertEquals(("private").length(), generatedText.getEndOffset()); //$NON-NLS-1$
ModuleElement moduleElement = generatedText.getModuleElement();
EObject element = moduleElement.getModuleElement();
assertTrue(element instanceof ASTNode);
assertTrue(element instanceof PropertyCallExp);
PropertyCallExp propertyCall = (PropertyCallExp)element;
EGenericType eGenericType = propertyCall.getEGenericType();
assertTrue(eGenericType.getERawType().getInstanceClass().equals(VisibilityKind.class));
assertEquals("operation.visibility", propertyCall.toString()); //$NON-NLS-1$
assertEquals(185, propertyCall.getStartPosition());
assertEquals(185 + "operation.visibility".length(), propertyCall.getEndPosition()); //$NON-NLS-1$
InputElement sourceElement = generatedText.getSourceElement();
EObject modelElement = sourceElement.getModelElement();
assertTrue(modelElement instanceof Operation);
assertEquals("myoperation", ((Operation)modelElement).getName()); //$NON-NLS-1$
assertEquals("/plugin/org.eclipse.acceleo.traceability.tests/data/model/model.uml", //$NON-NLS-1$
modelElement.eResource().getURI().path());
}
}
@Test
public void testTraceabilityModelEnumString() {
AcceleoTraceabilityListener traceabilityListener = this.parseAndGenerate(
"data/model/modelEnumString.mtl", //$NON-NLS-1$
"main", "data/model/model.uml", true); //$NON-NLS-1$ //$NON-NLS-2$
List<GeneratedFile> generatedFiles = traceabilityListener.getGeneratedFiles();
assertEquals(1, generatedFiles.size());
for (GeneratedFile generatedFile : generatedFiles) {
List<GeneratedText> generatedRegions = generatedFile.getGeneratedRegions();
assertEquals(1, generatedRegions.size());
assertEquals(("private").length(), generatedFile.getLength()); //$NON-NLS-1$
List<InputElement> sourceElements = generatedFile.getSourceElements();
assertEquals(1, sourceElements.size()); // the class and its name
assertEquals("myoperation", sourceElements.get(0).toString()); //$NON-NLS-1$
assertEquals("operation.txt", generatedFile.getPath()); //$NON-NLS-1$
GeneratedText generatedText = generatedRegions.get(0);
assertEquals(0, generatedText.getStartOffset());
assertEquals(("private").length(), generatedText.getEndOffset()); //$NON-NLS-1$
ModuleElement moduleElement = generatedText.getModuleElement();
EObject element = moduleElement.getModuleElement();
assertTrue(element instanceof ASTNode);
assertTrue(element instanceof PropertyCallExp);
PropertyCallExp propertyCall = (PropertyCallExp)element;
EGenericType eGenericType = propertyCall.getEGenericType();
assertTrue(eGenericType.getERawType().getInstanceClass().equals(VisibilityKind.class));
assertEquals("operation.visibility", propertyCall.toString()); //$NON-NLS-1$
assertEquals(183, propertyCall.getStartPosition());
assertEquals(183 + "operation.visibility".length(), propertyCall.getEndPosition()); //$NON-NLS-1$
InputElement sourceElement = generatedText.getSourceElement();
EObject modelElement = sourceElement.getModelElement();
assertTrue(modelElement instanceof Operation);
assertEquals("myoperation", ((Operation)modelElement).getName()); //$NON-NLS-1$
assertEquals("/plugin/org.eclipse.acceleo.traceability.tests/data/model/model.uml", //$NON-NLS-1$
modelElement.eResource().getURI().path());
}
}
}