Java tutorial
/******************************************************************************* * Copyright (C) 2010, Dariusz Luksza <dariusz@luksza.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.core.synchronize; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import java.io.File; import java.io.IOException; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.egit.core.project.RepositoryMapping; import org.eclipse.egit.core.synchronize.dto.GitSynchronizeData; import org.eclipse.egit.core.synchronize.dto.GitSynchronizeDataSet; import org.eclipse.egit.core.test.GitTestCase; import org.eclipse.egit.core.test.TestRepository; import org.eclipse.jgit.lib.Constants; import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.revwalk.RevCommit; import org.eclipse.team.core.TeamException; import org.eclipse.team.core.variants.IResourceVariant; import org.eclipse.team.core.variants.IResourceVariantTree; import org.junit.After; import org.junit.Before; import org.junit.Test; public class GitResourceVariantTreeSubscriberTest2 extends GitTestCase { private Repository repo; private IProject iProject; private TestRepository testRepo; @Before public void setUp() throws Exception { super.setUp(); iProject = project.getProject(); testRepo = new TestRepository(gitDir); testRepo.connect(iProject); repo = RepositoryMapping.getMapping(iProject).getRepository(); } @After public void clearGitResources() throws Exception { testRepo.disconnect(iProject); testRepo.dispose(); repo = null; super.tearDown(); } /** * Both source and destination branches has some different commits but they * has also common ancestor. This situation is described more detailed in * bug #317934 * * This test passes when it is run as a stand alone test case, but it fails * when it is run as part of test suite. It throws NPE when it try's to * checkout master branch. * * @throws Exception */ @Test public void shouldReturnCommonAncestorAsBase() throws Exception { // when String fileName = "Main.java"; File file = testRepo.createFile(iProject, fileName); RevCommit commit = testRepo.appendContentAndCommit(iProject, file, "class Main {}", "initial commit"); IFile mainJava = testRepo.getIFile(iProject, file); // this should be our common ancestor testRepo.createAndCheckoutBranch(Constants.HEAD, Constants.R_HEADS + "test"); testRepo.appendContentAndCommit(iProject, file, "// test 1", "second commit"); testRepo.checkoutBranch(Constants.R_HEADS + Constants.MASTER); testRepo.appendContentAndCommit(iProject, file, "// test 2", "third commit"); // given GitResourceVariantTreeSubscriber grvts = createGitResourceVariantTreeSubscriber(Constants.HEAD, Constants.R_HEADS + "test"); grvts.getBaseTree(); IResourceVariantTree baseTree = grvts.getBaseTree(); // then IResourceVariant actual = commonAssertionsForBaseTree(baseTree, mainJava); assertEquals(commit.abbreviate(7).name() + "...", actual.getContentIdentifier()); } private GitResourceVariantTreeSubscriber createGitResourceVariantTreeSubscriber(String src, String dst) throws IOException { GitSynchronizeData gsd = new GitSynchronizeData(repo, src, dst, false); GitSynchronizeDataSet gsds = new GitSynchronizeDataSet(gsd); new GitResourceVariantTreeSubscriber(gsds); return new GitResourceVariantTreeSubscriber(gsds); } private IResourceVariant commonAssertionsForBaseTree(IResourceVariantTree baseTree, IResource resource) throws TeamException { assertNotNull(baseTree); assertTrue(baseTree instanceof GitBaseResourceVariantTree); IResourceVariant resourceVariant = baseTree.getResourceVariant(resource); assertNotNull(resourceVariant); assertTrue(resourceVariant instanceof GitResourceVariant); return resourceVariant; } }