blob: d58337a9cc21414b42071200342b6495d4df7beb [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010, 2013 Tasktop Technologies 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
*
* Contributors:
* Tasktop Technologies - initial API and implementation
*******************************************************************************/
package org.eclipse.mylyn.bugzilla.tests.ui;
import java.util.Arrays;
import junit.framework.TestCase;
import org.eclipse.jface.text.Region;
import org.eclipse.jface.text.hyperlink.IHyperlink;
import org.eclipse.mylyn.commons.ui.PlatformUiUtil;
import org.eclipse.mylyn.internal.bugzilla.core.BugzillaCorePlugin;
import org.eclipse.mylyn.internal.bugzilla.ui.TaskAttachmentHyperlink;
import org.eclipse.mylyn.internal.bugzilla.ui.TaskAttachmentTableEditorHyperlink;
import org.eclipse.mylyn.internal.bugzilla.ui.tasklist.BugzillaConnectorUi;
import org.eclipse.mylyn.internal.tasks.core.TaskTask;
import org.eclipse.mylyn.tasks.core.TaskRepository;
import org.eclipse.mylyn.tasks.core.data.TaskAttribute;
import org.eclipse.mylyn.tasks.ui.TaskHyperlink;
/**
* @author Steffen Pingel
*/
public class BugzillaHyperlinkDetectorTest extends TestCase {
private BugzillaConnectorUi connector;
private TaskRepository repository;
private TaskTask task;
private void assertHyperlinks(String string, IHyperlink... expected) {
IHyperlink[] links = connector.findHyperlinks(repository, task, string, -1, 0);
if (expected.length == 0) {
assertNull("Expected no hyperlinks, but got: " + ((links != null) ? Arrays.asList(links).toString() : ""),
links);
return;
}
assertNotNull("Expected hyperlinks in " + string, links);
assertEquals(expected.length, links.length);
for (int i = 0; i < links.length; i++) {
assertEquals(expected[i], links[i]);
}
}
private TaskHyperlink link(int offset, int length, String taskId) {
return link(offset, length, taskId, null);
}
private TaskHyperlink link(int offset, int length, String taskId, String commentId) {
TaskHyperlink link = new TaskHyperlink(new Region(offset, length), repository, taskId);
if (commentId != null) {
link.setSelection(TaskAttribute.PREFIX_COMMENT + commentId);
}
return link;
}
@Override
protected void setUp() throws Exception {
repository = new TaskRepository(BugzillaCorePlugin.CONNECTOR_KIND, "http://localhost");
task = new TaskTask(BugzillaCorePlugin.CONNECTOR_KIND, "http://localhost", "123");
connector = new BugzillaConnectorUi();
}
public void testFindHyperlinksAttachment() {
if (PlatformUiUtil.supportsMultipleHyperlinkPresenter()) {
assertHyperlinks("attachment 123", new TaskAttachmentHyperlink(new Region(0, 14), repository, "123"),
new TaskAttachmentTableEditorHyperlink(new Region(0, 14), repository, "123"));
assertHyperlinks("attachment 123", new TaskAttachmentHyperlink(new Region(0, 15), repository, "123"),
new TaskAttachmentTableEditorHyperlink(new Region(0, 15), repository, "123"));
assertHyperlinks("attachment # 123", new TaskAttachmentHyperlink(new Region(0, 17), repository, "123"),
new TaskAttachmentTableEditorHyperlink(new Region(0, 17), repository, "123"));
assertHyperlinks("attachment#1", new TaskAttachmentHyperlink(new Region(0, 12), repository, "1"),
new TaskAttachmentTableEditorHyperlink(new Region(0, 12), repository, "1"));
assertHyperlinks("attachment (id=123)", new TaskAttachmentHyperlink(new Region(0, 19), repository, "123"),
new TaskAttachmentTableEditorHyperlink(new Region(0, 19), repository, "123"));
assertHyperlinks("Created attachment 123",
new TaskAttachmentHyperlink(new Region(0, 22), repository, "123"),
new TaskAttachmentTableEditorHyperlink(new Region(0, 22), repository, "123"));
assertHyperlinks("Created an attachment 123", new TaskAttachmentHyperlink(new Region(0, 25), repository,
"123"), new TaskAttachmentTableEditorHyperlink(new Region(0, 25), repository, "123"));
assertHyperlinks("Created an attachment (id=123)", new TaskAttachmentHyperlink(new Region(0, 30),
repository, "123"), new TaskAttachmentTableEditorHyperlink(new Region(0, 30), repository, "123"));
} else {
assertHyperlinks("attachment 123", new TaskAttachmentHyperlink(new Region(0, 14), repository, "123"));
assertHyperlinks("attachment 123", new TaskAttachmentHyperlink(new Region(0, 15), repository, "123"));
assertHyperlinks("attachment # 123", new TaskAttachmentHyperlink(new Region(0, 17), repository, "123"));
assertHyperlinks("attachment#1", new TaskAttachmentHyperlink(new Region(0, 12), repository, "1"));
assertHyperlinks("attachment (id=123)", new TaskAttachmentHyperlink(new Region(0, 19), repository, "123"));
assertHyperlinks("Created attachment 123",
new TaskAttachmentHyperlink(new Region(0, 22), repository, "123"));
assertHyperlinks("Created an attachment 123", new TaskAttachmentHyperlink(new Region(0, 25), repository,
"123"));
assertHyperlinks("Created an attachment (id=123)", new TaskAttachmentHyperlink(new Region(0, 30),
repository, "123"));
}
}
public void testFindHyperlinksBug() {
assertHyperlinks("bug123", link(0, 6, "123"));
assertHyperlinks("bug 123", link(0, 7, "123"));
assertHyperlinks("bug 123", link(0, 8, "123"));
assertHyperlinks("bug#123", link(0, 7, "123"));
assertHyperlinks("bug # 123", link(0, 11, "123"));
assertHyperlinks("Bug: 123", link(0, 8, "123"));
assertHyperlinks("bug: 123", link(0, 8, "123"));
}
public void testFindHyperlinksTask() {
assertHyperlinks("task123", link(0, 7, "123"));
}
public void testFindHyperlinksDuplicateOf() {
assertHyperlinks("duplicate of 123", link(0, 16, "123"));
}
public void testFindHyperlinksBugComment() {
assertHyperlinks("bug 123 comment 12", link(0, 18, "123", "12"));
assertHyperlinks("bug#123 comment 12", link(0, 18, "123", "12"));
assertHyperlinks("bug 123 comment#12", link(0, 18, "123", "12"));
assertHyperlinks("bug#123 comment#12", link(0, 18, "123", "12"));
assertHyperlinks("bug 123 comment# 12", link(0, 22, "123", "12"));
assertHyperlinks("bug456comment#1", link(0, 15, "456", "1"));
}
public void testFindHyperlinksBugNoComment() {
assertHyperlinks("bug 123#c1", link(0, 7, "123"));
assertHyperlinks("bug 123#1", link(0, 7, "123"));
assertHyperlinks("bug#123#c1", link(0, 7, "123"));
assertHyperlinks("bug#123#1", link(0, 7, "123"));
}
public void testFindHyperlinksComment() {
assertHyperlinks("comment#12", link(0, 10, "123", "12"));
assertHyperlinks("comment #12", link(0, 12, "123", "12"));
assertHyperlinks("comment 1", link(0, 9, "123", "1"));
}
public void testFindHyperlinksInline() {
assertHyperlinks("abc bug 123 def", link(4, 7, "123"));
}
public void testFindHyperlinksMultiple() {
assertHyperlinks("bug 456#comment#12", link(0, 7, "456"), link(8, 10, "123", "12"));
assertHyperlinks("bug 123 bug 456", link(0, 7, "123"), link(20, 7, "456"));
assertHyperlinks("bug: 123 bug: 456", link(0, 8, "123"), link(21, 8, "456"));
}
public void testFindHyperlinksLinebreak() {
assertHyperlinks("bug\n456");
}
public void testFindHyperlinksNoAttachment() {
assertHyperlinks("attachment");
assertHyperlinks("attachmen 123");
assertHyperlinks("attachment id");
assertHyperlinks("attachment id");
}
public void testFindHyperlinksNoBug() {
assertHyperlinks("bu 123");
assertHyperlinks("bu# 123");
assertHyperlinks("bug");
assertHyperlinks("bugcomment");
assertHyperlinks("bug#comment");
}
public void testFindHyperlinksNoComment() {
assertHyperlinks("c 12");
assertHyperlinks("#c12");
assertHyperlinks("comment");
}
}