blob: 8632a2daa448ca2c5d6d1d7d9f1f1442ac8e8947 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2012-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:
******************************************************************************/
package org.eclipse.emf.emfstore.client.api.test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.util.Date;
import java.util.concurrent.Callable;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.emf.emfstore.bowling.League;
import org.eclipse.emf.emfstore.bowling.Player;
import org.eclipse.emf.emfstore.client.ESRemoteProject;
import org.eclipse.emf.emfstore.client.ESServer;
import org.eclipse.emf.emfstore.client.ESUsersession;
import org.eclipse.emf.emfstore.client.exceptions.ESProjectNotSharedException;
import org.eclipse.emf.emfstore.client.test.common.cases.ESTest;
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.util.ProjectUtil;
import org.eclipse.emf.emfstore.client.test.common.util.ServerUtil;
import org.eclipse.emf.emfstore.client.util.RunESCommand;
import org.eclipse.emf.emfstore.common.model.ESModelElementId;
import org.eclipse.emf.emfstore.internal.client.model.connectionmanager.KeyStoreManager;
import org.eclipse.emf.emfstore.server.exceptions.ESException;
import org.eclipse.emf.emfstore.server.model.query.ESHistoryQuery;
import org.eclipse.emf.emfstore.server.model.versionspec.ESPrimaryVersionSpec;
import org.eclipse.emf.emfstore.server.model.versionspec.ESVersionSpec;
import org.junit.Ignore;
import org.junit.Test;
public class UnsharedLocalProjectTest extends ESTest {
private static final String COMMIT_AN_UNSHARED_PROJECT_ERROR_MSG = "Should not be able to commit an unshared Project!"; //$NON-NLS-1$
private static final String UPDATE_AN_UNSHARED_PROJECT_ERROR_MSG = "Should not be able to update an unshared Project!"; //$NON-NLS-1$
private static final String BRANCH_NAME = "branch"; //$NON-NLS-1$
private static final String TAG_NAME = "tag"; //$NON-NLS-1$
// @BeforeClass
// public static void beforeClass() {
// startEMFStore();
// }
//
// @AfterClass
// public static void afterClass() {
// stopEMFStore();
// }
@Test
public void testProjectName() {
assertEquals("TestProject", getLocalProject().getProjectName()); //$NON-NLS-1$
}
@Test(expected = ESProjectNotSharedException.class)
public void testProjectID() {
// unshared projects have no project ID
assertNull(getLocalProject().getGlobalProjectId());
}
@Test(expected = RuntimeException.class)
public void testAddTag() throws ESException {
// a tag can not be created for an unshared project
getLocalProject().addTag(getLocalProject().getBaseVersion(), ESVersionSpec.FACTORY.createTAG(TAG_NAME, "test"), //$NON-NLS-1$
new NullProgressMonitor());
fail("Cannot add a tag!"); //$NON-NLS-1$
}
@Test
public void testIsShared() {
assertFalse(getLocalProject().isShared());
}
@Test(expected = ESProjectNotSharedException.class)
public void testCommit() throws ESException {
// can not commit an unshared project
getLocalProject().commit(new NullProgressMonitor());
fail(COMMIT_AN_UNSHARED_PROJECT_ERROR_MSG);
}
@Test(expected = ESProjectNotSharedException.class)
public void testCommit2() throws ESException {
// can not commit an unshared project
getLocalProject().commit("SomeLogMessage", null, new NullProgressMonitor()); //$NON-NLS-1$
fail(COMMIT_AN_UNSHARED_PROJECT_ERROR_MSG);
}
@Test(expected = ESProjectNotSharedException.class)
public void testGetBaseVersion() {
// unshared project has no base version
final ESPrimaryVersionSpec version = getLocalProject().getBaseVersion();
assertNull(version);
}
@Test(expected = ESProjectNotSharedException.class)
public void testGetBranches() throws ESException {
getLocalProject().getBranches(new NullProgressMonitor());
fail("Should not be able to getBranches from an unshared Project!"); //$NON-NLS-1$
}
@Test(expected = ESProjectNotSharedException.class)
public void testGetHistoryInfos() throws ESException {
final Player player = Create.player(ProjectChangeUtil.PLAYER_HANS_NAME);
Add.toProject(getLocalProject(), player);
ProjectUtil.addElement(getLocalProject(), player);
final ESModelElementId id = getLocalProject().getModelElementId(player);
final ESHistoryQuery<?> query = ESHistoryQuery.FACTORY.modelElementQuery(getLocalProject().getBaseVersion(),
id,
1, 0,
true,
true);
getLocalProject().getHistoryInfos(query, new NullProgressMonitor());
fail("Should not be able to getHistoryInfos from an unshared Project!"); //$NON-NLS-1$
}
@Test(expected = ESProjectNotSharedException.class)
public void testGetLastUpdated() {
// unshared project has no last updated date
final Date date = getLocalProject().getLastUpdated();
assertNull(date);
}
@Test(expected = ESProjectNotSharedException.class)
public void testGetRemoteProject() throws ESException {
final ESRemoteProject remoteProject = getLocalProject().getRemoteProject();
assertNull(remoteProject);
fail("Should not be able to getRemoteProject from an unshared Project!"); //$NON-NLS-1$
}
public void testGetUsersession() {
final ESUsersession session = getLocalProject().getUsersession();
assertNull(session);
}
@Test
public void testHasUncommitedChanges() {
assertFalse(getLocalProject().hasUncommitedChanges());
final Player player = Create.player();
Add.toProject(getLocalProject(), player);
assertTrue(getLocalProject().hasUncommitedChanges());
}
@Test
public void testHasUnsavedChanges() {
assertFalse(getLocalProject().hasUnsavedChanges());
final Player player = Create.player();
Add.toProject(getLocalProject(), player);
assertTrue(getLocalProject().hasUnsavedChanges());
getLocalProject().save();
assertFalse(getLocalProject().hasUnsavedChanges());
}
@Ignore
public void testImportLocalChanges() throws ESException {
// TODO: getLocalProject().importLocalChanges(fileName);
}
@Test(expected = ESProjectNotSharedException.class)
public void testIsUpdated() throws ESException {
getLocalProject().isUpdated();
fail("Should not be able to check update state of an unshared Project!"); //$NON-NLS-1$
}
// TODO: API does not support merging currently
// @Test(expected = RuntimeException.class)
// public void testMerge() throws ESException {
// getLocalProject().mergeBranch(getLocalProject().getBaseVersion(), new TestConflictResolver(false, 0),
// new NullProgressMonitor());
// fail("Should not be able to merge with head on an unshared Project!");
// }
//
// @Test(expected = RuntimeException.class)
// public void testMergeBranch() throws ESException {
// getLocalProject().mergeBranch(getLocalProject().getBaseVersion(),
// new TestConflictResolver(false, 0), new NullProgressMonitor());
//
// fail("Should not be able to merge with head on an unshared Project!");
// }
@Test(expected = RuntimeException.class)
public void testRemoveTag() throws ESException {
getLocalProject().removeTag(getLocalProject().getBaseVersion(),
ESVersionSpec.FACTORY.createTAG(TAG_NAME, BRANCH_NAME),
new NullProgressMonitor());
fail("Should not remove a tag from an unshared Project!"); //$NON-NLS-1$
}
@Test(expected = RuntimeException.class)
public void testResolveSpec() throws ESException {
getLocalProject().resolveVersionSpec(ESVersionSpec.FACTORY.createHEAD(), new NullProgressMonitor());
fail("Should not be able to resolve a version spec from an unshared Project!"); //$NON-NLS-1$
}
@Test
public void testRevert() {
final Player player1 = Create.player();
final Player player2 = Create.player();
final Player player3 = Create.player();
Add.toProject(getLocalProject(), player1);
Add.toProject(getLocalProject(), player2);
Add.toProject(getLocalProject(), player3);
assertTrue(getLocalProject().getAllModelElements().contains(player1));
assertTrue(getLocalProject().getAllModelElements().contains(player2));
assertTrue(getLocalProject().getAllModelElements().contains(player3));
getLocalProject().revert();
assertEquals(getLocalProject().getAllModelElements().size(), 0);
}
@Test
public void testUndoLastOperation() {
final Player player1 = Create.player();
final Player player2 = Create.player();
Add.toProject(getLocalProject(), player1);
Add.toProject(getLocalProject(), player2);
assertTrue(getLocalProject().getAllModelElements().contains(player1));
assertTrue(getLocalProject().getAllModelElements().contains(player2));
getLocalProject().undoLastOperation();
assertTrue(getLocalProject().getAllModelElements().contains(player1));
assertFalse(getLocalProject().getAllModelElements().contains(player2));
}
@Test
public void testUndoLastOperationsMore() {
final Player player = Create.player();
Add.toProject(getLocalProject(), player);
assertTrue(getLocalProject().getAllModelElements().contains(player));
getLocalProject().undoLastOperations(0);
assertTrue(getLocalProject().getAllModelElements().contains(player));
getLocalProject().undoLastOperations(1);
assertFalse(getLocalProject().getAllModelElements().contains(player));
getLocalProject().undoLastOperations(2);
}
@Test
public void testUndoLastOperations() {
final Player player1 = Create.player();
final Player player2 = Create.player();
final Player player3 = Create.player();
Add.toProject(getLocalProject(), player1);
Add.toProject(getLocalProject(), player2);
Add.toProject(getLocalProject(), player3);
assertTrue(getLocalProject().getAllModelElements().contains(player1));
assertTrue(getLocalProject().getAllModelElements().contains(player2));
assertTrue(getLocalProject().getAllModelElements().contains(player3));
getLocalProject().undoLastOperations(0);
assertTrue(getLocalProject().getAllModelElements().contains(player1));
assertTrue(getLocalProject().getAllModelElements().contains(player2));
assertTrue(getLocalProject().getAllModelElements().contains(player3));
getLocalProject().undoLastOperations(1);
assertTrue(getLocalProject().getAllModelElements().contains(player1));
assertTrue(getLocalProject().getAllModelElements().contains(player2));
assertFalse(getLocalProject().getAllModelElements().contains(player3));
getLocalProject().undoLastOperations(2);
assertFalse(getLocalProject().getAllModelElements().contains(player1));
assertFalse(getLocalProject().getAllModelElements().contains(player2));
assertFalse(getLocalProject().getAllModelElements().contains(player3));
}
@Test(expected = ESProjectNotSharedException.class)
public void testUpdate() throws ESException {
getLocalProject().update(new NullProgressMonitor());
fail(UPDATE_AN_UNSHARED_PROJECT_ERROR_MSG);
}
@Test(expected = ESProjectNotSharedException.class)
public void testUpdateVersion() throws ESException {
getLocalProject().update(getLocalProject().getBaseVersion(), null, new NullProgressMonitor());
fail(UPDATE_AN_UNSHARED_PROJECT_ERROR_MSG);
}
@Test(expected = ESProjectNotSharedException.class)
public void testUpdateVersionCallback() throws ESException {
getLocalProject().update(getLocalProject().getBaseVersion(), null, new NullProgressMonitor());
fail(UPDATE_AN_UNSHARED_PROJECT_ERROR_MSG);
}
@Test
public void testShare() {
try {
getLocalProject().shareProject(new NullProgressMonitor());
} catch (final ESException e) {
fail(e.getMessage());
}
}
@Test
public void testShareSession() {
try {
final ESServer server = ESServer.FACTORY.createServer("localhost", //$NON-NLS-1$
ServerUtil.defaultPort(),
KeyStoreManager.DEFAULT_CERTIFICATE);
final ESUsersession usersession = server.login("super", "super"); //$NON-NLS-1$ //$NON-NLS-2$
getLocalProject().shareProject(usersession, new NullProgressMonitor());
final ESRemoteProject remote = getLocalProject().getRemoteProject();
assertNotNull(remote);
} catch (final ESException e) {
fail(e.getMessage());
}
}
@Test
public void testGetterMethods() throws ESException {
final League league = Create.league(ProjectChangeUtil.LEAGUE_AMERICA_NAME);
final Player player1 = Create.player();
final Player player2 = Create.player();
Add.toProject(getLocalProject(), player1);
Add.toProject(getLocalProject(), player2);
RunESCommand.run(new Callable<Void>() {
public Void call() throws Exception {
league.getPlayers().add(player1);
league.getPlayers().add(player2);
getLocalProject().getModelElements().add(league);
return null;
}
});
assertEquals(3, getLocalProject().getAllModelElements().size());
assertEquals(1, getLocalProject().getModelElements().size());
assertEquals(2, getLocalProject().getAllModelElementsByClass(Player.class).size());
assertEquals(1, getLocalProject().getAllModelElementsByClass(League.class, true).size());
}
}