Package org.eclipse.egit.ui.variables

Source Code of org.eclipse.egit.ui.variables.DynamicVariablesTest

/*******************************************************************************
* Copyright (C) 2009, Robin Rosenberg
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* See LICENSE for the full license text, also available.
*******************************************************************************/
package org.eclipse.egit.ui.variables;

import static org.junit.Assert.assertEquals;

import java.io.File;
import java.util.Collections;

import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IProjectDescription;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.variables.IDynamicVariable;
import org.eclipse.core.variables.VariablesPlugin;
import org.eclipse.egit.core.GitProvider;
import org.eclipse.egit.core.project.GitProjectData;
import org.eclipse.egit.core.project.RepositoryMapping;
import org.eclipse.egit.ui.common.EGitTestCase;
import org.eclipse.egit.ui.test.TestUtil;
import org.eclipse.jface.viewers.ISelectionProvider;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jgit.api.Git;
import org.eclipse.jgit.junit.JGitTestUtil;
import org.eclipse.jgit.lib.Constants;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.storage.file.FileRepositoryBuilder;
import org.eclipse.jgit.util.FileUtils;
import org.eclipse.swtbot.eclipse.finder.widgets.SWTBotView;
import org.eclipse.swtbot.swt.finder.junit.SWTBotJunit4ClassRunner;
import org.eclipse.team.core.RepositoryProvider;
import org.eclipse.ui.PlatformUI;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;

@RunWith(SWTBotJunit4ClassRunner.class)
public class DynamicVariablesTest extends EGitTestCase {

  private File gitDir;
  private File gitDir2;
  private IProject project;
  private IProject project2;
  private Repository repository;
  private Repository repository2;
  private Git git;

  private static final String TEST_PROJECT = "TestProject";
  private static final String TEST_PROJECT_LOC = "Sub/TestProject";
  private static final String TEST_PROJECT2 = "TestProject2";

  private static final String TEST_FILE = "TestFile";
  private static final String TEST_FILE2 = "TestFile2";

  @Before
  public void setUp() throws Exception {

    IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();

    FileUtils.mkdir(new File(root.getLocation().toFile(),"Sub"), true);
    gitDir = new File(new File(root.getLocation().toFile(), "Sub"), Constants.DOT_GIT);

    repository = FileRepositoryBuilder.create(gitDir);
    repository.create();

    project = root.getProject(TEST_PROJECT);
    project.create(null);
    project.open(null);
    IProjectDescription description = project.getDescription();
    description.setLocation(root.getLocation().append(TEST_PROJECT_LOC));
    project.move(description, IResource.FORCE, null);

    project2 = root.getProject(TEST_PROJECT2);
    project2.create(null);
    project2.open(null);
    gitDir2 = new File(project2.getLocation().toFile().getAbsoluteFile(), Constants.DOT_GIT);
    repository2 = FileRepositoryBuilder.create(gitDir2);
    repository2.create();

    RepositoryMapping mapping = new RepositoryMapping(project, gitDir);
    RepositoryMapping mapping2 = new RepositoryMapping(project2, gitDir2);

    GitProjectData projectData = new GitProjectData(project);
    GitProjectData projectData2 = new GitProjectData(project2);
    projectData.setRepositoryMappings(Collections.singletonList(mapping));
    projectData.store();
    projectData2.setRepositoryMappings(Collections.singletonList(mapping2));
    projectData2.store();
    GitProjectData.add(project, projectData);
    GitProjectData.add(project2, projectData2);

    RepositoryProvider.map(project, GitProvider.class.getName());
    RepositoryProvider.map(project2, GitProvider.class.getName());

    JGitTestUtil.write(new File(repository.getWorkTree(), TEST_PROJECT
        + "/" + TEST_FILE), "Some data");
    JGitTestUtil.write(new File(repository2.getWorkTree(), TEST_FILE2),
        "Some other data");
    project.refreshLocal(IResource.DEPTH_INFINITE, null);
    project2.refreshLocal(IResource.DEPTH_INFINITE, null);
    git = new Git(repository);
    git.add().addFilepattern(".").call();
    git.commit().setMessage("Initial commit").call();

    git = new Git(repository2);
    git.add().addFilepattern(".").call();
    git.commit().setMessage("Initial commit").call();
    git.branchRename().setNewName("main").call();
  }

  @After
  public void tearDown() throws Exception {

    Thread.sleep(1000); // FIXME: We need a good way to wait for things to settle

    RepositoryProvider.unmap(project);
    RepositoryProvider.unmap(project2);

    GitProjectData.delete(project);
    GitProjectData.delete(project2);

    project.delete(true, true, null);
    project2.delete(true, true, null);

    repository.close();
    repository2.close();

    org.eclipse.egit.core.Activator.getDefault().getRepositoryCache().clear();

    FileUtils.delete(gitDir, FileUtils.RECURSIVE);
    // gitDir2 is inside project, already gone
  }

  @Test
  public void testGitDir() throws CoreException {
    assertVariable(gitDir.getPath(), "git_dir", null);
    assertVariable(gitDir.getPath(), "git_dir", TEST_PROJECT);
    assertVariable(gitDir2.getPath(), "git_dir", TEST_PROJECT2);
    assertVariable(gitDir2.getPath(), "git_dir", TEST_PROJECT2 + "/" + TEST_FILE2);
  }

  @Test
  public void testGitWorkTree() throws CoreException {
    assertVariable(gitDir.getParentFile().getPath(), "git_work_tree", null);
    assertVariable(gitDir.getParentFile().getPath(), "git_work_tree", TEST_PROJECT);
    assertVariable(gitDir2.getParentFile().getPath(), "git_work_tree", TEST_PROJECT2);
  }

  @Test
  public void testGitPath() throws CoreException {
    assertVariable(TEST_PROJECT + File.separatorChar + TEST_FILE, "git_repo_relative_path", null);
    assertVariable(TEST_FILE2, "git_repo_relative_path", TEST_PROJECT2 + "/" + TEST_FILE2);
  }

  @Test
  public void testGitBranch() throws CoreException {
    assertVariable("master", "git_branch", null);
    assertVariable("master", "git_branch", TEST_PROJECT + "/" + TEST_FILE);
    assertVariable("main", "git_branch", TEST_PROJECT2 + "/" + TEST_FILE2);
    assertVariable("main", "git_branch", TEST_PROJECT2);
  }

  private void assertVariable(String expected, String variableName,
      String argument) throws CoreException {
    IResource findMember = project.findMember(TEST_FILE);

    SWTBotView explorerView = TestUtil.showExplorerView();
    final ISelectionProvider selectionProvider = explorerView
        .getViewReference().getView(true).getSite()
        .getSelectionProvider();
    final StructuredSelection structuredSelection = new StructuredSelection(
        findMember);
    PlatformUI.getWorkbench().getDisplay().syncExec(new Runnable() {

      public void run() {
        selectionProvider.setSelection(structuredSelection);
      }
    });

    IDynamicVariable dynamicVariable = VariablesPlugin.getDefault()
        .getStringVariableManager().getDynamicVariable(variableName);
    String value = dynamicVariable.getValue(argument);
    assertEquals(expected, value);
  }
}
TOP

Related Classes of org.eclipse.egit.ui.variables.DynamicVariablesTest

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.