| /******************************************************************************* |
| * Copyright (c) 2004, 2011 Andrew Eisenberg 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: |
| * Andrew Eisenberg - initial API and implementation |
| *******************************************************************************/ |
| |
| package org.eclipse.mylyn.context.tests; |
| |
| import java.lang.reflect.Method; |
| import java.util.List; |
| |
| import org.eclipse.mylyn.context.core.AbstractContextStructureBridge; |
| import org.eclipse.mylyn.context.sdk.util.AbstractContextTest; |
| import org.eclipse.mylyn.internal.context.core.ContextCorePlugin; |
| |
| /** |
| * This tests that structure bridge shadowing occurs appropriately. |
| * |
| * @author Andrew Eisenberg |
| */ |
| public class ShadowsBridgeTest extends AbstractContextTest { |
| |
| static final String BASE_CONTENT_TYPE = "BASE_CONTENT_TYPE"; |
| |
| static final String SHADOWS_CONTENT_TYPE = "SHADOWS_CONTENT_TYPE"; |
| |
| static final String BASE_IDENTIFIER = "BASE_IDENTIFIER"; |
| |
| static final String SHADOWS_IDENTIFIER = "SHADOWS_IDENTIFIER"; |
| |
| static final String BASE_LABEL = "BASE_LABEL"; |
| |
| static final String SHADOWS_LABEL = "SHADOWS_LABEL"; |
| |
| static final Object BASE_OBJECT = new Object(); |
| |
| static final Object SHADOWS_OBJECT = new Object(); |
| |
| class BaseContentStructureBridge extends AbstractContextStructureBridge { |
| |
| @Override |
| public boolean acceptsObject(Object object) { |
| return object == BASE_OBJECT || object == SHADOWS_OBJECT; |
| } |
| |
| @Override |
| public boolean canBeLandmark(String handle) { |
| return false; |
| } |
| |
| @Override |
| public boolean canFilter(Object element) { |
| return false; |
| } |
| |
| @Override |
| public List<String> getChildHandles(String handle) { |
| return null; |
| } |
| |
| @Override |
| public String getContentType() { |
| return BASE_CONTENT_TYPE; |
| } |
| |
| @Override |
| public String getContentType(String elementHandle) { |
| if (elementHandle == BASE_IDENTIFIER) { |
| return BASE_CONTENT_TYPE; |
| } else if (elementHandle == SHADOWS_IDENTIFIER) { |
| return SHADOWS_IDENTIFIER; |
| } else { |
| return null; |
| } |
| } |
| |
| @Override |
| public String getHandleForOffsetInObject(Object resource, int offset) { |
| if (resource == BASE_OBJECT) { |
| return BASE_IDENTIFIER; |
| } else if (resource == SHADOWS_OBJECT) { |
| return SHADOWS_IDENTIFIER; |
| } else { |
| return null; |
| } |
| } |
| |
| @Override |
| public String getHandleIdentifier(Object object) { |
| if (object == BASE_OBJECT) { |
| return BASE_IDENTIFIER; |
| } else if (object == SHADOWS_OBJECT) { |
| return SHADOWS_IDENTIFIER; |
| } else { |
| return null; |
| } |
| } |
| |
| @Override |
| public String getLabel(Object object) { |
| if (object == BASE_OBJECT) { |
| return BASE_LABEL; |
| } else if (object == SHADOWS_OBJECT) { |
| return SHADOWS_LABEL; |
| } else { |
| return null; |
| } |
| } |
| |
| @Override |
| public Object getObjectForHandle(String handle) { |
| if (handle == BASE_IDENTIFIER) { |
| return BASE_OBJECT; |
| } else if (handle == SHADOWS_IDENTIFIER) { |
| return SHADOWS_OBJECT; |
| } else { |
| return null; |
| } |
| } |
| |
| @Override |
| public String getParentHandle(String handle) { |
| return null; |
| } |
| |
| @Override |
| public boolean isDocument(String handle) { |
| return false; |
| } |
| |
| } |
| |
| class ShadowsContentStructureBridge extends AbstractContextStructureBridge { |
| |
| @Override |
| public boolean acceptsObject(Object object) { |
| return object == SHADOWS_OBJECT; |
| } |
| |
| @Override |
| public boolean canBeLandmark(String handle) { |
| return false; |
| } |
| |
| @Override |
| public boolean canFilter(Object element) { |
| return false; |
| } |
| |
| @Override |
| public List<String> getChildHandles(String handle) { |
| return null; |
| } |
| |
| @Override |
| public String getContentType() { |
| return SHADOWS_CONTENT_TYPE; |
| } |
| |
| @Override |
| public String getContentType(String elementHandle) { |
| if (elementHandle == SHADOWS_IDENTIFIER) { |
| return SHADOWS_IDENTIFIER; |
| } else { |
| return null; |
| } |
| } |
| |
| @Override |
| public String getHandleForOffsetInObject(Object resource, int offset) { |
| if (resource == SHADOWS_OBJECT) { |
| return SHADOWS_IDENTIFIER; |
| } else { |
| return null; |
| } |
| } |
| |
| @Override |
| public String getHandleIdentifier(Object object) { |
| if (object == SHADOWS_OBJECT) { |
| return SHADOWS_IDENTIFIER; |
| } else { |
| return null; |
| } |
| } |
| |
| @Override |
| public String getLabel(Object object) { |
| if (object == SHADOWS_OBJECT) { |
| return SHADOWS_LABEL; |
| } else { |
| return null; |
| } |
| } |
| |
| @Override |
| public Object getObjectForHandle(String handle) { |
| if (handle == SHADOWS_IDENTIFIER) { |
| return SHADOWS_OBJECT; |
| } else { |
| return null; |
| } |
| } |
| |
| @Override |
| public String getParentHandle(String handle) { |
| return null; |
| } |
| |
| @Override |
| public boolean isDocument(String handle) { |
| return false; |
| } |
| |
| } |
| |
| /** |
| * @throws Exception |
| */ |
| public void testShadowsStructureBridge() throws Exception { |
| // 1) Create mock bridge |
| BaseContentStructureBridge baseBridge = new BaseContentStructureBridge(); |
| |
| // 2) Add it to ContextCorePlugin |
| ContextCorePlugin context = ContextCorePlugin.getDefault(); |
| context.addStructureBridge(baseBridge); |
| |
| // 3) Check that the bridge is found properly |
| AbstractContextStructureBridge otherBridge; |
| |
| otherBridge = context.getStructureBridge(BASE_CONTENT_TYPE); |
| assertEquals("Should be the same bridges: " + baseBridge + " " + otherBridge, baseBridge, otherBridge); |
| |
| otherBridge = context.getStructureBridge(BASE_OBJECT); |
| assertEquals("Should be the same bridges: " + baseBridge + " " + otherBridge, baseBridge, otherBridge); |
| |
| // otherBridge = context.getStructureBridge(SHADOWS_CONTENT_TYPE); |
| // assertEquals("Should be the same bridges: " + baseBridge + " " + otherBridge, baseBridge, otherBridge); |
| |
| otherBridge = context.getStructureBridge(SHADOWS_OBJECT); |
| assertEquals("Should be the same bridges: " + baseBridge + " " + otherBridge, baseBridge, otherBridge); |
| |
| // 4) Create second mock bridge |
| ShadowsContentStructureBridge shadowsBridge = new ShadowsContentStructureBridge(); |
| |
| // 5) Add it to ContextCorePlugin |
| context.addStructureBridge(shadowsBridge); |
| |
| // 6) Add shadows relationship (must use reflection because it is not exposed) |
| Method addShadowsContentMethod = ContextCorePlugin.class.getDeclaredMethod("addShadowsContent", String.class, |
| String.class); |
| addShadowsContentMethod.setAccessible(true); |
| addShadowsContentMethod.invoke(context, BASE_CONTENT_TYPE, SHADOWS_CONTENT_TYPE); |
| |
| // 7) Ensure that the proper kinds of objects are accepted by the shadows bridge instead |
| // now the base content is shadowed and should return the shadows bridge |
| otherBridge = context.getStructureBridge(BASE_CONTENT_TYPE); |
| assertEquals("Should be the same bridges: " + shadowsBridge + " " + otherBridge, shadowsBridge, otherBridge); |
| |
| otherBridge = context.getStructureBridge(SHADOWS_CONTENT_TYPE); |
| assertEquals("Should be the same bridges: " + shadowsBridge + " " + otherBridge, shadowsBridge, otherBridge); |
| |
| otherBridge = context.getStructureBridge(SHADOWS_OBJECT); |
| assertEquals("Should be the same bridges: " + shadowsBridge + " " + otherBridge, shadowsBridge, otherBridge); |
| |
| // since shadows bridge does not accept BASE_OBJECT, we should still be getting base bridge here. |
| otherBridge = context.getStructureBridge(BASE_OBJECT); |
| assertEquals("Should be the same bridges: " + baseBridge + " " + otherBridge, baseBridge, otherBridge); |
| } |
| } |