/*******************************************************************************
* Copyright (C) 2011, 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.ui.internal.synchronize.model;
import static org.eclipse.jgit.lib.Constants.HEAD;
import static org.eclipse.jgit.lib.ObjectId.fromString;
import static org.eclipse.jgit.lib.ObjectId.zeroId;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import java.io.IOException;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.egit.core.synchronize.GitCommitsModelCache.Change;
import org.eclipse.egit.ui.Activator;
import org.eclipse.jgit.lib.AbbreviatedObjectId;
import org.eclipse.jgit.lib.ObjectId;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
public class GitModelBlobTest extends GitModelTestCase {
@Test public void shouldReturnEqualForSameInstance() throws Exception {
// given
GitModelBlob left = createGitModelBlob();
// when
boolean actual = left.equals(left);
// then
assertTrue(actual);
}
@Test public void shouldReturnNotEqualForDifferentLocation()
throws Exception {
// given
GitModelBlob left = createGitModelBlob(zeroId(), getFile1Location());
GitModelBlob right = createGitModelBlob(zeroId(), getFile2Location());
// when
boolean actual = left.equals(right);
// then
assertFalse(actual);
}
@Ignore
// this test case relies on
// org.eclipse.egit.core.synchronize.GitCommitsModelCache.Change#equals()
// implementation. Unfortunately in mockito we can't execute real
// implementation of equals() method, therefore this test will fail
@Test public void shouldReturnEqualForSameData() throws Exception {
// given
GitModelBlob left = createGitModelBlob(zeroId(), zeroId(),
getFile1Location());
GitModelBlob right = createGitModelBlob(zeroId(), zeroId(),
getFile1Location());
// when
boolean actual = left.equals(right);
// then
assertTrue(actual);
}
@Ignore
// this test case relies on
// org.eclipse.egit.core.synchronize.GitCommitsModelCache.Change#equals()
// implementation. Unfortunately in mockito we can't execute real
// implementation of equals() method, therefore this test will fail
@Test public void shouldReturnEqualSameData1() throws Exception {
// given
GitModelBlob left = createGitModelBlob(zeroId(), getFile1Location());
GitModelBlob right = createGitModelBlob(zeroId(), getFile1Location());
// when
boolean actual = left.equals(right);
// then
assertTrue(actual);
}
@SuppressWarnings("boxing")
@Test
public void shouldBeSymmetric() throws Exception {
// given
GitModelBlob left = createGitModelBlob(zeroId(), getFile1Location());
GitModelBlob right = createGitModelBlob(zeroId(), getFile1Location());
// when
boolean actual1 = left.equals(right);
boolean actual2 = right.equals(left);
// then
assertEquals(actual1, actual2);
}
@Test
public void shouldBeSymmetric1() throws Exception {
// given
GitModelBlob left = createGitModelBlob(zeroId(), getFile1Location());
GitModelCommit right = new GitModelCommit(createModelRepository(),
lookupRepository(leftRepoFile), getCommit(leftRepoFile, HEAD),
null);
// when
boolean actual1 = left.equals(right);
boolean actual2 = right.equals(left);
// then
assertTrue(!actual1);
assertTrue(!actual2);
}
@Test public void shouldReturnNotEqualForDifferentFiles()
throws Exception {
// given
GitModelBlob left = createGitModelBlob();
GitModelBlob right = createGitModelBlob(zeroId(), getFile2Location());
// when
boolean actual = left.equals(right);
// then
assertFalse(actual);
}
@Test public void shouldReturnNotEqualForDifferentBaseObjectId()
throws Exception {
// given
GitModelBlob left = createGitModelBlob(zeroId(), getFile1Location());
GitModelBlob right = createGitModelBlob(
fromString("4c879313cd1332e594b1ad20b1485bdff9533034"),
getFile1Location());
// when
boolean actual = left.equals(right);
// then
assertFalse(actual);
}
@Test public void shouldReturnNotEqualForDifferentBaseObjectId2()
throws Exception {
// given
GitModelBlob left = createGitModelBlob(zeroId(), zeroId(),
getFile1Location());
GitModelBlob right = createGitModelBlob(
fromString("4c879313cd1332e594b1ad20b1485bdff9533034"),
null, getFile1Location());
// when
boolean actual = left.equals(right);
// then
assertFalse(actual);
}
@Test public void shouldReturnNotEqualForDifferentBaseObjectId3()
throws Exception {
// given
GitModelBlob left = createGitModelBlob(zeroId(), ObjectId.zeroId(),
getFile1Location());
GitModelBlob right = createGitModelBlob(
fromString("4c879313cd1332e594b1ad20b1485bdff9533034"),
fromString("4c879313cd1332e0000000000000000111122233"),
getFile2Location());
// when
boolean actual = left.equals(right);
// then
assertFalse(actual);
}
@Test public void shouldReturnNotEqualForBlobAndCommit() throws Exception {
// given
GitModelBlob left = createGitModelBlob();
GitModelCommit right = new GitModelCommit(createModelRepository(),
lookupRepository(leftRepoFile), getCommit(leftRepoFile, HEAD),
null);
// when
boolean actual = left.equals(right);
// then
assertFalse(actual);
}
@Test public void shouldReturnNotEqualForBlobAndTree() throws Exception {
// given
GitModelBlob left = createGitModelBlob();
GitModelTree right = mock(GitModelTree.class);
// when
boolean actual = left.equals(right);
// then
assertFalse(actual);
}
@Test public void shouldReturnNotEqualForBlobAndCacheFile()
throws Exception {
// given
GitModelBlob left = createGitModelBlob();
GitModelCacheFile right = mock(GitModelCacheFile.class);
// when
boolean actual = left.equals(right);
// then
assertFalse(actual);
}
@Test public void shouldReturnNotEqualForBlobAndWorkingFile()
throws Exception {
// given
GitModelBlob left = createGitModelBlob();
GitModelWorkingFile right = mock(GitModelWorkingFile.class);
// when
boolean actual = left.equals(right);
// then
assertFalse(actual);
}
@Test public void shouldActAsResourceProvider()
throws Exception {
// given
GitModelBlob left = createGitModelBlob();
// then
IFile file = ResourcesPlugin.getWorkspace().getRoot().getProject(PROJ1)
.getFile(new Path("folder/test.txt"));
IPath leftLocation = left.getResource().getLocation();
assertEquals(file.getLocation(), leftLocation);
}
@Before
public void setupEnvironment() throws Exception {
leftRepoFile = createProjectAndCommitToRepository();
Activator.getDefault().getRepositoryUtil()
.addConfiguredRepository(leftRepoFile);
}
private GitModelBlob createGitModelBlob() throws Exception {
return createGitModelBlob(null, getFile1Location());
}
private GitModelBlob createGitModelBlob(ObjectId baseId, IPath location)
throws IOException, Exception {
return createGitModelBlob(baseId, null, location);
}
private GitModelBlob createGitModelBlob(ObjectId baseId, ObjectId remoteId,
IPath location) throws Exception {
Change change = mock(Change.class);
if (baseId != null)
when(change.getObjectId()).thenReturn(
AbbreviatedObjectId.fromObjectId(baseId));
if (remoteId != null)
when(change.getRemoteObjectId()).thenReturn(
AbbreviatedObjectId.fromObjectId(remoteId));
return new GitModelBlob(createModelCommit(),
lookupRepository(leftRepoFile), change, location);
}
}