Package org.eclipse.egit.ui.test.stagview

Source Code of org.eclipse.egit.ui.test.stagview.StagingViewTest

/*******************************************************************************
* Copyright (C) 2011, 2014 Jens Baumgart <jens.baumgart@sap.com> and others.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*******************************************************************************/
package org.eclipse.egit.ui.test.stagview;

import static org.hamcrest.CoreMatchers.startsWith;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;

import java.io.File;

import org.eclipse.egit.core.JobFamilies;
import org.eclipse.egit.ui.Activator;
import org.eclipse.egit.ui.common.LocalRepositoryTestCase;
import org.eclipse.egit.ui.common.StagingViewTester;
import org.eclipse.egit.ui.internal.repository.RepositoriesView;
import org.eclipse.egit.ui.test.CommitMessageUtil;
import org.eclipse.egit.ui.test.TestUtil;
import org.eclipse.egit.ui.view.repositories.GitRepositoriesViewTestUtils;
import org.eclipse.jgit.api.Git;
import org.eclipse.jgit.lib.ObjectId;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.lib.RepositoryState;
import org.eclipse.jgit.revwalk.RevCommit;
import org.eclipse.swtbot.eclipse.finder.widgets.SWTBotView;
import org.eclipse.swtbot.swt.finder.widgets.SWTBotTree;
import org.eclipse.swtbot.swt.finder.widgets.SWTBotTreeItem;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

public class StagingViewTest extends LocalRepositoryTestCase {

  private static final GitRepositoriesViewTestUtils repoViewUtil = new GitRepositoriesViewTestUtils();

  private File repositoryFile;

  private Repository repository;

  @Before
  public void before() throws Exception {
    repositoryFile = createProjectAndCommitToRepository();
    repository = lookupRepository(repositoryFile);
    TestUtil.configureTestCommitterAsUser(repository);
    Activator.getDefault().getRepositoryUtil()
        .addConfiguredRepository(repositoryFile);

    selectRepositoryNode();
  }

  @After
  public void after() {
    Activator.getDefault().getRepositoryUtil().removeDir(repositoryFile);
  }

  @Test
  public void testCommitSingleFile() throws Exception {
    setContent("I have changed this");

    StagingViewTester stagingViewTester = StagingViewTester
        .openStagingView();

    stagingViewTester.stageFile(FILE1_PATH);

    stagingViewTester.setAuthor(TestUtil.TESTAUTHOR);
    stagingViewTester.setCommitter(TestUtil.TESTCOMMITTER);
    stagingViewTester.setCommitMessage("The new commit");
    stagingViewTester.commit();
    TestUtil.checkHeadCommit(repository, TestUtil.TESTAUTHOR,
        TestUtil.TESTCOMMITTER, "The new commit");
  }

  @Test
  public void testAmend() throws Exception {
    RevCommit oldHeadCommit = TestUtil.getHeadCommit(repository);
    commitOneFileChange("Yet another Change");
    RevCommit headCommit = TestUtil.getHeadCommit(repository);
    ObjectId headCommitId = headCommit.getId();
    String changeId = CommitMessageUtil.extractChangeId(headCommit
        .getFullMessage());
    setContent("Changes over changes");
    StagingViewTester stagingViewTester = StagingViewTester
        .openStagingView();
    stagingViewTester.stageFile(FILE1_PATH);
    stagingViewTester.setAmend(true);
    assertTrue(stagingViewTester.getCommitMessage().indexOf("Change-Id") > 0);
    assertTrue(stagingViewTester.getCommitMessage()
        .indexOf("Signed-off-by") > 0);
    assertTrue(stagingViewTester.getSignedOff());
    assertTrue(stagingViewTester.getInsertChangeId());
    stagingViewTester.commit();
    headCommit = TestUtil.getHeadCommit(repository);
    if (headCommitId.equals(headCommit.getId()))
      fail("There is no new commit");
    assertEquals(oldHeadCommit, headCommit.getParent(0));
    assertTrue(headCommit.getFullMessage().indexOf(changeId) > 0);
  }

  @Test
  public void testMergeConflict() throws Exception {
    Git git = new Git(repository);
    git.checkout().setCreateBranch(true).setName("side").call();
    commitOneFileChange("on side");

    git.checkout().setName("master").call();
    commitOneFileChange("on master");

    git.merge().include(repository.getRef("side")).call();
    assertEquals(RepositoryState.MERGING, repository.getRepositoryState());

    StagingViewTester stagingView = StagingViewTester
        .openStagingView();
    assertEquals("", stagingView.getCommitMessage());
    stagingView.assertCommitEnabled(false);

    setContent("resolved");
    stagingView.stageFile(FILE1_PATH);
    assertEquals(RepositoryState.MERGING_RESOLVED,
        repository.getRepositoryState());
    String expectedMessage = "Merge branch 'side'";
    assertThat(stagingView.getCommitMessage(), startsWith(expectedMessage));

    stagingView.commit();
    assertEquals(RepositoryState.SAFE, repository.getRepositoryState());

    assertEquals(expectedMessage, TestUtil.getHeadCommit(repository)
        .getShortMessage());
  }

  private void commitOneFileChange(String fileContent) throws Exception {
    setContent(fileContent);

    StagingViewTester stagingViewTester = StagingViewTester
        .openStagingView();
    stagingViewTester.stageFile(FILE1_PATH);
    stagingViewTester.setAuthor(TestUtil.TESTAUTHOR);
    stagingViewTester.setCommitter(TestUtil.TESTCOMMITTER);
    stagingViewTester.setCommitMessage("Commit message");
    stagingViewTester.setInsertChangeId(true);
    stagingViewTester.setSignedOff(true);
    String commitMessage = stagingViewTester.getCommitMessage();
    assertTrue(commitMessage.indexOf("Change-Id") > 0);
    assertTrue(commitMessage.indexOf("Signed-off-by") > 0);
    stagingViewTester.commit();
  }

  private void setContent(String content) throws Exception {
    setTestFileContent(content);
    TestUtil.joinJobs(JobFamilies.INDEX_DIFF_CACHE_UPDATE);
  }

  private void selectRepositoryNode() throws Exception {
    SWTBotView repositoriesView = TestUtil
        .showView(RepositoriesView.VIEW_ID);
    SWTBotTree tree = repositoriesView.bot().tree();

    SWTBotTreeItem repoNode = repoViewUtil
        .getRootItem(tree, repositoryFile);
    repoNode.select();
  }
}
TOP

Related Classes of org.eclipse.egit.ui.test.stagview.StagingViewTest

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.