Package org.eclipse.egit.ui.wizards.clone

Source Code of org.eclipse.egit.ui.wizards.clone.GitCloneWizardTest

/*******************************************************************************
* Copyright (C) 2009, Robin Rosenberg <robin.rosenberg@dewire.com>
* Copyright (C) 2010, Ketan Padegaonkar <KetanPadegaonkar@gmail.com>
* Copyright (C) 2010, Matthias Sohn <matthias.sohn@sap.com>
*
* 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.wizards.clone;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;

import java.io.File;

import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.Platform;
import org.eclipse.egit.ui.common.RepoPropertiesPage;
import org.eclipse.egit.ui.common.RepoRemoteBranchesPage;
import org.eclipse.egit.ui.common.WorkingCopyPage;
import org.eclipse.egit.ui.internal.UIText;
import org.eclipse.jgit.lib.Constants;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.storage.file.FileRepositoryBuilder;
import org.eclipse.osgi.util.NLS;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;

public class GitCloneWizardTest extends GitCloneWizardTestBase {

  @BeforeClass
  public static void setup() throws Exception {
    r = new SampleTestRepository(NUMBER_RANDOM_COMMITS, false);
  }

  @Test
  public void updatesParameterFieldsInImportDialogWhenURIIsUpdated()
      throws Exception {

    importWizard.openWizard();
    RepoPropertiesPage propertiesPage = importWizard.openRepoPropertiesPage();

    propertiesPage.setURI("git://www.jgit.org/EGIT");
    propertiesPage.assertSourceParams(null, "www.jgit.org", "/EGIT", "git",
        "", true, "", "", false, false);

    propertiesPage.appendToURI("X");

    propertiesPage.assertSourceParams(null, "www.jgit.org", "/EGITX",
        "git", "", true, "", "", false, false);

    propertiesPage.setURI("git://www.jgit.org/EGIT");
    propertiesPage.assertSourceParams(null, "www.jgit.org", "/EGIT", "git",
        "", true, "", "", false, false);

    propertiesPage.setURI("git://user:hi@www.jgit.org/EGIT");
    propertiesPage.assertSourceParams(
        " User not supported on git protocol.", "www.jgit.org",
        "/EGIT", "git", "", true, "", "", false, false);

    // UI doesn't change URI even when password is entered in clear text as
    // part of URI. Opinions on this may vary.
    propertiesPage.assertURI("git://user:hi@www.jgit.org/EGIT");

    propertiesPage.setURI("ssh://user@www.jgit.org/EGIT");
    propertiesPage.assertSourceParams(null, "www.jgit.org", "/EGIT",
        "ssh", "", true, "user", "", true, true);

    propertiesPage.setURI("ssh://user@www.jgit.org/EGIT");
    propertiesPage.assertSourceParams(null, "www.jgit.org", "/EGIT",
        "ssh", "", true, "user", "", true, true);

    propertiesPage.setURI("ssh://user:hi@www.jgit.org:33/EGIT");
    propertiesPage.assertSourceParams(null, "www.jgit.org", "/EGIT",
        "ssh", "33", true, "user", "hi", true, true);

    propertiesPage.setURI("ssh:///EGIT");
    propertiesPage.assertSourceParams(" Host required for ssh protocol.",
        "", "/EGIT", "ssh", "", true, "", "", true, true);

    propertiesPage.setURI("file:///some/place");
    if (Platform.getOS().equals(Platform.OS_WIN32))
      propertiesPage.assertSourceParams(" "
          + System.getProperty("user.dir")
          + "\\.\\some\\place does not exist.", "", "/some/place",
          "file", "", false, "", "", false, false);
    else
      propertiesPage.assertSourceParams(" /some/place does not exist.",
          "", "/some/place", "file", "", false, "", "", false, false);

    // Now try changing some fields other than URI and see how the URI field
    // gets changed
    propertiesPage.setURI("ssh://user@www.jgit.org/EGIT");

    // ..change host
    bot.textWithLabel("Host:").setText("example.com");
    propertiesPage.assertURI("ssh://user@example.com/EGIT");

    propertiesPage.assertSourceParams(null, "example.com", "/EGIT",
        "ssh", "", true, "user", "", true, true);

    // ..change user
    bot.textWithLabel("User:").setText("gitney");
    propertiesPage.assertURI("ssh://gitney@example.com/EGIT");
    propertiesPage.assertSourceParams(null, "example.com", "/EGIT",
        "ssh", "", true, "gitney", "", true, true);

    // ..change password
    bot.textWithLabel("Password:").setText("fsck");
    // Password is not written into the URL here!
    propertiesPage.assertURI("ssh://gitney@example.com/EGIT");
    propertiesPage.assertSourceParams(null, "example.com", "/EGIT",
        "ssh", "", true, "gitney", "fsck", true, true);

    // change port number
    bot.textWithLabel("Port:").setText("99");
    propertiesPage.assertURI("ssh://gitney@example.com:99/EGIT");
    propertiesPage.assertSourceParams(null, "example.com", "/EGIT",
        "ssh", "99", true, "gitney", "fsck", true, true);

    // change protocol to another with user/password capability
    bot.comboBoxWithLabel("Protocol:").setSelection("ftp");
    propertiesPage.assertURI("ftp://gitney@example.com:99/EGIT");
    propertiesPage.assertSourceParams(null, "example.com", "/EGIT", "ftp",
        "99", true, "gitney", "fsck", true, true);

    // change protocol to one without user/password capability
    bot.comboBoxWithLabel("Protocol:").setSelection("git");
    propertiesPage.assertURI("git://example.com:99/EGIT");
    propertiesPage.assertSourceParams(null, "example.com", "/EGIT",
        "git", "99", true, "", "", false, false);

    // change protocol to one without host capability
    bot.comboBoxWithLabel("Protocol:").setSelection("file");
    propertiesPage.assertURI("file:///EGIT");
    propertiesPage.assertSourceParams(" /EGIT does not exist.", "",
        "/EGIT",
        "file", "", false,
        "", "", false, false);

    // Local protocol with file: prefix. We need to make sure the
    // local path exists as a directory so we choose user.home as
    // that one should exist.
    if (Platform.getOS().equals(Platform.OS_WIN32))
      propertiesPage.setURI("file:///" + System.getProperty("user.home"));
    else
      propertiesPage.setURI("file://" + System.getProperty("user.home"));
    propertiesPage.assertSourceParams(null, "", System.getProperty(
        "user.home"), "file", "", false, "", "",
        false, false);

    // Local protocol without file: prefix
    propertiesPage.setURI(System.getProperty("user.home"));
    propertiesPage.assertSourceParams(null, "", System.getProperty(
        "user.home"), "file", "", false, "", "",
        false, false);

    // On windows the use can choose forward or backward slashes, so add
    // a case for forward slashes using the non prefixed local protocol.
    if (Platform.getOS().equals(Platform.OS_WIN32)) {
      propertiesPage.setURI(System.getProperty("user.home"));
      propertiesPage.assertSourceParams(null, "", System.getProperty(
          "user.home"), "file", "", false, "", "",
          false, false);
    }
    bot.button("Cancel").click();
  }

  @Test
  public void canCloneARemoteRepo() throws Exception {
    destRepo = new File(ResourcesPlugin.getWorkspace()
        .getRoot().getLocation().toFile(), "test1");

    importWizard.openWizard();
    RepoPropertiesPage propertiesPage = importWizard.openRepoPropertiesPage();

    RepoRemoteBranchesPage remoteBranches = propertiesPage
        .nextToRemoteBranches(r.getUri());

    cloneRepo(destRepo, remoteBranches);
    bot.button("Cancel").click();
  }

  @Test
  public void clonedRepositoryShouldExistOnFileSystem() throws Exception {
    importWizard.openWizard();
    RepoPropertiesPage repoProperties = importWizard.openRepoPropertiesPage();
    RepoRemoteBranchesPage remoteBranches = repoProperties
        .nextToRemoteBranches(r.getUri());
    remoteBranches.assertRemoteBranches(SampleTestRepository.FIX, Constants.MASTER);
    WorkingCopyPage workingCopy = remoteBranches.nextToWorkingCopy();
    workingCopy.assertWorkingCopyExists();
    bot.button("Cancel").click();
  }

  @Test
  public void alteringSomeParametersDuringClone() throws Exception {
    destRepo = new File(ResourcesPlugin.getWorkspace()
        .getRoot().getLocation().toFile(), "test2");

    importWizard.openWizard();
    RepoPropertiesPage repoProperties = importWizard.openRepoPropertiesPage();
    RepoRemoteBranchesPage remoteBranches = repoProperties
        .nextToRemoteBranches(r.getUri());
    remoteBranches.deselectAllBranches();
    remoteBranches
        .assertErrorMessage("At least one branch must be selected.");
    remoteBranches.assertNextIsDisabled();

    remoteBranches.selectBranches(SampleTestRepository.FIX);
    remoteBranches.assertNextIsEnabled();

    WorkingCopyPage workingCopy = remoteBranches.nextToWorkingCopy();
    workingCopy.setDirectory(destRepo.toString());
    workingCopy.assertBranch(SampleTestRepository.FIX);
    workingCopy.setRemoteName("src");
    workingCopy.waitForCreate();

    // Some random sampling to see we got something. We do not test
    // the integrity of the repository here. Only a few basic properties
    // we'd expect from a clone made this way, that would possibly
    // not hold true given other parameters in the GUI.
    Repository repository = FileRepositoryBuilder.create(new File(destRepo,
        Constants.DOT_GIT));
    assertNotNull(repository.resolve("src/" + SampleTestRepository.FIX));
    // we didn't clone that one
    assertNull(repository.resolve("src/master"));
    // and a local master initialized from origin/master (default!)
    assertEquals(repository.resolve("stable"), repository
        .resolve("src/stable"));
    // A well known tag
    assertNotNull(repository.resolve(Constants.R_TAGS + SampleTestRepository.v2_0_name).name());
    // lots of refs
    assertTrue(repository.getAllRefs().size() >= 4);
    bot.button("Cancel").click();
  }

  // TODO network timeouts seem to be longer on cental EGit build
  // Test is ignored to fix the build
  @Ignore
  @Test
  public void invalidHostnameFreezesDialog() throws Exception {
    importWizard.openWizard();
    RepoPropertiesPage repoProperties = importWizard.openRepoPropertiesPage();
    RepoRemoteBranchesPage remoteBranches = repoProperties
        .nextToRemoteBranches("git://no.example.com/EGIT");
    remoteBranches.assertErrorMessage(NLS.bind(
        UIText.SourceBranchPage_CompositeTransportErrorMessage,
        "Exception caught during execution of ls-remote command",
        "git://no.example.com/EGIT: unknown host"));
    remoteBranches.assertCannotProceed();
    remoteBranches.cancel();
  }

  // TODO network timeouts seem to be longer on cental EGit build
  // Test is ignored to fix the build
  @Ignore
  @Test
  public void invalidPortFreezesDialog() throws Exception {
    importWizard.openWizard();
    RepoPropertiesPage repoProperties = importWizard.openRepoPropertiesPage();
    RepoRemoteBranchesPage remoteBranches = repoProperties
        .nextToRemoteBranches("git://localhost:80/EGIT");
    remoteBranches.assertErrorMessage(NLS.bind(
        UIText.SourceBranchPage_CompositeTransportErrorMessage,
        "Exception caught during execution of ls-remote command",
        "git://localhost:80/EGIT: Connection refused"));
    remoteBranches.assertCannotProceed();
    remoteBranches.cancel();
  }

  // TODO: Broken, seems that this takes forever and does not come back with
  // an error. Perhaps set a higher timeout for this test ?
  @Ignore
  public void timeoutToASocketFreezesDialog() throws Exception {
    importWizard.openWizard();
    RepoPropertiesPage repoProperties = importWizard.openRepoPropertiesPage();
    RepoRemoteBranchesPage remoteBranches = repoProperties
        .nextToRemoteBranches("git://www.example.com/EGIT");
    remoteBranches
        .assertErrorMessage("git://www.example.com/EGIT: unknown host");
    remoteBranches.assertCannotProceed();
    remoteBranches.cancel();
  }

}
TOP

Related Classes of org.eclipse.egit.ui.wizards.clone.GitCloneWizardTest

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.