/* * Copyright (c) 2006 Borland Software Corporation * * 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: * Michael Golubev (Borland) - initial API and implementation */ package org.eclipse.uml2.diagram.clazz.tests.parser; import org.eclipse.emf.ecore.EObject; import org.eclipse.uml2.diagram.common.parser.operation.OperationParser; import org.eclipse.uml2.diagram.parser.ExternalParserException; import org.eclipse.uml2.diagram.parser.lookup.LookupSuite; import org.eclipse.uml2.uml.Operation; import org.eclipse.uml2.uml.Parameter; import org.eclipse.uml2.uml.ParameterDirectionKind; import org.eclipse.uml2.uml.Type; import org.eclipse.uml2.uml.UMLFactory; import org.eclipse.uml2.uml.UMLPackage; import org.eclipse.uml2.uml.VisibilityKind; public class OperationParserTest extends ParserTestBase { public void testSample() throws ExternalParserException { final String TEXT = "- composite Name(in a : composite type[6] {ordered}, \t inout B, out c = 5) : string {unique, query} "; Type stringType = createType("string") ; Type compositeType = createType("composite type"); MockLookupSuite suite = new MockLookupSuite(); suite.setLookup(Type.class, new FixedLookup<Type>(new Type[] {stringType, compositeType})); Operation actual = parse(TEXT, suite); assertEquals(VisibilityKind.PRIVATE_LITERAL, actual.getVisibility()); assertEquals("composite Name", actual.getName()); assertTrue(actual.isUnique()); assertFalse(actual.isOrdered()); assertTrue(actual.isQuery()); assertNotNull(actual.getReturnResult()); assertEquals(stringType, actual.getReturnResult().getType()); assertEquals(stringType, actual.getType()); assertEquals(3 + 1, actual.getOwnedParameters().size()); Parameter aParam = actual.getOwnedParameter("a", compositeType); Parameter bParam = actual.getOwnedParameter("B", null); Parameter cParam = actual.getOwnedParameter("c", null); assertNotNull(aParam); assertNotNull(bParam); assertNotNull(cParam); assertEquals(6, aParam.getLower()); assertEquals(6, aParam.getUpper()); assertTrue(aParam.isOrdered()); assertEquals(UMLFactory.eINSTANCE.createParameter().isUnique(), aParam.isUnique()); assertEquals(ParameterDirectionKind.IN_LITERAL, aParam.getDirection()); assertEquals(ParameterDirectionKind.INOUT_LITERAL, bParam.getDirection()); assertEquals(ParameterDirectionKind.OUT_LITERAL, cParam.getDirection()); assertEquals("5", cParam.getDefault()); } private Type createType(String name) { Type result = UMLFactory.eINSTANCE.createClass(); result.setName(name); return result; } protected Operation parse(String text) throws ExternalParserException { getLookupSuite().resetAll(); return parse(text, getLookupSuite()); } protected static Operation parse(String text, LookupSuite lookup) throws ExternalParserException { OperationParser parser = new OperationParser(lookup); EObject result = parser.parseNewObject(getFakeContext(), text); assertNotNull(result); assertEquals(UMLPackage.eINSTANCE.getOperation(), result.eClass()); return (Operation)result; } protected static EObject getFakeContext(){ return UMLFactory.eINSTANCE.createOperation(); } }