/******************************************************************************* * Copyright (c) 2011 Benjamin Muskalla and others * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Benjamin Muskalla <benjamin.muskalla@tasktop.com> - initial implementation *******************************************************************************/ package org.eclipse.egit.internal.mylyn; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import org.eclipse.egit.internal.mylyn.ui.CommitHyperlinkDetector; import org.eclipse.jface.text.Document; import org.eclipse.jface.text.Region; import org.eclipse.jface.text.TextViewer; import org.eclipse.jface.text.hyperlink.IHyperlink; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Shell; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.BlockJUnit4ClassRunner; @RunWith(BlockJUnit4ClassRunner.class) public class CommitHyperlinkDetectorTest { private static final String OTHER_EXAMPLE_ID = "3de38c8898c74b867cb6f06f7907e0719d9d4c0c"; private static final String EXAMPLE_ID = "2de0ab486c66566ae1ad36b73bfc9d99e14eb195"; private TextViewer textViewer; private CommitHyperlinkDetector detector; @Test public void testNoDocument() { textViewer.setDocument(null); IHyperlink[] hyperlinks = detectHyperlinks(0,0); assertNull(hyperlinks); } @Test public void testBadLocation() { textViewer.setDocument(null); IHyperlink[] hyperlinks = detectHyperlinks(10,0); assertNull(hyperlinks); } @Test public void testEmpty() { setText(""); IHyperlink[] hyperlinks = detectHyperlinks(); assertNull(hyperlinks); } @Test public void testSimpleId() { setText(EXAMPLE_ID); IHyperlink[] hyperlinks = detectHyperlinks(); assertEquals(1, hyperlinks.length); assertEquals(EXAMPLE_ID, hyperlinks[0].getHyperlinkText()); } @Test public void testMultiId() { setText(EXAMPLE_ID + " and " + OTHER_EXAMPLE_ID); IHyperlink[] hyperlinks = detectHyperlinks(); assertEquals(2, hyperlinks.length); assertEquals(EXAMPLE_ID, hyperlinks[0].getHyperlinkText()); assertEquals(OTHER_EXAMPLE_ID, hyperlinks[1].getHyperlinkText()); } @Test public void testEndLine() { setText("Merged as " + EXAMPLE_ID); IHyperlink[] hyperlinks = detectHyperlinks(); assertEquals(1, hyperlinks.length); assertEquals(EXAMPLE_ID, hyperlinks[0].getHyperlinkText()); } @Test public void testMiddleLine() { setText("Merged as " + EXAMPLE_ID + " and something else"); IHyperlink[] hyperlinks = detectHyperlinks(); assertEquals(1, hyperlinks.length); assertEquals(EXAMPLE_ID, hyperlinks[0].getHyperlinkText()); } @Test public void testBeginSentence() { setText("end of sentence." + EXAMPLE_ID); IHyperlink[] hyperlinks = detectHyperlinks(); assertEquals(1, hyperlinks.length); assertEquals(EXAMPLE_ID, hyperlinks[0].getHyperlinkText()); } @Test public void testEndSentence() { setText("Merged as " + EXAMPLE_ID + "."); IHyperlink[] hyperlinks = detectHyperlinks(); assertEquals(1, hyperlinks.length); assertEquals(EXAMPLE_ID, hyperlinks[0].getHyperlinkText()); } @Test public void testOffsetMiddle() { setText(EXAMPLE_ID); IHyperlink[] hyperlinks = detectHyperlinks(3,0); assertEquals(1, hyperlinks.length); assertEquals(EXAMPLE_ID, hyperlinks[0].getHyperlinkText()); } @Test public void testOffsetOff() { setText("some bla " + EXAMPLE_ID); IHyperlink[] hyperlinks = detectHyperlinks(3,0); assertNull(hyperlinks); } @Test public void testMultiLine() { setText("Test multi-line text\n" + EXAMPLE_ID); IHyperlink[] hyperlinks = detectHyperlinks(0,textViewer.getDocument().getLength()); assertEquals(1, hyperlinks.length); assertEquals(EXAMPLE_ID, hyperlinks[0].getHyperlinkText()); assertEquals(new Region(21, EXAMPLE_ID.length()), hyperlinks[0].getHyperlinkRegion()); } @Test public void testGerritId() { setText("I" + EXAMPLE_ID); IHyperlink[] hyperlinks = detectHyperlinks(0,textViewer.getDocument().getLength()); assertNull(hyperlinks); } @Test public void testGerritIdWithinText() { setText("abc I" + EXAMPLE_ID); IHyperlink[] hyperlinks = detectHyperlinks(5,textViewer.getDocument().getLength()); assertNull(hyperlinks); } private IHyperlink[] detectHyperlinks() { return detectHyperlinks(0, textViewer.getDocument().getLength()); } private IHyperlink[] detectHyperlinks(int offset, int length) { return detector.detectHyperlinks(textViewer, new Region(offset, length), false); } private void setText(String text) { textViewer.getDocument().set(text); } @Before public void setUp() throws Exception { detector = new CommitHyperlinkDetector(); Shell shell = new Shell(); textViewer = new TextViewer(shell, SWT.NONE); textViewer.setDocument(new Document()); } }