/*
* Copyright (c) 2007, 2010 Borland Software Corporation 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:
* dvorak - initial API and implementation
* Artem Tikhomirov (Borland) - [230418] non-containment contexts; refactoring
* [256461] test implicit EObject operations access
*/
package org.eclipse.gmf.tests.validate;
import junit.framework.TestCase;
import org.eclipse.emf.common.util.Diagnostic;
import org.eclipse.emf.ecore.EAnnotation;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EModelElement;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.gmf.internal.validate.StatusCodes;
import org.eclipse.gmf.validate.GMFValidator;
import org.eclipse.gmf.validate.ValidationOptions;
public class AnnotatedOclValidatorTest extends TestCase {
EClass eClass;
/**
* @param name
*/
public AnnotatedOclValidatorTest(String name) {
super(name);
}
@Override
protected void setUp() throws Exception {
super.setUp();
EPackage model = DynamicModelHelper.createMetaModel();
this.eClass = DynamicModelHelper.createMetaClass(model);
}
public void testCorrectConstraint() throws Exception {
AnnotationUtil.OCL.createConstraint(eClass, "true"); //$NON-NLS-1$
Diagnostic status = GMFValidator.validate(eClass);
assertTrue(status.getSeverity() == Diagnostic.OK);
}
public void testInvalidConstraintBody() throws Exception {
EAnnotation constraint = AnnotationUtil.OCL.createConstraint(eClass, ";-)"); //$NON-NLS-1$
Diagnostic status = GMFValidator.validate(eClass);
assertTrue(status.getSeverity() == Diagnostic.ERROR);
assertEquals(AnnotationUtil.getChildDiagnostic(status).getCode(), StatusCodes.INVALID_VALUE_EXPRESSION);
assertSame(eClass, AnnotationUtil.getChildDiagnosticSource(status));
String defaultMessage = AnnotationUtil.getChildDiagnostic(status).getMessage();
assertNotNull(defaultMessage);
assertTrue(defaultMessage.indexOf(AnnotationUtil.OCL.getConstraintBodyDetail(constraint).getValue()) >= 0);
}
public void testMissingConstraintBody() throws Exception {
EAnnotation constraint = AnnotationUtil.OCL.createConstraint(eClass, null); //$NON-NLS-1$
Diagnostic status = GMFValidator.validate(eClass);
assertTrue(status.getSeverity() == Diagnostic.WARNING);
assertEquals(AnnotationUtil.getChildDiagnostic(status).getCode(), StatusCodes.EMPTY_CONSTRAINT_BODY);
assertSame(AnnotationUtil.OCL.getConstraintBodyDetail(constraint), AnnotationUtil.getChildDiagnosticSource(status));
}
public void testInvalidConstraintExpressionType() throws Exception {
AnnotationUtil.OCL.createConstraint(eClass, "'aString'"); //$NON-NLS-1$
Diagnostic status = GMFValidator.validate(eClass);
assertTrue(status.getSeverity() == Diagnostic.ERROR);
assertEquals(AnnotationUtil.getChildDiagnostic(status).getCode(), StatusCodes.INVALID_EXPRESSION_TYPE);
assertSame(eClass, AnnotationUtil.getChildDiagnosticSource(status));
}
public void testValidConstrainedElement() {
AnnotationUtil.OCL.createConstraint(eClass, "true"); //$NON-NLS-1$
EObject target = EcoreUtil.create(eClass);
ValidationOptions opts = new ValidationOptions();
opts.setReportSuccess(true);
Diagnostic status = GMFValidator.validate(target, opts);
assertTrue(status.getSeverity() == Diagnostic.OK);
assertSame(target, AnnotationUtil.getChildDiagnosticSource(status));
assertEquals(AnnotationUtil.getChildDiagnostic(status).getCode(), StatusCodes.CONSTRAINT_SATISFIED);
String defaultMessage = AnnotationUtil.getChildDiagnostic(status).getMessage();
assertNotNull(defaultMessage);
assertTrue(defaultMessage.trim().length() > 0);
}
public void testInvalidConstrainedElement() {
AnnotationUtil.OCL.createConstraint(eClass, "false"); //$NON-NLS-1$
EObject target = EcoreUtil.create(eClass);
Diagnostic status = GMFValidator.validate(target);
assertTrue(status.getSeverity() == Diagnostic.ERROR);
assertEquals(AnnotationUtil.getChildDiagnostic(status).getCode(), StatusCodes.CONSTRAINT_VIOLATION);
assertSame(target, AnnotationUtil.getChildDiagnosticSource(status));
}
public void testInvalidConstrainetContext() {
EModelElement invalidCtx = eClass.getEPackage();
EAnnotation constraint = AnnotationUtil.OCL.createConstraint(invalidCtx, "true"); //$NON-NLS-1$
Diagnostic status = GMFValidator.validate(invalidCtx);
assertTrue(status.getSeverity() == Diagnostic.WARNING);
assertEquals(AnnotationUtil.getChildDiagnostic(status).getCode(), StatusCodes.INVALID_CONSTRAINT_CONTEXT);
assertSame(constraint, AnnotationUtil.getChildDiagnosticSource(status));
}
public void testImplicitEObjectOperationsEnabled() {
AnnotationUtil.OCL.createConstraint(eClass, "eContainer().oclIsUndefined() and eClass().name = '" + eClass.getName() + '\''); //$NON-NLS-1$
Diagnostic status = GMFValidator.validate(eClass);
String msg = AnnotationUtil.getChildDiagnostic(status) != null ? AnnotationUtil.getChildDiagnostic(status).getMessage() : status.getMessage();
assertTrue(msg, status.getSeverity() == Diagnostic.OK);
EObject target = EcoreUtil.create(eClass);
status = GMFValidator.validate(target);
msg = AnnotationUtil.getChildDiagnostic(status) != null ? AnnotationUtil.getChildDiagnostic(status).getMessage() : status.getMessage();
assertTrue(msg, status.getSeverity() == Diagnostic.OK);
}
}