Index: src/main/java/hudson/plugins/trac/TracLinkAnnotator.java =================================================================== --- src/main/java/hudson/plugins/trac/TracLinkAnnotator.java (revision 14713) +++ src/main/java/hudson/plugins/trac/TracLinkAnnotator.java (working copy) @@ -9,10 +9,12 @@ import java.util.regex.Pattern; /** - * Annotates TracLink - * notation in changelog messages. - * + * Annotates TracLink and + * InterTrac notation in + * changelog messages. + * * @author Kohsuke Kawaguchi + * @author Rick Riemer */ public class TracLinkAnnotator extends ChangeLogAnnotator { @Override @@ -21,12 +23,16 @@ if(tpp==null || tpp.tracWebsite==null) return; // not configured - String url = tpp.tracWebsite; - for (LinkMarkup markup : MARKUPS) - markup.process(text, url); + annotate(tpp.tracWebsite, text); } - static final class LinkMarkup { + void annotate(String url, MarkupText text) { + for (LinkMarkup markup : MARKUPS) { + markup.process(text, url); + } + } + + private static final class LinkMarkup { private final Pattern pattern; private final String href; @@ -49,9 +55,9 @@ private static final Pattern ANYWORD_PATTERN = Pattern.compile("ANYWORD"); } - static final LinkMarkup[] MARKUPS = new LinkMarkup[] { + private static final LinkMarkup[] MARKUPS = new LinkMarkup[] { new LinkMarkup( - "(?:#|ticket:)NUM", + "(?WikiLink."); } + + public void testTicketLinkSyntax() { + assertAnnotatedTextEquals("Text with ticket #123 link", + "Text with ticket #123 link"); + assertAnnotatedTextEquals("#123", + "#123"); + } - private void assertAnnotatedTextEquals(String originalText, String expectedAnnotatedText) { - MarkupText markupText = new MarkupText(originalText); + public void testInterTracShortTicketLinkSyntax() { + assertAnnotatedTextEquals("Text with #T123 link", + "Text with #T123 link"); + assertAnnotatedTextEquals("#T123", + "#T123"); + } - for (TracLinkAnnotator.LinkMarkup markup : TracLinkAnnotator.MARKUPS) { - markup.process(markupText, TRAC_URL); - } + public void testInterTracMediumTicketLinkSyntax() { + assertAnnotatedTextEquals("Text with trac:#123 link", + "Text with trac:#123 link"); + assertAnnotatedTextEquals("trac:#123", + "trac:#123"); + } + + public void testInterTracFullTicketLinkSyntax() { + assertAnnotatedTextEquals("Text with trac:ticket:123 link", + "Text with trac:ticket:123 link"); + assertAnnotatedTextEquals("trac:ticket:123", + "trac:ticket:123"); + } + + public void testInterTracShortChangesetLinkSyntax() { + assertAnnotatedTextEquals("Text with [T123] link", + "Text with [T123] link"); + assertAnnotatedTextEquals("[T123]", + "[T123]"); + } + public void testInterTracFullChangesetLinkSyntax() { + assertAnnotatedTextEquals("Text with trac:changeset:123 link", + "Text with trac:changeset:123 link"); + assertAnnotatedTextEquals("trac:changeset:123", + "trac:changeset:123"); + } + + public void testInterTracFullWikiLinkSyntax() { + assertAnnotatedTextEquals("Text with trac:wiki:PageName link", + "Text with trac:wiki:PageName link"); + assertAnnotatedTextEquals("trac:wiki:PageName", + "trac:wiki:PageName"); + } + + public void testMultipleLinks() { + String ticketUrl = "#101"; + String changesetUrl = "[303]"; + assertAnnotatedTextEquals("#101 for [303]: Text", ticketUrl + " for " + changesetUrl + ": Text"); + } + + private void assertAnnotatedTextEquals(String originalText, String expectedAnnotatedText) { + MarkupText markupText = new MarkupText(originalText); + + TracLinkAnnotator annotator = new TracLinkAnnotator(); + annotator.annotate(TRAC_URL, markupText); + assertEquals(expectedAnnotatedText, markupText.toString()); } }