org.eclipse.objectteams.otdt.tests.otmodel.CalloutMappingTest.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.objectteams.otdt.tests.otmodel.CalloutMappingTest.java

Source

/**********************************************************************
 * This file is part of "Object Teams Development Tooling"-Software
 * 
 * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
 * for its Fraunhofer Institute and Computer Architecture and Software
 * Technology (FIRST), Berlin, Germany and Technical University Berlin,
 * Germany.
 * 
 * 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
 * $Id: CalloutMappingTest.java 23494 2010-02-05 23:06:44Z stephan $
 * 
 * Please visit http://www.eclipse.org/objectteams for updates and contact.
 * 
 * Contributors:
 *      Fraunhofer FIRST - Initial API and implementation
 *      Technical University Berlin - Initial API and implementation
 **********************************************************************/
package org.eclipse.objectteams.otdt.tests.otmodel;

import junit.framework.Test;

import org.eclipse.jdt.core.IAnnotation;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IMemberValuePair;
import org.eclipse.jdt.core.IMethod;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.internal.core.SourceType;
import org.eclipse.objectteams.otdt.core.ICalloutMapping;
import org.eclipse.objectteams.otdt.core.ICalloutToFieldMapping;
import org.eclipse.objectteams.otdt.core.IMethodMapping;
import org.eclipse.objectteams.otdt.core.IOTType;
import org.eclipse.objectteams.otdt.core.IRoleType;
import org.eclipse.objectteams.otdt.core.OTModelManager;

/**
 * $Id: CalloutMappingTest.java 23494 2010-02-05 23:06:44Z stephan $
 *
 * testcase:
 * a team class with a bound role class and various callout binding declarations
 */
public class CalloutMappingTest extends FileBasedModelTest {

    private IType _teamJavaElem;
    private IType _roleJavaElem;

    public CalloutMappingTest(String name) {
        super(name);
    }

    static boolean ALL_TESTS = true;

    public static Test suite() {
        if (ALL_TESTS)
            return new Suite(CalloutMappingTest.class);
        junit.framework.TestSuite suite = new Suite(CalloutMappingTest.class.getName());
        return suite;
    }

    public void setUpSuite() throws Exception {
        setTestProjectDir("CalloutMapping");
        super.setUpSuite();
    }

    public void setUp() throws Exception {
        super.setUp();

        try {
            ICompilationUnit teamUnit = getCompilationUnit("CalloutMapping", "src", "teampkg",
                    "SampleTeam" + ".java");

            _teamJavaElem = teamUnit.getType("SampleTeam");

            _roleJavaElem = _teamJavaElem.getType("SampleRole");

        } catch (JavaModelException ex) {
            ex.printStackTrace();
        }
    }

    private IRoleType getRoleOTElem() {
        if ((_roleJavaElem != null) && (_roleJavaElem.exists())) {
            IOTType roleOTElem = OTModelManager.getOTElement(_roleJavaElem);

            if ((roleOTElem != null) && (roleOTElem instanceof IRoleType)) {
                return ((IRoleType) roleOTElem);
            }
        }
        return null;
    }

    public void testExistenceOfMappings() throws JavaModelException {
        IRoleType roleOTElem = getRoleOTElem();
        assertNotNull(roleOTElem);

        IMethodMapping[] allMethodMappings = roleOTElem.getMethodMappings();
        assertEquals(4, allMethodMappings.length);

        IMethodMapping[] calloutMethodMappings = roleOTElem.getMethodMappings(IRoleType.CALLOUTS);
        assertEquals(4, calloutMethodMappings.length);

        IMethodMapping[] callinMethodMappings = roleOTElem.getMethodMappings(IRoleType.CALLINS);
        assertEquals(0, callinMethodMappings.length);
    }

    public void testMapping1FromMemento() throws JavaModelException {
        IRoleType roleOTElem = getRoleOTElem();
        assertNotNull(roleOTElem);
        IMethodMapping[] calloutMethodMappings = roleOTElem.getMethodMappings(IRoleType.CALLOUTS);

        IMethodMapping mapping = calloutMethodMappings[0];
        assertNotNull(mapping);

        String token = mapping.getHandleIdentifier();

        SourceType sourceType = (SourceType) roleOTElem.getCorrespondingJavaElement();
        IJavaElement fromMemento = JavaCore.create(token, sourceType.getCompilationUnit().getOwner());

        assertEquals("Elements should be equal", mapping, fromMemento);

        assertTrue("Element should exist", fromMemento.exists());

        assertTrue("Mapping should have signature", ((IMethodMapping) fromMemento).hasSignature());
    }

    public void testMapping2FromMemento() throws JavaModelException {
        IRoleType roleOTElem = getRoleOTElem();
        assertNotNull(roleOTElem);
        IMethodMapping[] calloutMethodMappings = roleOTElem.getMethodMappings(IRoleType.CALLOUTS);

        IMethodMapping mapping = calloutMethodMappings[1];
        assertNotNull(mapping);

        String token = mapping.getHandleIdentifier();

        SourceType sourceType = (SourceType) roleOTElem.getCorrespondingJavaElement();
        IJavaElement fromMemento = JavaCore.create(token, sourceType.getCompilationUnit().getOwner());

        assertEquals("Elements should be equal", mapping, fromMemento);

        assertTrue("Element should exist", fromMemento.exists());

        assertFalse("Mapping should not have signature", ((IMethodMapping) fromMemento).hasSignature());
    }

    public void testMapping3FromMemento() throws JavaModelException {
        IRoleType roleOTElem = getRoleOTElem();
        assertNotNull(roleOTElem);
        IMethodMapping[] calloutMethodMappings = roleOTElem.getMethodMappings(IRoleType.CALLOUTS);

        IMethodMapping mapping = calloutMethodMappings[2];
        assertNotNull(mapping);

        String token = mapping.getHandleIdentifier();

        SourceType sourceType = (SourceType) roleOTElem.getCorrespondingJavaElement();
        IJavaElement fromMemento = JavaCore.create(token, sourceType.getCompilationUnit().getOwner());

        assertEquals("Elements should be equal", mapping, fromMemento);

        assertTrue("Element should exist", fromMemento.exists());

        ICalloutMapping mappingFromMemento = (ICalloutMapping) fromMemento;
        assertTrue("Mapping should have signature", mappingFromMemento.hasSignature());

        assertTrue("Expecting 1 role parameter",
                mappingFromMemento.getRoleMethodHandle().getArgumentTypes().length == 1);
        assertTrue("Expecting 2 base parameters",
                mappingFromMemento.getBaseMethodHandle().getArgumentTypes().length == 2);
    }

    public void testMapping4FromMemento() throws JavaModelException {
        IRoleType roleOTElem = getRoleOTElem();
        assertNotNull(roleOTElem);
        IMethodMapping[] calloutMethodMappings = roleOTElem.getMethodMappings(IRoleType.CALLOUTS);

        IMethodMapping mapping = calloutMethodMappings[3];
        assertNotNull(mapping);

        String token = mapping.getHandleIdentifier();

        SourceType sourceType = (SourceType) roleOTElem.getCorrespondingJavaElement();
        IJavaElement fromMemento = JavaCore.create(token, sourceType.getCompilationUnit().getOwner());

        assertEquals("Elements should be equal", mapping, fromMemento);

        assertTrue("Element should exist", fromMemento.exists());

        assertTrue("Expecting callout to field", fromMemento instanceof ICalloutToFieldMapping);
        ICalloutToFieldMapping mappingFromMemento = (ICalloutToFieldMapping) fromMemento;
        assertTrue("Mapping should have signature", mappingFromMemento.hasSignature());

        assertFalse("Expecting no setter", mappingFromMemento.getBaseFieldHandle().isSetter());
    }

    public void testCtfWithAnnotation() throws JavaModelException {
        IRoleType roleOTElem = getRoleOTElem();
        assertNotNull(roleOTElem);
        IMethodMapping[] calloutMethodMappings = roleOTElem.getMethodMappings(IRoleType.CALLOUTS);

        IMethodMapping mapping = calloutMethodMappings[3];
        assertNotNull(mapping);

        IAnnotation[] annotations = mapping.getAnnotations();
        assertTrue("Annotations should not be null", annotations != null);
        assertEquals("Wrong number of annotations", 1, annotations.length);
        assertEquals("Wrong annotation type", "SuppressWarnings", annotations[0].getElementName());
        IMemberValuePair[] memberValuePairs = annotations[0].getMemberValuePairs();
        assertTrue("Pairs should not be null", memberValuePairs != null);
        assertEquals("Wrong number of pairs", 1, memberValuePairs.length);
        assertEquals("Wrong value", "decapsulation", memberValuePairs[0].getValue());
    }

    public void testCtfExceptions() throws JavaModelException {
        IRoleType roleOTElem = getRoleOTElem();
        assertNotNull(roleOTElem);
        IMethodMapping[] calloutMethodMappings = roleOTElem.getMethodMappings(IRoleType.CALLOUTS);

        IMethodMapping mapping = calloutMethodMappings[3];
        assertNotNull(mapping);

        assertEquals("Wrong number of declared exceptions", 0, ((IMethod) mapping).getExceptionTypes().length); // and don't NPE 
    }

}