Package org.tmatesoft.hg.test

Source Code of org.tmatesoft.hg.test.TestSubrepo

/*
* Copyright (c) 2012 TMate Software Ltd
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; version 2 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
*
* For information on how to redistribute this software under
* the terms of a license other than GNU General Public License
* contact TMate Software at support@hg4j.com
*/
package org.tmatesoft.hg.test;

import static org.junit.Assert.assertEquals;
import static org.tmatesoft.hg.repo.HgRepository.TIP;

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

import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test;
import org.tmatesoft.hg.core.HgStatusCommand;
import org.tmatesoft.hg.repo.HgRepository;
import org.tmatesoft.hg.repo.HgSubrepoLocation;
import org.tmatesoft.hg.repo.HgSubrepoLocation.Kind;
import org.tmatesoft.hg.util.Path;

/**
*
* @author Artem Tikhomirov
* @author TMate Software Ltd.
*/
public class TestSubrepo {

  @Rule
  public ErrorCollectorExt errorCollector = new ErrorCollectorExt();

  private HgRepository repo;
  private StatusOutputParser statusParser;
  private ExecHelper eh;
 
  /*
   * Layout of status-subrepo:
   * first/          regular subrepo
   * dir/second/        subrepo nested under a tracked folder
   * third/          subrepo with another one
   * third/fourth        2nd level of subrepo nesting (registered in third/.hgsub)
   * third/fourth/file4_1    A, added file
   * third/fourth/file4_2    ?, untracked file
   * fifth/          nested repository not yet registered in .hgsub
   * fifth/file5        untracked file
   *
   * Curiously, fifth/ shall not be reported (neither 'hg status -AS' nor '-A' don't report
   * anything for it, no '?' for the file5 in particular. Once fifth/.hg/ is removed,
   * file5 gets its ? as one would expect)
   */

  @Test
  public void testAccessAPI() throws Exception {
    repo = Configuration.get().find("status-subrepo");
    List<HgSubrepoLocation> subrepositories = repo.getSubrepositories();
    assertEquals(3, subrepositories.size());
    checkHgSubrepo(Path.create("first/"), true, repo, subrepositories.get(0));
    checkHgSubrepo(Path.create("dir/second/"), true, repo, subrepositories.get(1));
    checkHgSubrepo(Path.create("third/"), false, repo, subrepositories.get(2));
  }
 
  private void checkHgSubrepo(Path expectedLocation, boolean isCommitted, HgRepository topRepo, HgSubrepoLocation l) throws Exception {
    errorCollector.assertEquals(expectedLocation, l.getLocation());
    errorCollector.assertEquals(Kind.Hg, l.getType());
    if (isCommitted) {
      errorCollector.assertTrue(l.isCommitted());
      errorCollector.assertTrue(l.getRevision() != null);
      errorCollector.assertTrue(!l.getRevision().isNull());
    } else {
      errorCollector.assertTrue(!l.isCommitted());
      errorCollector.assertTrue(l.getRevision() == null);
    }
    errorCollector.assertEquals(topRepo, l.getOwner());
    HgRepository r = l.getRepo();
    String expectedSubRepoLoc = new File(topRepo.getLocation(), expectedLocation.toString()).toString();
    errorCollector.assertEquals(expectedSubRepoLoc, r.getLocation());
    errorCollector.assertTrue(r.getChangelog().getRevisionCount() > 0);
    if (isCommitted) {
      errorCollector.assertEquals(r.getChangelog().getRevision(TIP), l.getRevision());
    }
  }

  @Test
  @Ignore("StatusCommand doesn't suport subrepositories yet")
  public void testStatusCommand() throws Exception {
    repo = Configuration.get().find("status-subrepo");
    statusParser = new StatusOutputParser();
    eh = new ExecHelper(statusParser, repo.getWorkingDir());
    TestStatus.StatusReporter sr = new TestStatus.StatusReporter(errorCollector, statusParser);
    HgStatusCommand cmd = new HgStatusCommand(repo).all();
    TestStatus.StatusCollector sc;

    eh.run("hg", "status", "-A", "-S");
    cmd.subrepo(true);
    cmd.execute(sc = new TestStatus.StatusCollector());
    sr.report("status -A -S", sc);
   
    eh.run("hg", "status", "-A", "-S");
    cmd.subrepo(false);
    cmd.execute(sc = new TestStatus.StatusCollector());
    sr.report("status -A", sc);
   
  }
 
}
TOP

Related Classes of org.tmatesoft.hg.test.TestSubrepo

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.