/******************************************************************************* | |
* Copyright (c) 2011-2013 EclipseSource Muenchen GmbH 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 | |
* | |
* Contributors: | |
* Edgar Mueller - initial API and implementation | |
******************************************************************************/ | |
package org.eclipse.emf.emfstore.client.api.test; | |
import static org.eclipse.emf.emfstore.client.api.test.ClientTestUtil.noCommitCallback; | |
import static org.eclipse.emf.emfstore.client.api.test.ClientTestUtil.noLogMessage; | |
import static org.eclipse.emf.emfstore.client.api.test.ClientTestUtil.noProgressMonitor; | |
import static org.junit.Assert.assertEquals; | |
import static org.junit.Assert.fail; | |
import java.util.concurrent.Callable; | |
import org.eclipse.emf.emfstore.client.ESLocalProject; | |
import org.eclipse.emf.emfstore.client.test.common.TestConflictResolver; | |
import org.eclipse.emf.emfstore.client.test.common.cases.ESTestWithSharedProject; | |
import org.eclipse.emf.emfstore.client.test.common.dsl.Add; | |
import org.eclipse.emf.emfstore.client.test.common.dsl.Create; | |
import org.eclipse.emf.emfstore.client.test.common.dsl.Delete; | |
import org.eclipse.emf.emfstore.client.util.RunESCommand; | |
import org.eclipse.emf.emfstore.internal.client.model.impl.api.ESLocalProjectImpl; | |
import org.eclipse.emf.emfstore.internal.server.exceptions.InvalidVersionSpecException; | |
import org.eclipse.emf.emfstore.internal.server.model.impl.api.versionspec.ESPrimaryVersionSpecImpl; | |
import org.eclipse.emf.emfstore.server.exceptions.ESException; | |
import org.eclipse.emf.emfstore.server.exceptions.ESUpdateRequiredException; | |
import org.eclipse.emf.emfstore.server.model.versionspec.ESPrimaryVersionSpec; | |
import org.eclipse.emf.emfstore.server.model.versionspec.ESVersionSpec; | |
import org.junit.After; | |
import org.junit.AfterClass; | |
import org.junit.Before; | |
import org.junit.BeforeClass; | |
import org.junit.Test; | |
/** | |
* Testing of branch related API. | |
* | |
* @author emueller | |
* | |
*/ | |
public class BranchTest extends ESTestWithSharedProject { | |
private final String playerName1 = "player 1"; //$NON-NLS-1$ | |
private final String playerName2 = "player 2"; //$NON-NLS-1$ | |
private final String playerName3 = "player 3"; //$NON-NLS-1$ | |
private final String branchName = "mybranch"; //$NON-NLS-1$ | |
private final String trunkName = "trunk"; //$NON-NLS-1$ | |
@Override | |
@After | |
public void after() { | |
try { | |
Delete.allRemoteProjects(getServer(), getUsersession()); | |
} catch (final ESException ex) { | |
fail(ex.getMessage()); | |
} | |
super.after(); | |
} | |
@Override | |
@Before | |
public void before() { | |
super.before(); | |
} | |
@BeforeClass | |
public static void beforeClass() { | |
startEMFStore(); | |
} | |
@AfterClass | |
public static void afterClass() { | |
stopEMFStore(); | |
} | |
@Test | |
public void branchFromTrunkMergeBackAndUpdateBranch() throws InvalidVersionSpecException, | |
ESUpdateRequiredException, ESException { | |
dummyChange(getLocalProject(), playerName1); | |
getLocalProject().commit(noProgressMonitor()); | |
final ESLocalProject trunk = getLocalProject().getRemoteProject().checkout(trunkName, noProgressMonitor()); | |
// switch to branch | |
getLocalProject().commitToBranch( | |
ESVersionSpec.FACTORY.createBRANCH(branchName), | |
noLogMessage(), noCommitCallback(), noProgressMonitor()); | |
dummyChange(getLocalProject(), playerName2); | |
final ESPrimaryVersionSpec branchCommit = getLocalProject().commit(noLogMessage(), noCommitCallback(), | |
noProgressMonitor()); | |
// merge into trunk | |
// FIXME: merge API not yet available | |
RunESCommand.run(new Callable<Void>() { | |
public Void call() throws Exception { | |
((ESLocalProjectImpl) trunk).toInternalAPI().mergeBranch( | |
((ESPrimaryVersionSpecImpl) branchCommit).toInternalAPI(), | |
new TestConflictResolver(true, 0), | |
noProgressMonitor()); | |
return null; | |
} | |
}); | |
trunk.commit(noProgressMonitor()); | |
dummyChange(getLocalProject(), playerName3); | |
getLocalProject().commit(noProgressMonitor()); | |
assertEquals(3, getLocalProject().getModelElements().size()); | |
} | |
@Test | |
public void branchFromTrunkModifyTrunkAndMergeTrunkIntoBranch() throws InvalidVersionSpecException, | |
ESUpdateRequiredException, ESException { | |
// switch to branch | |
getLocalProject().commitToBranch( | |
ESVersionSpec.FACTORY.createBRANCH(branchName), | |
noLogMessage(), noCommitCallback(), noProgressMonitor()); | |
final ESLocalProject trunk = getLocalProject().getRemoteProject().checkout(trunkName, noProgressMonitor()); | |
// modify trunk | |
dummyChange(trunk, playerName1); | |
final ESPrimaryVersionSpec trunkCommit = trunk.commit(noProgressMonitor()); | |
// merge trunk into branch | |
// FIXME: merge API not yet available | |
RunESCommand.run(new Callable<Void>() { | |
public Void call() throws Exception { | |
((ESLocalProjectImpl) getLocalProject()).toInternalAPI().mergeBranch( | |
((ESPrimaryVersionSpecImpl) trunkCommit).toInternalAPI(), | |
new TestConflictResolver(true, 0), | |
noProgressMonitor()); | |
return null; | |
} | |
}); | |
getLocalProject().commit(noProgressMonitor()); | |
assertEquals(1, getLocalProject().getModelElements().size()); | |
} | |
private static void dummyChange(final ESLocalProject localProject, String name) { | |
Add.toProject(localProject, Create.player(name)); | |
} | |
} |