/*******************************************************************************
* Copyright (c) 2010 SAP AG.
* 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:
* Emil Simeonov - initial API and implementation.
* Dimitar Donchev - initial API and implementation.
* Dimitar Tenev - initial API and implementation.
* Nevena Manova - initial API and implementation.
* Georgi Konstantinov - initial API and implementation.
*******************************************************************************/
package org.eclipse.wst.sse.sieditor.test.model.validation;
import java.util.Collection;
import java.util.List;
import org.eclipse.core.commands.operations.IOperationHistory;
import org.eclipse.core.commands.operations.ObjectUndoContext;
import org.eclipse.core.commands.operations.OperationHistoryFactory;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
import org.eclipse.emf.transaction.RecordingCommand;
import org.eclipse.emf.transaction.TransactionalEditingDomain;
import org.eclipse.wst.sse.sieditor.core.common.IEnvironment;
import org.eclipse.wst.sse.sieditor.core.editorfwk.ModelHandler;
import org.eclipse.wst.sse.sieditor.model.api.IWsdlModelRoot;
import org.eclipse.wst.sse.sieditor.model.validation.ESMModelAdapter;
import org.eclipse.wst.sse.sieditor.model.validation.EsmXsdModelAdapter;
import org.eclipse.wst.sse.sieditor.model.validation.IValidationService;
import org.eclipse.wst.sse.sieditor.model.validation.IValidationStatus;
import org.eclipse.wst.sse.sieditor.model.validation.IValidationStatusProvider;
import org.eclipse.wst.sse.sieditor.model.validation.ValidationService;
import org.eclipse.wst.sse.sieditor.model.wsdl.api.IDescription;
import org.eclipse.wst.sse.sieditor.model.xsd.api.IElement;
import org.eclipse.wst.sse.sieditor.model.xsd.api.ISchema;
import org.eclipse.wst.sse.sieditor.model.xsd.impl.StructureType;
import org.eclipse.wst.sse.sieditor.test.util.ResourceUtils;
import org.eclipse.wst.sse.sieditor.test.util.SIEditorBaseTest;
import org.junit.Before;
import org.junit.Test;
//A Transaction Rollback exception is thrown in the end ot the test execution. This is perfectly normal and out of the test scope!
@SuppressWarnings("nls")
public class ParentsValidationTest extends SIEditorBaseTest {
private ResourceSetImpl resourceSet;
private IDescription modelDescription;
private TransactionalEditingDomain editingDomain;
private IWsdlModelRoot modelRoot;
private IValidationService validationService;
@Override
@Before
public void setUp() throws Exception {
super.setUp();
final IFile file = ResourceUtils.copyFileIntoTestProject("validation/ParentsErrorMarkers.wsdl", Document_FOLDER_NAME,
this.getProject(), "One.wsdl");
resourceSet = new ResourceSetImpl();
modelRoot = (IWsdlModelRoot) ModelHandler.retrieveModelObject(resourceSet, URI.createFileURI(file.getLocation().toFile()
.getAbsolutePath()), false);
editingDomain = modelRoot.getEnv().getEditingDomain();
modelDescription = modelRoot.getDescription();
validationService = new ValidationService(resourceSet, modelRoot);
validationService.addModelAdapter(new EsmXsdModelAdapter());
validationService.addModelAdapter(new ESMModelAdapter(modelRoot));
final ObjectUndoContext ctx = new ObjectUndoContext(this);
final IOperationHistory operationHistory = OperationHistoryFactory.getOperationHistory();
operationHistory.setLimit(ctx, 100);
final IEnvironment env = modelRoot.getEnv();
env.setOperationHistory(operationHistory);
env.setUndoContext(ctx);
}
//A Transaction Rollback exception is thrown in the end ot the test execution. This is perfectly normal and out of the test scope!
@Test
public void testParentsAreInvalid() throws Throwable {
editingDomain.getCommandStack().execute(new RecordingCommand(editingDomain) {
@Override
protected void doExecute() {
ISchema modelsSchema = modelDescription
.getSchema("http://webservices.amazon.com/AWSECommerceService/2010-04-01_simplified")[0];
validationService.validate(modelsSchema);
IValidationStatusProvider validationStatusProvider = validationService.getValidationStatusProvider();
assertNotNull(validationStatusProvider.getStatus(modelsSchema));
assertTrue(validationStatusProvider.getStatusMarker(modelsSchema)==IStatus.ERROR);
StructureType type = (StructureType) modelsSchema.getType(true, "Item");
assertTrue(validationStatusProvider.getStatusMarker(type)==IStatus.ERROR);
Collection<IElement> elements = type.getElements("Tracks");
assertNotNull(elements);
assertEquals(1, elements.size());
List<IValidationStatus> status = validationStatusProvider.getStatus(elements.iterator().next());
assertEquals(1, status.size());
assertEquals(IStatus.ERROR, status.get(0).getSeverity());
}
});
}
}