| /******************************************************************************* |
| * Copyright (c) 2010, 2011 Andreas Hoehmann and others. |
| * |
| * This program and the accompanying materials are made available under the |
| * terms of the Eclipse Public License v. 2.0 which is available at |
| * https://www.eclipse.org/legal/epl-2.0 |
| * |
| * SPDX-License-Identifier: EPL-2.0 |
| * |
| * Andreas Hoehmann - initial API and implementation |
| * Tasktop Technologies - improvements |
| *******************************************************************************/ |
| package org.eclipse.mylyn.java.tests.tasks; |
| |
| import java.util.Iterator; |
| |
| import junit.framework.TestCase; |
| |
| import org.eclipse.jdt.internal.corext.template.java.JavaContextType; |
| import org.eclipse.jdt.internal.corext.template.java.JavaDocContextType; |
| import org.eclipse.jdt.internal.ui.JavaPlugin; |
| import org.eclipse.jface.text.BadLocationException; |
| import org.eclipse.jface.text.Document; |
| import org.eclipse.jface.text.Position; |
| import org.eclipse.jface.text.templates.ContextTypeRegistry; |
| import org.eclipse.jface.text.templates.DocumentTemplateContext; |
| import org.eclipse.jface.text.templates.Template; |
| import org.eclipse.jface.text.templates.TemplateBuffer; |
| import org.eclipse.jface.text.templates.TemplateContextType; |
| import org.eclipse.jface.text.templates.TemplateException; |
| import org.eclipse.jface.text.templates.TemplateTranslator; |
| import org.eclipse.jface.text.templates.TemplateVariable; |
| import org.eclipse.jface.text.templates.TemplateVariableResolver; |
| import org.eclipse.mylyn.internal.tasks.core.LocalTask; |
| import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin; |
| import org.eclipse.mylyn.tasks.core.ITask; |
| import org.eclipse.mylyn.tasks.tests.connector.MockTask; |
| import org.eclipse.osgi.util.NLS; |
| |
| /** |
| * @author Andreas Hoehmann |
| * @author Steffen Pingel |
| */ |
| public class JavaTaskTemplateVariableResolverTest extends TestCase { |
| |
| @Override |
| protected void tearDown() throws Exception { |
| TasksUiPlugin.getTaskActivityManager().deactivateActiveTask(); |
| } |
| |
| /** |
| * Test with no active task. The resolver should not be able to resolve the mylyn template-variable. |
| */ |
| public void testNoTaskActive() throws Exception { |
| canHandleTemplateResolver("${activeTaskKey}", "activeTaskKey"); |
| canHandleTemplateResolver("${activeTaskPrefix}", "activeTaskPrefix"); |
| } |
| |
| /** |
| * Test with active task. The resolver must resolve the mylyn template-variable to the expected values. |
| */ |
| public void testActiveLocalTask() throws Exception { |
| ITask task = new LocalTask("12345", "Test Task"); |
| TasksUiPlugin.getTaskActivityManager().activateTask(task); |
| canHandleTemplateResolver("${activeTaskKey}", "12345"); |
| canHandleTemplateResolver("${activeTaskPrefix}", "task "); |
| canHandleTemplateResolver("${activeTaskPrefix}${activeTaskKey}", "task 12345"); |
| canHandleTemplateResolver("${activeTaskPrefix}#${activeTaskKey}", "task #12345"); |
| } |
| |
| /** |
| * Test with active task. Special check if task-key contains a "-". |
| */ |
| public void testActiveTaskJira() throws Exception { |
| ITask task = new MockTask("http://foo.bar", "12345"); |
| task.setTaskKey("DEMO-2"); |
| TasksUiPlugin.getTaskActivityManager().activateTask(task); |
| canHandleTemplateResolver("${activeTaskKey}", "DEMO-2"); |
| canHandleTemplateResolver("${activeTaskPrefix}${activeTaskKey}", "task DEMO-2"); |
| canHandleTemplateResolver("${activeTaskPrefix} ${activeTaskKey}", "task DEMO-2"); |
| } |
| |
| /** |
| * Test with active task. Check if fallback from task-key to task-id is working. |
| */ |
| public void testActiveTaskIdOrKey() throws Exception { |
| ITask task = new MockTask("http://foo.bar", "12345"); |
| TasksUiPlugin.getTaskActivityManager().activateTask(task); |
| canHandleTemplateResolver("${activeTaskKey}", "12345"); |
| canHandleTemplateResolver("${activeTaskPrefix}", "task "); |
| // from now the task have a key ... the resolve will prefer this key |
| task.setTaskKey("foobar"); |
| canHandleTemplateResolver("${activeTaskKey}", "foobar"); |
| } |
| |
| private void canHandleTemplateResolver(String templateContent, String expectedResolvedTemplate) |
| throws TemplateException, BadLocationException { |
| // check java template context |
| canHandleTemplateResolver(JavaContextType.ID_ALL, templateContent, expectedResolvedTemplate); |
| // check javadoc template context |
| canHandleTemplateResolver(JavaDocContextType.ID, templateContent, expectedResolvedTemplate); |
| } |
| |
| private void canHandleTemplateResolver(final String contextType, final String templateContent, |
| final String expectedResolvedTemplate) throws TemplateException, BadLocationException { |
| final ContextTypeRegistry registry = JavaPlugin.getDefault().getTemplateContextRegistry(); |
| final TemplateContextType context = registry.getContextType(contextType); |
| final Template template = new Template("name", "description", contextType, templateContent, false); |
| final TemplateTranslator translator = new TemplateTranslator(); |
| TemplateBuffer buffer = null; |
| buffer = translator.translate(template); |
| final TemplateVariable[] variables = buffer.getVariables(); |
| for (final TemplateVariable variable : variables) { |
| assertTrue(NLS.bind("No resolver found for variable ''{0}'' in template ''{1}''", variable, template), |
| canHandleVariable(context, variable)); |
| } |
| assertEquals(expectedResolvedTemplate, getResolveTemplate(context, template)); |
| } |
| |
| private boolean canHandleVariable(final TemplateContextType context, final TemplateVariable variable) { |
| for (final Iterator<?> iterator = context.resolvers(); iterator.hasNext();) { |
| final TemplateVariableResolver resolver = (TemplateVariableResolver) iterator.next(); |
| if (variable.getType().equals(resolver.getType())) { |
| return true; |
| } |
| } |
| return false; |
| } |
| |
| private String getResolveTemplate(final TemplateContextType context, final Template template) |
| throws BadLocationException, TemplateException { |
| final DocumentTemplateContext templateContext = new DocumentTemplateContext(context, new Document(), |
| new Position(0)); |
| TemplateBuffer templateBuffer = null; |
| templateBuffer = templateContext.evaluate(template); |
| return templateBuffer.getString(); |
| } |
| } |