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());
}
}