package jenkins.scm;
import static org.junit.Assert.*;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import hudson.model.FreeStyleProject;
import hudson.model.Item;
import org.junit.Rule;
import org.junit.Test;
import org.jvnet.hudson.test.JenkinsRule;
import org.jvnet.hudson.test.TestExtension;
import hudson.model.AbstractProject;
import org.kohsuke.stapler.DataBoundConstructor;
import hudson.model.AbstractBuild.AbstractBuildExecution;
import org.xml.sax.SAXException;
import java.io.IOException;
/**
* @author Kohsuke Kawaguchi
*/
public class SCMCheckoutStrategyTest {
@Rule
public JenkinsRule j = new JenkinsRule();
@Test
public void configRoundtrip1() throws Exception {
assertEquals(1,SCMCheckoutStrategyDescriptor.all().size());
FreeStyleProject p = j.createFreeStyleProject();
assertFalse(pageHasUI(p)); // no configuration UI because there's only one option
}
/**
* This should show the UI.
*/
@Test
public void configRoundtrip2() throws Exception {
assertEquals(2,SCMCheckoutStrategyDescriptor.all().size());
FreeStyleProject p = j.createFreeStyleProject();
System.out.println(SCMCheckoutStrategyDescriptor.all());
TestSCMCheckoutStrategy before = new TestSCMCheckoutStrategy();
p.setScmCheckoutStrategy(before);
j.configRoundtrip((Item)p);
SCMCheckoutStrategy after = p.getScmCheckoutStrategy();
assertNotSame(before,after);
assertSame(before.getClass(), after.getClass());
assertTrue(pageHasUI(p));
}
private boolean pageHasUI(FreeStyleProject p) throws IOException, SAXException {
HtmlPage page = j.createWebClient().getPage(p, "configure");
return page.getWebResponse().getContentAsString().contains("Advanced Source Code Management");
}
@SuppressWarnings("rawtypes")
public static class TestSCMCheckoutStrategy extends SCMCheckoutStrategy {
@DataBoundConstructor
public TestSCMCheckoutStrategy() {
}
@Override
public void checkout(AbstractBuildExecution execution) throws IOException, InterruptedException {
execution.getListener().getLogger().println("Hello!");
super.checkout(execution);
}
@TestExtension("configRoundtrip2")
public static class DescriptorImpl extends SCMCheckoutStrategyDescriptor {
@Override
public boolean isApplicable(AbstractProject project) {
return true;
}
}
}
}