blob: 74aff3d8f9347c8269443db8f67756e528c237d4 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2015 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:
* Jonas Helming- initial API and implementation
******************************************************************************/
package org.eclipse.e4.tools.test;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import org.eclipse.e4.internal.tools.wizards.model.FragmentMergeHelper;
import org.eclipse.e4.ui.model.application.MApplicationElement;
import org.eclipse.e4.ui.model.application.commands.MCommand;
import org.eclipse.e4.ui.model.application.commands.MCommandsFactory;
import org.eclipse.e4.ui.model.application.commands.MHandler;
import org.eclipse.e4.ui.model.fragment.MFragmentFactory;
import org.eclipse.e4.ui.model.fragment.MModelFragments;
import org.eclipse.e4.ui.model.fragment.MStringModelFragment;
import org.junit.Before;
import org.junit.Test;
public class FragmentMergeHelperTest {
private static final String TESTID = "commandID"; //$NON-NLS-1$
private static final String OTHERTESTID = "anotherID"; //$NON-NLS-1$
private MModelFragments sourceFragments;
private MModelFragments targetFragments;
@Before
public void setUpFragments() {
sourceFragments = MFragmentFactory.INSTANCE.createModelFragments();
targetFragments = MFragmentFactory.INSTANCE.createModelFragments();
}
@Test
public void testMergeEmptyFragments() {
FragmentMergeHelper.merge(sourceFragments, targetFragments);
assertTrue(sourceFragments.getFragments().isEmpty());
assertTrue(targetFragments.getFragments().isEmpty());
}
@Test
public void testMergeHandlerWithoutCommandEmptyTarget() {
final MHandler existingHandler = addHandler(sourceFragments);
FragmentMergeHelper.merge(sourceFragments, targetFragments);
assertTrue(sourceFragments.getFragments().isEmpty());
final MApplicationElement handler = targetFragments.getFragments().get(0).getElements().get(0);
assertSame(existingHandler, handler);
}
private MHandler addHandler(MModelFragments sourceFragments) {
final MStringModelFragment modelFragment = MFragmentFactory.INSTANCE.createStringModelFragment();
final MHandler testHandler = MCommandsFactory.INSTANCE.createHandler();
modelFragment.getElements().add(testHandler);
sourceFragments.getFragments().add(modelFragment);
return testHandler;
}
private MCommand addCommandToImports(MModelFragments sourceFragments) {
final MCommand command = createCommand();
sourceFragments.getImports().add(command);
return command;
}
private MCommand createCommand() {
final MCommand command = MCommandsFactory.INSTANCE.createCommand();
command.setElementId(TESTID);
return command;
}
@Test
public void testMergeHandlerWithCommandEmptyTarget() {
final MHandler existingHandler = addHandler(sourceFragments);
final MCommand existingCommand = addCommandToImports(sourceFragments);
existingHandler.setCommand(existingCommand);
FragmentMergeHelper.merge(sourceFragments, targetFragments);
assertTrue(sourceFragments.getFragments().isEmpty());
final MHandler handler = (MHandler) targetFragments.getFragments().get(0).getElements().get(0);
assertSame(existingHandler, handler);
assertTrue(targetFragments.getImports().contains(existingCommand));
assertSame(existingCommand, handler.getCommand());
}
@Test
public void testMergeHandlerWithCommandExistingImport() {
final MHandler existingHandler = addHandler(sourceFragments);
final MCommand existingCommand = addCommandToImports(sourceFragments);
existingHandler.setCommand(existingCommand);
final MCommand existingImport = addCommandToImports(targetFragments);
FragmentMergeHelper.merge(sourceFragments, targetFragments);
assertTrue(sourceFragments.getFragments().isEmpty());
final MHandler handler = (MHandler) targetFragments.getFragments().get(0).getElements().get(0);
assertSame(existingHandler, handler);
assertFalse(targetFragments.getImports().contains(existingCommand));
assertTrue(targetFragments.getImports().contains(existingImport));
assertSame(existingImport, handler.getCommand());
}
@Test
public void testMergeCommandWithExistingImport() {
final MCommand existingCommand = addCommand(sourceFragments);
final MHandler existingHandler = addHandler(targetFragments);
final MCommand existingImport = addCommandToImports(targetFragments);
existingHandler.setCommand(existingImport);
FragmentMergeHelper.merge(sourceFragments, targetFragments);
assertTrue(sourceFragments.getFragments().isEmpty());
final MHandler handler = (MHandler) targetFragments.getFragments().get(0).getElements().get(0);
final MCommand command = (MCommand) targetFragments.getFragments().get(1).getElements().get(0);
assertSame(existingCommand, command);
assertSame(command, handler.getCommand());
assertSame(existingHandler, handler);
assertTrue(targetFragments.getImports().isEmpty());
}
private MCommand addCommand(MModelFragments fragments) {
final MStringModelFragment modelFragment = MFragmentFactory.INSTANCE.createStringModelFragment();
final MCommand command = createCommand();
modelFragment.getElements().add(command);
sourceFragments.getFragments().add(modelFragment);
return command;
}
@Test
public void testhaveSameIDWithFirstNullID(){
final MApplicationElement firstElement = MCommandsFactory.INSTANCE.createCommand();
final MApplicationElement secondElement = MCommandsFactory.INSTANCE.createCommand();
firstElement.setElementId(null);
secondElement.setElementId(TESTID);
assertFalse(FragmentMergeHelper.haveSameID(firstElement, secondElement));
}
@Test
public void testhaveSameIDWithSecondNullID(){
final MApplicationElement firstElement = MCommandsFactory.INSTANCE.createCommand();
final MApplicationElement secondElement = MCommandsFactory.INSTANCE.createCommand();
firstElement.setElementId(TESTID);
secondElement.setElementId(null);
assertFalse(FragmentMergeHelper.haveSameID(firstElement, secondElement));
}
@Test
public void testhaveSameIDWithBothNullID(){
final MApplicationElement firstElement = MCommandsFactory.INSTANCE.createCommand();
final MApplicationElement secondElement = MCommandsFactory.INSTANCE.createCommand();
firstElement.setElementId(null);
secondElement.setElementId(null);
assertFalse(FragmentMergeHelper.haveSameID(firstElement, secondElement));
}
@Test
public void testhaveSameIDWithFirstEmptyID(){
final MApplicationElement firstElement = MCommandsFactory.INSTANCE.createCommand();
final MApplicationElement secondElement = MCommandsFactory.INSTANCE.createCommand();
firstElement.setElementId(""); //$NON-NLS-1$
secondElement.setElementId(TESTID);
assertFalse(FragmentMergeHelper.haveSameID(firstElement, secondElement));
}
@Test
public void testhaveSameIDWithSecondEmptyID(){
final MApplicationElement firstElement = MCommandsFactory.INSTANCE.createCommand();
final MApplicationElement secondElement = MCommandsFactory.INSTANCE.createCommand();
firstElement.setElementId(TESTID);
secondElement.setElementId(""); //$NON-NLS-1$
assertFalse(FragmentMergeHelper.haveSameID(firstElement, secondElement));
}
@Test
public void testhaveSameIDWithBothEmptyID(){
final MApplicationElement firstElement = MCommandsFactory.INSTANCE.createCommand();
final MApplicationElement secondElement = MCommandsFactory.INSTANCE.createCommand();
firstElement.setElementId(""); //$NON-NLS-1$
secondElement.setElementId(""); //$NON-NLS-1$
assertFalse(FragmentMergeHelper.haveSameID(firstElement, secondElement));
}
@Test
public void testhaveSameIDWithEqualID(){
final MApplicationElement firstElement = MCommandsFactory.INSTANCE.createCommand();
final MApplicationElement secondElement = MCommandsFactory.INSTANCE.createCommand();
firstElement.setElementId(TESTID);
secondElement.setElementId(TESTID);
assertTrue(FragmentMergeHelper.haveSameID(firstElement, secondElement));
}
@Test
public void testhaveSameIDWithNonEqualID(){
final MApplicationElement firstElement = MCommandsFactory.INSTANCE.createCommand();
final MApplicationElement secondElement = MCommandsFactory.INSTANCE.createCommand();
firstElement.setElementId(TESTID);
secondElement.setElementId(OTHERTESTID);
assertFalse(FragmentMergeHelper.haveSameID(firstElement, secondElement));
}
}