/** * <copyright> * * Copyright (c) 2010 Springsite BV (The Netherlands) and others * 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: * Martin Taal - Initial API and implementation * * </copyright> * * $Id: TestConfiguration.java,v 1.13 2011/08/25 12:42:44 mtaal Exp $ */ package org.eclipse.emf.texo.test.all; import java.util.ArrayList; import java.util.Collections; import java.util.List; import junit.framework.Test; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EClassifier; import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.emf.texo.model.ModelObject; import org.eclipse.emf.texo.model.ModelPackage; import org.eclipse.emf.texo.model.ModelResolver; import org.eclipse.emf.texo.test.model.issues.bz325429_test.TestModelPackage; import org.eclipse.emf.texo.test.model.issues.bz331009.ModelModelPackage; import org.eclipse.emf.texo.test.model.samples.accounting.AccountingModelPackage; import org.eclipse.emf.texo.test.model.samples.capa.CapaModelPackage; import org.eclipse.emf.texo.test.model.samples.catalog.CatalogModelPackage; import org.eclipse.emf.texo.test.model.samples.claim.ClaimModelPackage; import org.eclipse.emf.texo.test.model.samples.emap.EmapsampleModelPackage; import org.eclipse.emf.texo.test.model.samples.employee.EmployeeModelPackage; import org.eclipse.emf.texo.test.model.samples.extendedpo2.Epo2ModelPackage; import org.eclipse.emf.texo.test.model.samples.forum.ForumModelPackage; import org.eclipse.emf.texo.test.model.samples.interfaces.InterfacesModelPackage; import org.eclipse.emf.texo.test.model.samples.inventory.InvModelPackage; import org.eclipse.emf.texo.test.model.samples.librarymodelclasses.model.LibraryModelPackage; import org.eclipse.emf.texo.test.model.samples.music.MusicModelPackage; import org.eclipse.emf.texo.test.model.samples.play.PlayModelPackage; import org.eclipse.emf.texo.test.model.samples.rental.RentalModelPackage; import org.eclipse.emf.texo.test.model.samples.schemaprimerpo.SchemaprimerpoModelPackage; import org.eclipse.emf.texo.test.model.samples.schoollibrary.SchoollibraryModelPackage; import org.eclipse.emf.texo.test.model.samples.sunbooks.SunBooksModelPackage; import org.eclipse.emf.texo.test.model.samples.types.TypesModelPackage; import org.eclipse.emf.texo.test.model.samples.workflow.WorkflowModelPackage; import org.eclipse.emf.texo.test.model.schemaconstructs.anytype.AnytypeModelPackage; import org.eclipse.emf.texo.test.model.schemaconstructs.attributes.AttributesModelPackage; import org.eclipse.emf.texo.test.model.schemaconstructs.datetime.DatetimeModelPackage; import org.eclipse.emf.texo.test.model.schemaconstructs.documentroot.DocumentrootModelPackage; import org.eclipse.emf.texo.test.model.schemaconstructs.duration.DurationModelPackage; import org.eclipse.emf.texo.test.model.schemaconstructs.ecoreattrs.EcoreattrsModelPackage; import org.eclipse.emf.texo.test.model.schemaconstructs.emap.EmapModelPackage; import org.eclipse.emf.texo.test.model.schemaconstructs.groupall.GroupallModelPackage; import org.eclipse.emf.texo.test.model.schemaconstructs.list.ListModelPackage; import org.eclipse.emf.texo.test.model.schemaconstructs.listunion.ListunionModelPackage; import org.eclipse.emf.texo.test.model.schemaconstructs.mixed.MixedModelPackage; import org.eclipse.emf.texo.test.model.schemaconstructs.nestedgroup.NestedgroupModelPackage; import org.eclipse.emf.texo.test.model.schemaconstructs.qname.QnameModelPackage; import org.eclipse.emf.texo.test.model.schemaconstructs.restriction.RestrictionModelPackage; import org.eclipse.emf.texo.test.model.schemaconstructs.simplechoice.SimplechoiceModelPackage; import org.eclipse.emf.texo.test.model.schemaconstructs.simplefeaturemap.SimplefeaturemapModelPackage; import org.eclipse.emf.texo.test.model.schemaconstructs.simpletypes.SimpletypesModelPackage; import org.eclipse.emf.texo.test.model.schemaconstructs.substitution.SubstitutionModelPackage; import org.eclipse.emf.texo.test.model.schemaconstructs.substitutionzvon.SubstitutionzvonModelPackage; import org.eclipse.emf.texo.utils.ModelUtils; import org.eclipse.emf.texo.xml.test.ConversionTest; import org.eclipse.emf.texo.xml.test.XMLTest; /** * Creates the test cases for all model packages. * * @author mtaal */ public class TestConfiguration { private List<Test> tests; protected void initialize() { tests = new ArrayList<Test>(); addSampleTestModels(); addIssuesTestModels(); addSchemaConstructsTestModels(); } private void addIssuesTestModels() { addAllTestsForModelPackage(TestModelPackage.INSTANCE); addAllTestsForModelPackage(ModelModelPackage.INSTANCE); } private void addSampleTestModels() { addAllTestsForModelPackage(EmapsampleModelPackage.INSTANCE); addAllTestsForModelPackage(AccountingModelPackage.INSTANCE); addAllTestsForModelPackage(CapaModelPackage.INSTANCE); tests.add(createXMLTest(CapaModelPackage.INSTANCE, CapaModelPackage.INSTANCE.getMachineListEClass())); addAllTestsForModelPackage(CatalogModelPackage.INSTANCE); addAllTestsForModelPackage(ClaimModelPackage.INSTANCE); addAllTestsForModelPackage(EmployeeModelPackage.INSTANCE); addAllTestsForModelPackage(Epo2ModelPackage.INSTANCE); // disabled for now... // addAllTestsForModelPackage(ExtlibraryModelPackage.INSTANCE); addAllTestsForModelPackage(ForumModelPackage.INSTANCE); addAllTestsForModelPackage(InterfacesModelPackage.INSTANCE); addAllTestsForModelPackage(InvModelPackage.INSTANCE); addAllTestsForModelPackage(LibraryModelPackage.INSTANCE); tests.add(createXMLTest(LibraryModelPackage.INSTANCE, LibraryModelPackage.INSTANCE.getLibraryEClass())); addAllTestsForModelPackage(MusicModelPackage.INSTANCE); addAllTestsForModelPackage(PlayModelPackage.INSTANCE); addAllTestsForModelPackage(RentalModelPackage.INSTANCE); tests.add(createXMLTest(RentalModelPackage.INSTANCE, RentalModelPackage.INSTANCE.getRentalBusinessEClass())); addAllTestsForModelPackage(SchemaprimerpoModelPackage.INSTANCE); addAllTestsForModelPackage(SchoollibraryModelPackage.INSTANCE); addAllTestsForModelPackage(SunBooksModelPackage.INSTANCE); // tests.add(createXMLTest(SunBooksModelPackage.INSTANCE, SunBooksModelPackage.INSTANCE // .getDocumentRootEClass())); addAllTestsForModelPackage(TypesModelPackage.INSTANCE); addAllTestsForModelPackage(WorkflowModelPackage.INSTANCE); } private void addSchemaConstructsTestModels() { addAllTestsForModelPackage(AnytypeModelPackage.INSTANCE); addAllTestsForModelPackage(AttributesModelPackage.INSTANCE); addAllTestsForModelPackage(DatetimeModelPackage.INSTANCE); addAllTestsForModelPackage(DocumentrootModelPackage.INSTANCE); addAllTestsForModelPackage(DurationModelPackage.INSTANCE); addAllTestsForModelPackage(EcoreattrsModelPackage.INSTANCE); addAllTestsForModelPackage(EmapModelPackage.INSTANCE); addAllTestsForModelPackage(GroupallModelPackage.INSTANCE); // tests.add(createXMLTest(GroupallModelPackage.INSTANCE, GroupallModelPackage.INSTANCE // .getDocumentRootEClass())); addAllTestsForModelPackage(ListModelPackage.INSTANCE); addAllTestsForModelPackage(ListunionModelPackage.INSTANCE); addAllTestsForModelPackage(MixedModelPackage.INSTANCE); // tests.add(createXMLTest(MixedModelPackage.INSTANCE, MixedModelPackage.INSTANCE // .getDocumentRootEClass())); addAllTestsForModelPackage(NestedgroupModelPackage.INSTANCE); addAllTestsForModelPackage(QnameModelPackage.INSTANCE); addAllTestsForModelPackage(RestrictionModelPackage.INSTANCE); addAllTestsForModelPackage(SimplechoiceModelPackage.INSTANCE); addAllTestsForModelPackage(SimplefeaturemapModelPackage.INSTANCE); addAllTestsForModelPackage(SimpletypesModelPackage.INSTANCE); addAllTestsForModelPackage(SubstitutionModelPackage.INSTANCE); // tests.add(createXMLTest(SubstitutionModelPackage.INSTANCE, SubstitutionModelPackage.INSTANCE // .getDocumentRootEClass())); addAllTestsForModelPackage(SubstitutionzvonModelPackage.INSTANCE); // tests.add(createXMLTest(SubstitutionzvonModelPackage.INSTANCE, // SubstitutionzvonModelPackage.INSTANCE.getDocumentRootEClass())); // uncomment when this fix: // https://bugs.eclipse.org/bugs/show_bug.cgi?id=302921 // has been committed } private void addAllTestsForModelPackage(ModelPackage modelPackage) { tests.add(createConversionTest(modelPackage)); tests.add(createXMITest(modelPackage)); } private ConversionTest createConversionTest(ModelPackage modelPackage) { final ConversionTest conversionTest = new ConversionTest("ConversionTest: " + modelPackage.getEPackage().getName()); //$NON-NLS-1$ conversionTest.setModelPackages(Collections.singletonList(modelPackage)); return conversionTest; } private XMLTest createXMLTest(ModelPackage modelPackage, EClass eClass) { return createXMITest(Collections.singletonList(modelPackage), Collections.singletonList(eClass), false); } private XMLTest createXMITest(ModelPackage modelPackage) { return createXMITest(Collections.singletonList(modelPackage), null, true); } private XMLTest createXMITest(List<ModelPackage> modelPackages, List<EClass> eClasses, boolean doXMI) { final String prefix; if (doXMI) { prefix = "XMITest: "; //$NON-NLS-1$ } else { prefix = "XMLTest: "; //$NON-NLS-1$ } final XMLTest xmlTest = new XMLTest(prefix + modelPackages.get(0).getEPackage().getName()); xmlTest.setModelPackages(modelPackages); xmlTest.setEClasses(eClasses); xmlTest.setDoXMLCompare(determineIfXMLCompare(modelPackages, doXMI)); xmlTest.setDoXMI(doXMI); return xmlTest; } // don't do xml compare if there is a collection which is not a list or in case of // mixed features private boolean determineIfXMLCompare(List<ModelPackage> modelPackages, boolean doXMI) { for (ModelPackage modelPackage : modelPackages) { for (EClassifier eClassifier : modelPackage.getEPackage().getEClassifiers()) { if (eClassifier instanceof EClass) { final EClass eClass = (EClass) eClassifier; if (eClass.isAbstract() || eClass.isInterface()) { continue; } final Object instance = modelPackage.getModelFactory().create(eClass); final ModelObject<?> modelObject = ModelResolver.getInstance().getModelObject(instance); for (EStructuralFeature eFeature : eClass.getEAllStructuralFeatures()) { if (!eFeature.isVolatile() && eFeature.isMany()) { final Object collection = modelObject.eGet(eFeature); if (!(collection instanceof List<?>)) { return false; } if (doXMI && ModelUtils.isMixed(eFeature)) { // XMI does not support mixed content very well return false; } } } } } } return true; } public List<Test> getTests() { if (tests == null) { initialize(); } return tests; } public void setTests(List<Test> tests) { this.tests = tests; } }