view mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialModificationInfoBuilderTest.java @ 694:6e33b89c682b

do not sync repository (assume it was synced beforehand)
author eugene.petrenko@gmail.com
date Thu, 19 Dec 2013 19:22:16 +0100
parents dd11376b5f4a
children 5164285ece2b
line wrap: on
line source
package jetbrains.buildServer.buildTriggers.vcs.mercurial;

import jetbrains.buildServer.vcs.ChangesConsumer;
import jetbrains.buildServer.vcs.CheckoutRules;
import jetbrains.buildServer.vcs.VcsRoot;
import jetbrains.vcs.api.ChangeData;
import org.jetbrains.annotations.NotNull;
import org.testng.Assert;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import static jetbrains.buildServer.buildTriggers.vcs.mercurial.MercurialSupportBuilder.mercurialSupport;
import static jetbrains.buildServer.buildTriggers.vcs.mercurial.ServerPluginConfigBuilder.serverPluginConfig;
import static jetbrains.buildServer.buildTriggers.vcs.mercurial.VcsRootBuilder.vcsRoot;
import static org.testng.AssertJUnit.assertEquals;

@RequiredHgVersion(min = "1.7.0")
@Test(dataProviderClass = HgVersionConstraint.class, dataProvider = "installedHgVersion")
public class MercurialModificationInfoBuilderTest extends BaseMercurialTestCase {

  private File myRemoteRepository;
  private MercurialModificationInfoBuilder myModInfoBuilder;

  @BeforeMethod
  public void setUp() throws Exception {
    super.setUp();
    ServerPluginConfig config = serverPluginConfig()
            .cachesDir(myTempFiles.createTempDir())
            .hgPath(Util.getHgPath())
            .build();

    myRemoteRepository = myTempFiles.createTempDir();
    Util.copyRepository(new File("mercurial-tests/testData/rep2"), myRemoteRepository);
    MercurialSupportBuilder hgBuilder = mercurialSupport().withConfig(config);
    MercurialVcsSupport vcs = hgBuilder.build();
    myModInfoBuilder = new MercurialModificationInfoBuilder(vcs, hgBuilder.getHgRootFactory(), hgBuilder.getHgRepoFactory(), hgBuilder.getHgPathProvider());
  }


  public void should_return_commits_for_every_revision_in_state(HgVersion _) throws Exception {
    VcsRoot root = vcsRoot().withUrl(myRemoteRepository.getAbsolutePath()).build();
    final List<ChangeData> changes = new ArrayList<ChangeData>();
    myModInfoBuilder.fetchChangesInfo(root, CheckoutRules.DEFAULT, Arrays.asList("505c5b9d01e6", "9ec402c74298"), new ChangesConsumer() {
      public void consumeChange(@NotNull ChangeData change) {
        changes.add(change);
      }
    });

    for (ChangeData change : changes) {
      if (change.getVersion().equals("505c5b9d01e6")) {
        Assert.assertEquals(change.getParentRevisions(), Arrays.asList("78e67807f916"));
      } else if (change.getVersion().equals("9ec402c74298")) {
        Assert.assertEquals(change.getParentRevisions(), Arrays.asList("96b78d73081d"));
      } else {
        Assert.fail("Unexpected revision: " + change.getVersion());
      }
    }

    assertEquals(2, changes.size());
  }


  public void should_return_commits_for_every_revision_in_state_parent_child(HgVersion _) throws Exception {
    VcsRoot root = vcsRoot().withUrl(myRemoteRepository.getAbsolutePath()).build();
    final List<ChangeData> changes = new ArrayList<ChangeData>();
    myModInfoBuilder.fetchChangesInfo(root, CheckoutRules.DEFAULT, Arrays.asList("505c5b9d01e6", "9ec402c74298", "96b78d73081d"), new ChangesConsumer() {
      public void consumeChange(@NotNull ChangeData change) {
        changes.add(change);
      }
    });

    for (ChangeData change : changes) {
      if (change.getVersion().equals("505c5b9d01e6")) {
        Assert.assertEquals(change.getParentRevisions(), Arrays.asList("78e67807f916"));
      } else if (change.getVersion().equals("9ec402c74298")) {
        Assert.assertEquals(change.getParentRevisions(), Arrays.asList("96b78d73081d"));
      } else if (change.getVersion().equals("96b78d73081d")) {
        Assert.assertEquals(change.getParentRevisions(), Arrays.asList("dec47d2d49bf"));
      } else {
        Assert.fail("Unexpected revision: " + change.getVersion());
      }
    }

    assertEquals(3, changes.size());
  }

  public void should_return_commits_for_every_revision_in_state_parent_gap_child(HgVersion _) throws Exception {
    VcsRoot root = vcsRoot().withUrl(myRemoteRepository.getAbsolutePath()).build();
    final List<ChangeData> changes = new ArrayList<ChangeData>();
    myModInfoBuilder.fetchChangesInfo(root, CheckoutRules.DEFAULT, Arrays.asList("505c5b9d01e6", "9ec402c74298", "dec47d2d49bf"), new ChangesConsumer() {
      public void consumeChange(@NotNull ChangeData change) {
        changes.add(change);
      }
    });


    for (ChangeData change : changes) {
      if (change.getVersion().equals("505c5b9d01e6")) {
        Assert.assertEquals(change.getParentRevisions(), Arrays.asList("78e67807f916"));
      } else if (change.getVersion().equals("9ec402c74298")) {
        Assert.assertEquals(change.getParentRevisions(), Arrays.asList("96b78d73081d"));
      } else if (change.getVersion().equals("dec47d2d49bf")) {
        Assert.assertEquals(change.getParentRevisions(), Arrays.asList("1e620196c4b6"));
      } else {
        Assert.fail("Unexpected revision: " + change.getVersion());
      }
    }

    assertEquals(3, changes.size());
  }
}