package hudson.plugins.mercurial;
import hudson.FilePath;
import hudson.Launcher;
import hudson.model.Action;
import hudson.model.Cause.UserCause;
import hudson.model.FreeStyleBuild;
import hudson.model.FreeStyleProject;
import hudson.model.Hudson;
import hudson.model.TaskListener;
import hudson.util.StreamTaskListener;
import java.io.File;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
import org.jvnet.hudson.test.HudsonTestCase;
public abstract class MercurialTestCase extends HudsonTestCase {
private TaskListener listener;
private Launcher launcher;
protected @Override void setUp() throws Exception {
super.setUp();
listener = new StreamTaskListener(System.out, Charset.defaultCharset());
launcher = Hudson.getInstance().createLauncher(listener);
}
protected final void hg(File repo, String... args) throws Exception {
List<String> cmds = new ArrayList<String>();
cmds.add("hg");
cmds.add("--config");
cmds.add("ui.username=nobody@nowhere.net");
cmds.addAll(Arrays.asList(args));
assertEquals(0, MercurialSCM.launch(launcher).cmds(cmds).pwd(repo).stdout(listener).join());
}
protected void touchAndCommit(File repo, String... names) throws Exception {
for (String name : names) {
FilePath toCreate = new FilePath(repo).child(name);
toCreate.getParent().mkdirs();
toCreate.touch(0);
hg(repo, "add", name);
}
hg(repo, "commit", "--message", "added " + Arrays.toString(names));
}
protected String buildAndCheck(FreeStyleProject p, String name, Action... actions) throws Exception {
FreeStyleBuild b = assertBuildStatusSuccess(p.scheduleBuild2(0, new UserCause(), actions).get());
// for (String line : b.getLog(Integer.MAX_VALUE)) {
// System.err.println(">> " + line);
// }
if (!b.getWorkspace().child(name).exists()) {
Set<String> children = new TreeSet<String>();
for (FilePath child : b.getWorkspace().list()) {
children.add(child.getName());
}
fail("Could not find " + name + " among " + children);
}
assertNotNull(b.getAction(MercurialTagAction.class));
@SuppressWarnings("deprecation")
String log = b.getLog();
return log;
}
protected boolean pollSCMChanges(FreeStyleProject p) {
return p.poll(new StreamTaskListener(System.out, Charset.defaultCharset())).hasChanges();
}
}