blob: 8b66bd6874aa012cd83d68d563f3934d7f7bb270 [file] [log] [blame]
/*******************************************************************************
* Copyright (C) 2015 Obeo and others.
*
* 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.emf.compare.ide.ui.tests.models;
import static org.junit.Assert.assertEquals;
import java.io.ByteArrayInputStream;
import java.util.Scanner;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.content.IContentType;
import org.eclipse.egit.core.op.MergeOperation;
import org.eclipse.emf.compare.ide.ui.tests.egit.CompareGitTestCase;
import org.eclipse.emf.compare.ide.ui.tests.egit.fixture.GitTestRepository;
import org.eclipse.jgit.api.Git;
import org.eclipse.jgit.api.Status;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.revwalk.RevCommit;
import org.junit.Before;
/**
* Provides shared utility methods for unit tests working on logical models. The model provider used for
* tests, {@link SampleModelProvider}, links all "*.sample" files from a common directory into a single
* logical model.
*/
@SuppressWarnings("restriction")
public abstract class ModelTestCase extends CompareGitTestCase {
protected static final String SAMPLE_FILE_EXTENSION = SampleModelProvider.SAMPLE_FILE_EXTENSION;
@Override
@Before
public void setUp() throws Exception {
super.setUp();
IContentType textType = Platform.getContentTypeManager()
.getContentType("org.eclipse.core.runtime.text"); //$NON-NLS-1$
textType.addFileSpec(SAMPLE_FILE_EXTENSION, IContentType.FILE_EXTENSION_SPEC);
}
protected RevCommit setContentsAndCommit(GitTestRepository testRepository, IFile targetFile,
String newContents, String commitMessage) throws Exception {
targetFile.setContents(new ByteArrayInputStream(newContents.getBytes("UTF-8")), IResource.FORCE, //$NON-NLS-1$
new NullProgressMonitor());
testRepository.addToIndex(targetFile);
return testRepository.commit(commitMessage);
}
/**
* Checks that the content of the given file is equal to the given String. End-of-line characters are NOT
* ignored: They must be equal too, i.e. the expected content is tested as is and not tokenized against
* line separators.
*
* @param file
* @param expectedContents
* @throws Exception
*/
protected void assertContentEquals(IFile file, String expectedContents) throws Exception {
Scanner scanner = new Scanner(file.getContents());
try {
scanner.useDelimiter("\\A"); //$NON-NLS-1$
String fileContent = ""; //$NON-NLS-1$
if (scanner.hasNext()) {
fileContent = scanner.next();
}
assertEquals(expectedContents, fileContent);
} finally {
scanner.close();
}
}
protected void merge(Repository repo, String refName) throws CoreException {
new MergeOperation(repo, refName).execute(null);
}
protected void merge(Repository repo, String refName, String strategyName) throws CoreException {
new MergeOperation(repo, refName, strategyName).execute(null);
}
protected Status status(Repository repo) throws Exception {
Git git = new Git(repo);
try {
return git.status().call();
} finally {
git.close();
}
}
}