提交 765231cc 编写于 作者: K kohsuke

added a test to make sure console annotation works as expected in the polling log.

git-svn-id: https://hudson.dev.java.net/svn/hudson/trunk/hudson/main@28437 71c3de6d-444a-0410-be80-ed276b4c234a
上级 3b480cfb
......@@ -1221,6 +1221,7 @@ public abstract class AbstractProject<P extends AbstractProject<P,R>,R extends A
// add
collection.add(item);
save();
updateTransientActions();
}
protected final synchronized <T extends Describable<T>>
......@@ -1230,6 +1231,7 @@ public abstract class AbstractProject<P extends AbstractProject<P,R>,R extends A
// found it
collection.remove(i);
save();
updateTransientActions();
return;
}
}
......
......@@ -73,4 +73,9 @@ public class SingleFileSCM extends NullSCM {
os.close();
return true;
}
/**
* Don't write 'this', so that subtypes can be implemented as anonymous clas.
*/
private Object writeReplace() { return new Object(); }
}
......@@ -3,20 +3,31 @@ package hudson.console;
import com.gargoylesoftware.htmlunit.Page;
import com.gargoylesoftware.htmlunit.WebRequestSettings;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import hudson.FilePath;
import hudson.Launcher;
import hudson.MarkupText;
import hudson.model.AbstractBuild;
import hudson.model.AbstractProject;
import hudson.model.BuildListener;
import hudson.model.FreeStyleBuild;
import hudson.model.FreeStyleProject;
import hudson.model.Run;
import hudson.model.TaskListener;
import hudson.scm.PollingResult;
import hudson.scm.PollingResult.Change;
import hudson.scm.RepositoryBrowser;
import hudson.scm.SCMDescriptor;
import hudson.scm.SCMRevisionState;
import hudson.triggers.SCMTrigger;
import org.jvnet.hudson.test.Bug;
import org.jvnet.hudson.test.HudsonTestCase;
import org.jvnet.hudson.test.SequenceLock;
import org.jvnet.hudson.test.SingleFileSCM;
import org.jvnet.hudson.test.TestBuilder;
import org.jvnet.hudson.test.TestExtension;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
......@@ -216,8 +227,8 @@ public class ConsoleAnnotatorTest extends HudsonTestCase {
/**
* Places a triple dollar mark at the specified position.
*/
public static final class DollarMark extends ConsoleNote<Run> {
public ConsoleAnnotator annotate(Run build, MarkupText text, int charPos) {
public static final class DollarMark extends ConsoleNote<Object> {
public ConsoleAnnotator annotate(Object context, MarkupText text, int charPos) {
text.addMarkup(charPos,"$$$");
return null;
}
......@@ -286,4 +297,50 @@ public class ConsoleAnnotatorTest extends HudsonTestCase {
assertTrue(text.contains("<b>&amp;</b>"));
assertTrue(b.getLog().contains("<b>&amp;</b>"));
}
/**
* Makes sure that annotations in the polling output is handled correctly.
*/
public void testPollingOutput() throws Exception {
FreeStyleProject p = createFreeStyleProject();
p.setScm(new PollingSCM());
SCMTrigger t = new SCMTrigger("@daily");
t.start(p,true);
p.addTrigger(t);
buildAndAssertSuccess(p);
// poll now
t.new Runner().run();
HtmlPage log = createWebClient().getPage(p, "scmPollLog");
String text = log.asText();
assertTrue(text, text.contains("$$$hello from polling"));
}
public static class PollingSCM extends SingleFileSCM {
public PollingSCM() throws UnsupportedEncodingException {
super("abc", "def");
}
@Override
protected PollingResult compareRemoteRevisionWith(AbstractProject project, Launcher launcher, FilePath workspace, TaskListener listener, SCMRevisionState baseline) throws IOException, InterruptedException {
listener.annotate(new DollarMark());
listener.getLogger().println("hello from polling");
return new PollingResult(Change.NONE);
}
@TestExtension
public static final class DescriptorImpl extends SCMDescriptor<PollingSCM> {
public DescriptorImpl() {
super(PollingSCM.class, RepositoryBrowser.class);
}
@Override
public String getDisplayName() {
return "Test SCM";
}
}
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册