blob: b7c9e1188ba485208e710aaf1cf7354671994c31 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006, 2009 Steffen Pingel 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:
* Steffen Pingel - initial API and implementation
* David Green - improvements
* Jan Mauersberger - fixes for bug 350931
*******************************************************************************/
package org.eclipse.mylyn.trac.tests.ui;
import java.util.List;
import junit.framework.TestCase;
import org.eclipse.jface.text.Region;
import org.eclipse.jface.text.hyperlink.IHyperlink;
import org.eclipse.mylyn.internal.trac.core.TracCorePlugin;
import org.eclipse.mylyn.internal.trac.ui.TracHyperlinkUtil;
import org.eclipse.mylyn.internal.trac.ui.WebHyperlink;
import org.eclipse.mylyn.tasks.core.TaskRepository;
import org.eclipse.mylyn.tasks.ui.TaskHyperlink;
/**
* @author Steffen Pingel
* @author David Green
* @see http://trac.edgewall.org/wiki/TracLinks
*/
public class TracHyperlinkUtilTest extends TestCase {
private TaskRepository repository;
@Override
protected void setUp() throws Exception {
repository = new TaskRepository(TracCorePlugin.CONNECTOR_KIND, "http://localhost");
}
public void testFindHyperlinksComment() {
IHyperlink[] links = findTracHyperlinks(repository, "comment:ticket:12:34", 0, 0);
assertNotNull(links);
assertEquals(1, links.length);
assertEquals(new Region(0, 20), links[0].getHyperlinkRegion());
assertEquals("12", ((TaskHyperlink) links[0]).getTaskId());
}
public void testFindHyperlinksTicket() {
IHyperlink[] links = TracHyperlinkUtil.findTicketHyperlinks(repository, "#11", 0, 0);
assertNotNull(links);
assertEquals(1, links.length);
assertEquals(new Region(0, 3), links[0].getHyperlinkRegion());
assertEquals("11", ((TaskHyperlink) links[0]).getTaskId());
links = TracHyperlinkUtil.findTicketHyperlinks(repository, "#11, #234", 6, 0);
assertNotNull(links);
assertEquals(1, links.length);
assertEquals("234", ((TaskHyperlink) links[0]).getTaskId());
links = TracHyperlinkUtil.findTicketHyperlinks(repository, " ticket:123 ", 2, 0);
assertNotNull(links);
assertEquals(1, links.length);
assertEquals(new Region(2, 10), links[0].getHyperlinkRegion());
assertEquals("123", ((TaskHyperlink) links[0]).getTaskId());
}
public void testFindHyperlinksNoTicket() {
IHyperlink[] links = findTracHyperlinks(repository, "#11", 0, 0);
assertNull(links);
links = findTracHyperlinks(repository, "#11, #234", 6, 0);
assertNull(links);
links = findTracHyperlinks(repository, " ticket:123 ", 2, 0);
assertNull(links);
links = findTracHyperlinks(repository, "#123 report:123", -1, 0);
assertNotNull(links);
assertEquals(1, links.length);
assertEquals("http://localhost/report/123", ((WebHyperlink) links[0]).getURLString());
}
public void testFindHyperlinksReport() {
IHyperlink[] links = findTracHyperlinks(repository, "report:123", 0, 0);
assertEquals(1, links.length);
assertEquals(new Region(0, 10), links[0].getHyperlinkRegion());
assertEquals("http://localhost/report/123", ((WebHyperlink) links[0]).getURLString());
links = findTracHyperlinks(repository, "{123}", 0, 0);
assertEquals(1, links.length);
assertEquals(new Region(0, 5), links[0].getHyperlinkRegion());
assertEquals("http://localhost/report/123", ((WebHyperlink) links[0]).getURLString());
links = findTracHyperlinks(repository, "{{123}}", -1, 0);
assertEquals(1, links.length);
assertEquals(new Region(1, 5), links[0].getHyperlinkRegion());
links = findTracHyperlinks(repository, "{abc}", -1, 0);
assertNull(links);
links = findTracHyperlinks(repository, "{{abc}}", -1, 0);
assertNull(links);
links = findTracHyperlinks(repository, "{{{123}}}", -1, 0);
assertNull(links);
}
public void testFindHyperlinksChangeset() {
IHyperlink[] links = findTracHyperlinks(repository, "r123", 0, 0);
assertEquals(1, links.length);
assertEquals(new Region(0, 4), links[0].getHyperlinkRegion());
assertEquals("http://localhost/changeset/123", ((WebHyperlink) links[0]).getURLString());
links = findTracHyperlinks(repository, "alr123", 0, 0);
assertNull(links);
links = findTracHyperlinks(repository, "[123]", 0, 0);
assertEquals(1, links.length);
assertEquals(new Region(0, 5), links[0].getHyperlinkRegion());
assertEquals("http://localhost/changeset/123", ((WebHyperlink) links[0]).getURLString());
links = findTracHyperlinks(repository, "![123]", 0, 0);
assertNull(links);
links = findTracHyperlinks(repository, "![123]", 1, 0);
assertNull(links);
links = findTracHyperlinks(repository, "changeset:123", 0, 0);
assertEquals(1, links.length);
assertEquals(new Region(0, 13), links[0].getHyperlinkRegion());
assertEquals("http://localhost/changeset/123", ((WebHyperlink) links[0]).getURLString());
links = findTracHyperlinks(repository, "[123/trunk]", 0, 0);
assertEquals(1, links.length);
assertEquals(new Region(0, 11), links[0].getHyperlinkRegion());
assertEquals("http://localhost/changeset/123/trunk", ((WebHyperlink) links[0]).getURLString());
links = findTracHyperlinks(repository, "changeset:123/trunk", 0, 0);
assertEquals(1, links.length);
assertEquals(new Region(0, 19), links[0].getHyperlinkRegion());
assertEquals("http://localhost/changeset/123/trunk", ((WebHyperlink) links[0]).getURLString());
}
public void testFindHyperlinksRevisionLog() {
IHyperlink[] links = findTracHyperlinks(repository, "r123:456", 0, 0);
assertEquals(2, links.length);
assertEquals("http://localhost/log/?rev=123&stop_rev=456", ((WebHyperlink) links[0]).getURLString());
assertEquals(new Region(0, 8), links[0].getHyperlinkRegion());
links = findTracHyperlinks(repository, "[123:456]", 0, 0);
assertEquals(1, links.length);
assertEquals("http://localhost/log/?rev=123&stop_rev=456", ((WebHyperlink) links[0]).getURLString());
assertEquals(new Region(0, 9), links[0].getHyperlinkRegion());
links = findTracHyperlinks(repository, "log:@123:456", 0, 0);
assertEquals(1, links.length);
assertEquals("http://localhost/log/?rev=123&stop_rev=456", ((WebHyperlink) links[0]).getURLString());
assertEquals(new Region(0, 12), links[0].getHyperlinkRegion());
links = findTracHyperlinks(repository, "log:trunk@123:456", 0, 0);
assertEquals(1, links.length);
assertEquals("http://localhost/log/trunk?rev=123&stop_rev=456", ((WebHyperlink) links[0]).getURLString());
assertEquals(new Region(0, 17), links[0].getHyperlinkRegion());
}
public void testFindHyperlinksDiff() {
IHyperlink[] links = findTracHyperlinks(repository, "diff:@123:456", 0, 0);
assertNotNull(links);
assertEquals(1, links.length);
assertEquals("http://localhost/changeset/?new=456&old=123", ((WebHyperlink) links[0]).getURLString());
links = findTracHyperlinks(repository, "diff:trunk/trac@3538//sandbox/vc-refactoring/trac@3539", 0, 0);
assertNotNull(links);
assertEquals(1, links.length);
assertEquals(
"http://localhost/changeset/?new_path=sandbox%2Fvc-refactoring%2Ftrac&old_path=trunk%2Ftrac&new=3539&old=3538",
((WebHyperlink) links[0]).getURLString());
links = findTracHyperlinks(repository, "diff:tags/trac-0.9.2/wiki-default//tags/trac-0.9.3/wiki-default", 0, 0);
assertNotNull(links);
assertEquals(1, links.length);
assertEquals(
"http://localhost/changeset/?new_path=tags%2Ftrac-0.9.3%2Fwiki-default&old_path=tags%2Ftrac-0.9.2%2Fwiki-default",
((WebHyperlink) links[0]).getURLString());
}
public void testFindHyperlinksWiki() {
IHyperlink[] links = findTracHyperlinks(repository, "[wiki:page]", 1, 0);
assertNotNull(links);
assertEquals(1, links.length);
assertEquals("http://localhost/wiki/page", ((WebHyperlink) links[0]).getURLString());
links = findTracHyperlinks(repository, "wiki:page", 0, 0);
assertNotNull(links);
assertEquals(1, links.length);
assertEquals("http://localhost/wiki/page", ((WebHyperlink) links[0]).getURLString());
links = findTracHyperlinks(repository, "Page", 0, 0);
assertNull(links);
links = findTracHyperlinks(repository, "!Page", 0, 0);
assertNull(links);
links = findTracHyperlinks(repository, "ab Page dc", 0, 0);
assertNull(links);
links = findTracHyperlinks(repository, "paGe", 0, 0);
assertNull(links);
links = findTracHyperlinks(repository, "WikiPage", 0, 0);
assertNotNull(links);
assertEquals(1, links.length);
assertEquals("http://localhost/wiki/WikiPage", ((WebHyperlink) links[0]).getURLString());
assertEquals(new Region(0, 8), links[0].getHyperlinkRegion());
links = findTracHyperlinks(repository, "!WikiPage", 0, 0);
assertNull(links);
links = findTracHyperlinks(repository, "!WikiPage", 1, 0);
assertNull(links);
links = findTracHyperlinks(repository, "a WikiPage is here", 4, 0);
assertNotNull(links);
assertEquals(1, links.length);
assertEquals("http://localhost/wiki/WikiPage", ((WebHyperlink) links[0]).getURLString());
assertEquals(new Region(2, 8), links[0].getHyperlinkRegion());
links = findTracHyperlinks(repository, "a !WikiPage is here", 4, 0);
assertNull(links);
}
public void testFindHyperlinksWikiTwoCamelCaseWork() {
IHyperlink[] links = findTracHyperlinks(repository, "aWIkiPage is here", 2, 0);
assertNull(links);
links = findTracHyperlinks(repository, "aWIkiPage is here", 4, 0);
assertNull(links);
}
public void testFindHyperlinksMilestone() {
IHyperlink[] links = findTracHyperlinks(repository, "milestone:1.0", 1, 0);
assertNotNull(links);
assertEquals(1, links.length);
assertEquals("http://localhost/milestone/1.0", ((WebHyperlink) links[0]).getURLString());
}
public void testFindHyperlinksAttachment() {
IHyperlink[] links = findTracHyperlinks(repository, "attachment:ticket:123:foo.bar", 1, 0);
assertNotNull(links);
assertEquals("123", ((TaskHyperlink) links[0]).getTaskId());
}
public void testFindHyperlinksFiles() {
IHyperlink[] links = findTracHyperlinks(repository, "source:trunk/foo", 1, 0);
assertNotNull(links);
assertEquals(1, links.length);
assertEquals("http://localhost/browser/trunk/foo", ((WebHyperlink) links[0]).getURLString());
links = findTracHyperlinks(repository, "source:trunk/foo@123", 1, 0);
assertNotNull(links);
assertEquals(1, links.length);
assertEquals("http://localhost/browser/trunk/foo?rev=123", ((WebHyperlink) links[0]).getURLString());
links = findTracHyperlinks(repository, "source:trunk/foo@123#L456", 1, 0);
assertNotNull(links);
assertEquals(1, links.length);
assertEquals("http://localhost/browser/trunk/foo?rev=123#L456", ((WebHyperlink) links[0]).getURLString());
links = findTracHyperlinks(repository, "source:/tags/foo_bar-1.1", 1, 0);
assertNotNull(links);
assertEquals(1, links.length);
assertEquals("http://localhost/browser/tags/foo_bar-1.1", ((WebHyperlink) links[0]).getURLString());
}
private IHyperlink[] findTracHyperlinks(TaskRepository repository, String text, int offsetInText, int textOffset) {
List<IHyperlink> links = TracHyperlinkUtil.findTracHyperlinks(repository, text, offsetInText, textOffset);
return (links.isEmpty()) ? null : links.toArray(new IHyperlink[0]);
}
}