blob: e6e5378b117426b3e82e0cce78f966ec7503eb85 [file] [log] [blame]
/*******************************************************************************
* 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();
}
}