package hudson.scm; import static org.junit.Assert.assertEquals; import hudson.Extension; import hudson.MarkupText; import hudson.model.AbstractBuild; import hudson.scm.ChangeLogSet.Entry; import org.junit.Rule; import org.junit.Test; import org.jvnet.hudson.test.FakeChangeLogSCM.EntryImpl; import org.jvnet.hudson.test.Issue; import org.jvnet.hudson.test.JenkinsRule; public class ChangeLogSetTest { @Rule public JenkinsRule j = new JenkinsRule(); @Test @Issue("JENKINS-17084") public void catchingExceptionDuringAnnotation() { EntryImpl change = new EntryImpl(); change.setParent(ChangeLogSet.createEmpty(null)); // otherwise test would actually test only NPE thrown when accessing paret.build boolean notCaught = false; try { change.getMsgAnnotated(); } catch (Throwable t) { notCaught = true; } assertEquals((new EntryImpl()).getMsg(), change.getMsg()); assertEquals(false, notCaught); } @Extension public static final class ThrowExceptionChangeLogAnnotator extends ChangeLogAnnotator { @Override public void annotate(AbstractBuild<?,?> build, Entry change, MarkupText text ) { throw new RuntimeException(); } } @Extension public static final class ThrowErrorChangeLogAnnotator extends ChangeLogAnnotator { @Override public void annotate(AbstractBuild<?,?> build, Entry change, MarkupText text ) { throw new Error(); } } }