Package hudson.scm

Source Code of hudson.scm.SubversionSCMUnitTest

package hudson.scm;

import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyMapOf;
import static org.mockito.Mockito.doCallRealMethod;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import hudson.EnvVars;
import hudson.FilePath;
import hudson.model.AbstractBuild;
import hudson.remoting.VirtualChannel;
import hudson.scm.SubversionSCM.ModuleLocation;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import org.junit.Assert;
import org.junit.Test;
import org.jvnet.hudson.test.Bug;

/**
* Unit tests for {@link SubversionSCM}.
*
* ({@link SubversionSCMTest} is more like an integration test)
*
* @author kutzi
*/
public class SubversionSCMUnitTest {
   
    @Test
    @Bug(12113)
    public void testLocalDirectoryIsExpandedWithEnvVars() {
        FilePath root = new FilePath((VirtualChannel)null, "root");
       
        EnvVars envVars = new EnvVars();
        envVars.put("BRANCH", "test");
       
        SubversionSCM scm = new SubversionSCM("dummyUrl");
       
        FilePath resolvedRoot = scm._getModuleRoot(root, "$BRANCH/someMorePath", envVars);

        // Be sure that paths is plateform independant.
        String fileSeparator = System.getProperty("file.separator");
        String expected = String.format("root%stest%ssomeMorePath", fileSeparator, fileSeparator);

        Assert.assertEquals(expected, resolvedRoot.getRemote());
    }
   
    @SuppressWarnings("deprecation")
    @Test
    public void shouldSetEnvironmentVariablesWithSingleSvnModule() throws IOException {
        // GIVEN an scm with a single module location
        SubversionSCM scm = mockSCMForBuildEnvVars();
       
        ModuleLocation[] singleLocation = new ModuleLocation[] {new ModuleLocation("/remotepath", "")};
        when(scm.getLocations(any(EnvVars.class), any(AbstractBuild.class))).thenReturn(singleLocation);
       
        Map<String, Long> revisions = new HashMap<String, Long>();
        revisions.put("/remotepath", 4711L);
        when(scm.parseSvnRevisionFile(any(AbstractBuild.class))).thenReturn(revisions);
       
        // WHEN envVars are build
        AbstractBuild<?,?> build = mock(AbstractBuild.class);
        Map<String, String> envVars = new HashMap<String, String>();
        scm.buildEnvVars(build, envVars);
       
        // THEN: we have the (legacy) SVN_URL and SVN_REVISION vars
        assertThat(envVars.get("SVN_URL"), is("/remotepath"));
        assertThat(envVars.get("SVN_REVISION"), is("4711"));
       
        // AND: also the index-based vars
        assertThat(envVars.get("SVN_URL_1"), is("/remotepath"));
        assertThat(envVars.get("SVN_REVISION_1"), is("4711"));
    }
   
    @SuppressWarnings("deprecation")
    @Test
    public void shouldSetEnvironmentVariablesWithMultipleSvnModules() throws IOException {
        // GIVEN an scm with a 2 module locations
        SubversionSCM scm = mockSCMForBuildEnvVars();
       
        ModuleLocation[] locations = new ModuleLocation[] {
                new ModuleLocation("/remotepath1", ""),
                new ModuleLocation("/remotepath2", "")};
        when(scm.getLocations(any(EnvVars.class), any(AbstractBuild.class))).thenReturn(locations);
       
        Map<String, Long> revisions = new HashMap<String, Long>();
        revisions.put("/remotepath1", 4711L);
        revisions.put("/remotepath2", 42L);
        when(scm.parseSvnRevisionFile(any(AbstractBuild.class))).thenReturn(revisions);
       
        // WHEN envVars are build
        AbstractBuild<?,?> build = mock(AbstractBuild.class);
        Map<String, String> envVars = new HashMap<String, String>();
        scm.buildEnvVars(build, envVars);
       
        // THEN: we have the SVN_URL_n and SVN_REVISION_n vars
        assertThat(envVars.get("SVN_URL_1"), is("/remotepath1"));
        assertThat(envVars.get("SVN_REVISION_1"), is("4711"));
       
        assertThat(envVars.get("SVN_URL_2"), is("/remotepath2"));
        assertThat(envVars.get("SVN_REVISION_2"), is("42"));
    }
   
    private SubversionSCM mockSCMForBuildEnvVars() {
        SubversionSCM scm = mock(SubversionSCM.class);
        doCallRealMethod().when(scm).buildEnvVars(any(AbstractBuild.class), anyMapOf(String.class, String.class));
        return scm;
    }
}
TOP

Related Classes of hudson.scm.SubversionSCMUnitTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.