/******************************************************************************* * Copyright (C) 2012, 2013 Robin Stocker <robin@nibor.org> * * 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.team.actions; import static org.hamcrest.Matchers.hasItem; import static org.hamcrest.Matchers.is; import static org.junit.Assert.assertThat; import java.io.File; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; import org.eclipse.egit.core.Activator; import org.eclipse.egit.core.JobFamilies; import org.eclipse.egit.core.internal.indexdiff.IndexDiffCache; import org.eclipse.egit.core.op.MergeOperation; import org.eclipse.egit.ui.common.CompareEditorTester; import org.eclipse.egit.ui.common.LocalRepositoryTestCase; import org.eclipse.egit.ui.test.ContextMenuHelper; import org.eclipse.egit.ui.test.TestUtil; import org.eclipse.jgit.api.MergeResult; import org.eclipse.jgit.api.MergeResult.MergeStatus; import org.eclipse.jgit.junit.TestRepository; import org.eclipse.jgit.lib.Repository; import org.eclipse.swtbot.swt.finder.widgets.SWTBotTree; import org.eclipse.swtbot.swt.finder.widgets.SWTBotTreeItem; import org.junit.Before; import org.junit.Test; /** * Test for the "Merge Tool" action on conflicting files. */ public class MergeToolTest extends LocalRepositoryTestCase { private TestRepository testRepository; @Before public void setUp() throws Exception { File repositoryFile = createProjectAndCommitToRepository(); Repository repository = lookupRepository(repositoryFile); testRepository = new TestRepository<Repository>(repository); } @Test public void useHeadOptionShouldCauseFileToNotHaveConflictMarkers() throws Exception { IPath path = new Path(PROJ1).append("folder/test.txt"); testRepository.branch("stable").commit().add(path.toString(), "stable") .create(); touchAndSubmit("master", "master"); MergeOperation mergeOp = new MergeOperation( testRepository.getRepository(), "stable"); mergeOp.execute(null); MergeResult mergeResult = mergeOp.getResult(); assertThat(mergeResult.getMergeStatus(), is(MergeStatus.CONFLICTING)); assertThat(mergeResult.getConflicts().keySet(), hasItem(path.toString())); IndexDiffCache cache = Activator.getDefault().getIndexDiffCache(); cache.getIndexDiffCacheEntry(testRepository.getRepository()); TestUtil.joinJobs(JobFamilies.INDEX_DIFF_CACHE_UPDATE); SWTBotTree packageExplorer = TestUtil.getExplorerTree(); SWTBotTreeItem project1 = getProjectItem(packageExplorer, PROJ1) .select(); SWTBotTreeItem folderNode = TestUtil.expandAndWait(project1) .getNode(FOLDER); SWTBotTreeItem fileNode = TestUtil.expandAndWait(folderNode) .getNode(FILE1); fileNode.select(); ContextMenuHelper.clickContextMenu(packageExplorer, util.getPluginLocalizedValue("TeamMenu.label"), util.getPluginLocalizedValue("MergeToolAction.label")); CompareEditorTester compareEditor = CompareEditorTester .forTitleContaining("Merging"); String text = compareEditor.getLeftEditor().getText(); assertThat(text, is("master")); } }