Skip to main content
aboutsummaryrefslogblamecommitdiffstats
blob: b2e454a5e7abcb4e1f5ebbf5a1388e270667e05d (plain) (tree)
1
2
3
4
5
6
7
8
9








                                                                                 

                                                                
                                           
                                          

                                           


                                                          
                                                  
                                            


                                                                   
                                                            

















                                                                     

                                                                 














                                                                                        
                                                                       
                                                                                        



                                                                            














                                                                                            















                                                                                            



























                                                                                            
                                                

                                                                       
                                                                  






                                                                                            
                                                     

                                                                       
                                                                   
















                                                                                            
                                                

                                                                       

                                                                  




                                                                                   
                                                     

                                                                       

                                                                   

         























                                                                                                               
                                  










                                                                                               
                                  







                                                                                                    
 
/*******************************************************************************
 * Copyright (c) 2016 Thomas Wolf <thomas.wolf@paranor.ch>
 * 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.eclipse.egit.ui.JobFamilies.ADD_TO_INDEX;
import static org.eclipse.egit.ui.JobFamilies.REMOVE_FROM_INDEX;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.egit.core.JobFamilies;
import org.eclipse.egit.ui.common.LocalRepositoryTestCase;
import org.eclipse.egit.ui.test.ContextMenuHelper;
import org.eclipse.egit.ui.test.StagingUtil;
import org.eclipse.egit.ui.test.TestUtil;
import org.eclipse.swtbot.swt.finder.junit.SWTBotJunit4ClassRunner;
import org.eclipse.swtbot.swt.finder.widgets.SWTBotTree;
import org.eclipse.swtbot.swt.finder.widgets.SWTBotTreeItem;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;

/**
 * Tests for the Team->Add To Index/Remove From Index actions.
 */
@RunWith(SWTBotJunit4ClassRunner.class)
public class StageUnstageActionTest extends LocalRepositoryTestCase {

	private static final String REPO_A = "repoA";

	private static final String REPO_B = "repoB";

	private static final String PROJ_A = "FirstProject";

	private static final String PROJ_B = "SecondProject";

	private static final String UNSHARED = "UnsharedProject";

	private String addToIndexLabel;

	private String removeFromIndexLabel;

	@Before
	public void setup() throws Exception {
		createProjectAndCommitToRepository(REPO_A, PROJ_A);
		createProjectAndCommitToRepository(REPO_B, PROJ_B);
		addToIndexLabel = util
				.getPluginLocalizedValue("AddToIndexAction_label");
		removeFromIndexLabel = util
				.getPluginLocalizedValue("RemoveFromIndexAction_label");
	}

	@Test
	public void testActionsInitiallyNotPresent() throws Exception {
		// Verify that neither add to index nor remove from index are available.
		IProject unshared = ResourcesPlugin.getWorkspace().getRoot()
				.getProject(UNSHARED);
		unshared.create(null);
		unshared.open(null);
		SWTBotTree projectExplorerTree = TestUtil.getExplorerTree();
		util.getProjectItems(projectExplorerTree, PROJ_A)[0].select();
		assertFalse("Add To Index should not be present",
				ContextMenuHelper.contextMenuItemExists(projectExplorerTree,
						"Team", addToIndexLabel));
		assertFalse("Remove From Index should not be present",
				ContextMenuHelper.contextMenuItemExists(projectExplorerTree,
						"Team", removeFromIndexLabel));
		util.getProjectItems(projectExplorerTree, PROJ_B)[0].select();
		assertFalse("Add To Index should not be present",
				ContextMenuHelper.contextMenuItemExists(projectExplorerTree,
						"Team", addToIndexLabel));
		assertFalse("Remove From Index should not be present",
				ContextMenuHelper.contextMenuItemExists(projectExplorerTree,
						"Team", removeFromIndexLabel));
		util.getProjectItems(projectExplorerTree, UNSHARED)[0].select();
		assertFalse("Add To Index should not be present",
				ContextMenuHelper.contextMenuItemExists(projectExplorerTree,
						"Team", addToIndexLabel));
		assertFalse("Remove From Index should not be present",
				ContextMenuHelper.contextMenuItemExists(projectExplorerTree,
						"Team", removeFromIndexLabel));
		projectExplorerTree.select(projectExplorerTree.getAllItems());
		assertFalse("Add To Index should not be present",
				ContextMenuHelper.contextMenuItemExists(projectExplorerTree,
						"Team", addToIndexLabel));
		assertFalse("Remove From Index should not be present",
				ContextMenuHelper.contextMenuItemExists(projectExplorerTree,
						"Team", removeFromIndexLabel));
		// And again, with only the two shared projects
		unshared.delete(true, null);
		projectExplorerTree.select(projectExplorerTree.getAllItems());
		assertFalse("Add To Index should not be present",
				ContextMenuHelper.contextMenuItemExists(projectExplorerTree,
						"Team", addToIndexLabel));
		assertFalse("Remove From Index should not be present",
				ContextMenuHelper.contextMenuItemExists(projectExplorerTree,
						"Team", removeFromIndexLabel));
	}

	@Test
	public void testSingleProject() throws Exception {
		// Change something in first project
		String filePath = FOLDER + '/' + FILE1;
		touch(PROJ_A, filePath, "Changed content");
		// Select other project
		SWTBotTree projectExplorerTree = TestUtil.getExplorerTree();
		util.getProjectItems(projectExplorerTree, PROJ_B)[0].select();
		// Verify that Add to index is not present
		assertFalse("Add To Index should not be present",
				ContextMenuHelper.contextMenuItemExists(projectExplorerTree,
						"Team", addToIndexLabel));
		assertFalse("Remove From Index should not be present",
				ContextMenuHelper.contextMenuItemExists(projectExplorerTree,
						"Team", removeFromIndexLabel));
		// Select first project; add to index
		util.getProjectItems(projectExplorerTree, PROJ_A)[0].select();
		ContextMenuHelper.clickContextMenuSync(projectExplorerTree, "Team",
				addToIndexLabel);
		TestUtil.joinJobs(ADD_TO_INDEX);
		TestUtil.joinJobs(JobFamilies.INDEX_DIFF_CACHE_UPDATE);
		// Verify file got staged
		StagingUtil.assertStaging(PROJ_A, filePath, true);
		// Remove from index
		util.getProjectItems(projectExplorerTree, PROJ_A)[0].select();
		assertFalse("Add To Index should not be present",
				ContextMenuHelper.contextMenuItemExists(projectExplorerTree,
						"Team", addToIndexLabel));
		ContextMenuHelper.clickContextMenuSync(projectExplorerTree, "Team",
				removeFromIndexLabel);
		TestUtil.joinJobs(REMOVE_FROM_INDEX);
		TestUtil.joinJobs(JobFamilies.INDEX_DIFF_CACHE_UPDATE);
		// Verify file is unstaged again
		StagingUtil.assertStaging(PROJ_A, filePath, false);
	}

	@Test
	public void testBothProjects() throws Exception {
		// Change something in both
		String filePath = FOLDER + '/' + FILE1;
		touch(PROJ_A, filePath, "Changed content");
		touch(PROJ_B, filePath, "Changed content");
		// Select both projects
		SWTBotTree projectExplorerTree = TestUtil.getExplorerTree();
		projectExplorerTree.select(projectExplorerTree.getAllItems());
		assertFalse("Remove From Index should not be present",
				ContextMenuHelper.contextMenuItemExists(projectExplorerTree,
						"Team", removeFromIndexLabel));
		// Add to index
		ContextMenuHelper.clickContextMenuSync(projectExplorerTree, "Team",
				addToIndexLabel);
		TestUtil.joinJobs(ADD_TO_INDEX);
		TestUtil.joinJobs(JobFamilies.INDEX_DIFF_CACHE_UPDATE);
		// Verify both files got staged
		StagingUtil.assertStaging(PROJ_A, filePath, true);
		StagingUtil.assertStaging(PROJ_B, filePath, true);
		// Select both projects
		projectExplorerTree.select(projectExplorerTree.getAllItems());
		// Remove from index
		ContextMenuHelper.clickContextMenuSync(projectExplorerTree, "Team",
				removeFromIndexLabel);
		TestUtil.joinJobs(REMOVE_FROM_INDEX);
		TestUtil.joinJobs(JobFamilies.INDEX_DIFF_CACHE_UPDATE);
		// Verify both files got unstaged
		StagingUtil.assertStaging(PROJ_A, filePath, false);
		StagingUtil.assertStaging(PROJ_B, filePath, false);
	}

	@Test
	public void testCompareIndexWithHeadEnablement() throws Exception {
		String compareIndexWithHead = util.getPluginLocalizedValue("CompareIndexWithHeadAction_label");
		// Change something in first project
		String filePath = FOLDER + '/' + FILE1;
		touch(PROJ_A, filePath, "Changed content");
		// Add it to the index
		SWTBotTree projectExplorerTree = TestUtil.getExplorerTree();
		SWTBotTreeItem fileItem = TestUtil.navigateTo(projectExplorerTree,
				PROJ_A, FOLDER, FILE1);
		fileItem.select();
		// Verify the menu entry
		assertTrue("Compare With->Index with HEAD should be disabled or absent",
				!ContextMenuHelper.contextMenuItemExists(projectExplorerTree,
						"Compare With", compareIndexWithHead)
						|| !ContextMenuHelper.isContextMenuItemEnabled(
								projectExplorerTree, "Compare With",
								compareIndexWithHead));
		ContextMenuHelper.clickContextMenuSync(projectExplorerTree, "Team",
				addToIndexLabel);
		TestUtil.joinJobs(ADD_TO_INDEX);
		TestUtil.joinJobs(JobFamilies.INDEX_DIFF_CACHE_UPDATE);
		// Verify file got staged
		StagingUtil.assertStaging(PROJ_A, filePath, true);
		fileItem.select();
		assertTrue("Compare With->Index with HEAD should be enabled",
				ContextMenuHelper.isContextMenuItemEnabled(projectExplorerTree,
						"Compare With", compareIndexWithHead));
		// Remove from index
		ContextMenuHelper.clickContextMenuSync(projectExplorerTree, "Team",
				removeFromIndexLabel);
		TestUtil.joinJobs(REMOVE_FROM_INDEX);
		TestUtil.joinJobs(JobFamilies.INDEX_DIFF_CACHE_UPDATE);
		// Verify file is unstaged again
		StagingUtil.assertStaging(PROJ_A, filePath, false);
		// Verify the menu entry again
		fileItem.select();
		assertTrue(
				"Compare With->Index with HEAD should be disabled or absent again",
				!ContextMenuHelper.contextMenuItemExists(projectExplorerTree,
						"Compare With", compareIndexWithHead)
						|| !ContextMenuHelper.isContextMenuItemEnabled(
								projectExplorerTree, "Compare With",
								compareIndexWithHead));
	}
}

Back to the top