view mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/ListFilesSupportTest.java @ 893:1558f8257474

gather progress only if command reports it
author Dmitry Neverov <dmitry.neverov@jetbrains.com>
date Fri, 07 Nov 2014 16:05:09 +0100
parents 31a1aca3305c
children 7bf4d943d5bb
line wrap: on
line source
/*
 * Copyright 2000-2014 JetBrains s.r.o.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package jetbrains.buildServer.buildTriggers.vcs.mercurial;

import jetbrains.buildServer.util.TestFor;
import jetbrains.buildServer.vcs.ListDirectChildrenPolicy;
import jetbrains.buildServer.vcs.VcsException;
import jetbrains.buildServer.vcs.VcsFileData;
import jetbrains.buildServer.vcs.VcsRoot;
import org.jetbrains.annotations.NotNull;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

import java.io.File;
import java.io.IOException;
import java.util.Collection;

import static jetbrains.buildServer.buildTriggers.vcs.mercurial.MercurialSupportBuilder.mercurialSupport;
import static jetbrains.buildServer.buildTriggers.vcs.mercurial.Util.copyRepository;
import static jetbrains.buildServer.buildTriggers.vcs.mercurial.VcsRootBuilder.vcsRoot;
import static org.testng.AssertJUnit.assertFalse;
import static org.testng.AssertJUnit.assertNotNull;
import static org.testng.AssertJUnit.assertTrue;

/**
 * @author dmitry.neverov
 */
@Test
public class ListFilesSupportTest extends BaseMercurialTestCase {

  private MercurialVcsSupport myVcs;
  private VcsRoot myRoot;
  private File myRemoteRepoDir;

  @BeforeMethod
  public void setUp() throws Exception {
    super.setUp();
    ServerPluginConfig myPluginConfig = new ServerPluginConfigBuilder()
            .cachesDir(myTempFiles.createTempDir())
            .build();
    myVcs = mercurialSupport().withConfig(myPluginConfig).build();

    myRemoteRepoDir = myTempFiles.createTempDir();
    copyRepository(new File("mercurial-tests/testData/rep1"), myRemoteRepoDir);
    myRoot = vcsRoot().withUrl(myRemoteRepoDir.getAbsolutePath()).build();
  }


  public void should_support_list_files() throws Exception {
    assertNotNull(myVcs.getListFilesPolicy());
  }


  public void list_root_dir() throws Exception {
    ListDirectChildrenPolicy policy = getListFilesPolicy();
    Collection<VcsFileData> files = policy.listFiles(myRoot, "");
    assertTrue(files.contains(dir("dir1")));
    assertTrue(files.contains(dir("dir with space")));
    assertTrue(files.contains(file("file.txt")));
  }


  public void list_subdir() throws Exception {
    ListDirectChildrenPolicy policy = getListFilesPolicy();
    Collection<VcsFileData> files = policy.listFiles(myRoot, "dir1");
    assertTrue(files.contains(file("file1.txt")));
    assertTrue(files.contains(file("file3.txt")));
    assertTrue(files.contains(dir("subdir")));

    files = policy.listFiles(myRoot, "dir1/subdir/");
    assertTrue(files.contains(file("file2.txt")));
  }


  @TestFor(issues = "TW-23435")
  public void should_take_branch_into_account() throws VcsException, IOException {
    ListDirectChildrenPolicy policy = getListFilesPolicy();
    VcsRoot differentBranchRoot = vcsRoot().withUrl(myRemoteRepoDir.getAbsolutePath()).withBranch("test_branch").build();
    Collection<VcsFileData> files1 = policy.listFiles(myRoot, "");
    Collection<VcsFileData> files2 = policy.listFiles(differentBranchRoot, "");
    assertFalse("List files doesn't take branch into account", files1.equals(files2));
  }


  @NotNull
  private ListDirectChildrenPolicy getListFilesPolicy() {
    ListDirectChildrenPolicy listFilesPolicy = (ListDirectChildrenPolicy) myVcs.getListFilesPolicy();
    assert listFilesPolicy != null;
    return listFilesPolicy;
  }

  private VcsFileData dir(@NotNull String path) {
    return new VcsFileData(path, true);
  }

  private VcsFileData file(@NotNull String path) {
    return new VcsFileData(path, false);
  }

}