blob: bd1d70a413011c180aca11ace11b1f06f0484228 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2011-2019 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 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Lucas Koehler - initial API and implementation
******************************************************************************/
package org.eclipse.emf.ecp.view.template.internal.tooling.controls;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import org.eclipse.emf.common.command.BasicCommandStack;
import org.eclipse.emf.common.notify.AdapterFactory;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EcoreFactory;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
import org.eclipse.emf.ecp.test.common.MultiTryTestRule;
import org.eclipse.emf.ecp.view.spi.context.ViewModelContext;
import org.eclipse.emf.ecp.view.spi.model.VControl;
import org.eclipse.emf.ecp.view.spi.model.VDomainModelReference;
import org.eclipse.emf.ecp.view.spi.model.VFeatureDomainModelReferenceSegment;
import org.eclipse.emf.ecp.view.spi.model.VViewFactory;
import org.eclipse.emf.ecp.view.spi.renderer.NoPropertyDescriptorFoundExeption;
import org.eclipse.emf.ecp.view.spi.renderer.NoRendererFoundException;
import org.eclipse.emf.ecp.view.template.selector.domainmodelreference.model.VTDomainModelReferenceSelector;
import org.eclipse.emf.ecp.view.template.selector.domainmodelreference.model.VTDomainmodelreferenceFactory;
import org.eclipse.emf.ecp.view.template.selector.domainmodelreference.model.VTDomainmodelreferencePackage;
import org.eclipse.emf.ecp.view.test.common.swt.spi.DatabindingClassRunner;
import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
import org.eclipse.emf.edit.domain.EditingDomain;
import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
import org.eclipse.emf.edit.provider.ReflectiveItemProviderAdapterFactory;
import org.eclipse.emfforms.spi.common.report.ReportService;
import org.eclipse.emfforms.spi.core.services.databinding.emf.EMFFormsDatabindingEMF;
import org.eclipse.emfforms.spi.swt.core.layout.SWTGridCell;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
/**
* Tests for {@link DmrSelectorSegmentDmrControlSWTRenderer}.
*
* @author Lucas Koehler
*
*/
@RunWith(DatabindingClassRunner.class)
public class DmrSelectorSegmentDmrControlSWTRenderer_PTest {
// Allow two tries because Jenkins CI might fail on the first run of the first test case
@Rule
public final MultiTryTestRule multiTryRule = new MultiTryTestRule(2);
private DmrSelectorSegmentDmrControlSWTRenderer renderer;
private VTDomainModelReferenceSelector domainObject;
private EMFFormsDatabindingEMF databinding;
@Before
public void setUp() throws NoRendererFoundException, NoPropertyDescriptorFoundExeption {
final VControl vControl = mock(VControl.class);
domainObject = VTDomainmodelreferenceFactory.eINSTANCE.createDomainModelReferenceSelector();
final VDomainModelReference dmr = VViewFactory.eINSTANCE.createDomainModelReference();
final VFeatureDomainModelReferenceSegment segment = VViewFactory.eINSTANCE
.createFeatureDomainModelReferenceSegment();
segment.setDomainModelFeature(
VTDomainmodelreferencePackage.Literals.DOMAIN_MODEL_REFERENCE_SELECTOR__DOMAIN_MODEL_REFERENCE.getName());
dmr.getSegments().add(segment);
when(vControl.getDomainModelReference()).thenReturn(dmr);
final ViewModelContext viewContext = mock(ViewModelContext.class);
when(viewContext.getDomainModel()).thenReturn(domainObject);
final ReportService reportService = mock(ReportService.class);
databinding = mock(EMFFormsDatabindingEMF.class);
// Add domain object to resource with editing domain
final ResourceSet rs = new ResourceSetImpl();
final ComposedAdapterFactory adapterFactory = new ComposedAdapterFactory(new AdapterFactory[] {
new ReflectiveItemProviderAdapterFactory(),
new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE) });
final AdapterFactoryEditingDomain editingDomain = new AdapterFactoryEditingDomain(
adapterFactory, new BasicCommandStack(), rs);
rs.eAdapters().add(new AdapterFactoryEditingDomain.EditingDomainProvider(editingDomain));
final Resource resource = rs.createResource(URI.createURI("VIRTUAL_URI")); //$NON-NLS-1$
resource.getContents().add(domainObject);
renderer = new DmrSelectorSegmentDmrControlSWTRenderer(vControl, viewContext, reportService, databinding);
// Render
final Shell shell = new Shell(Display.getDefault());
renderer.init();
renderer.render(new SWTGridCell(0, 2, renderer), shell);
renderer.finalizeRendering(shell);
}
/** Test that the dmr and root EClass are set with a proper compound command. */
@Test
public void setDmrAndRootEClass() {
final EditingDomain editingDomain = AdapterFactoryEditingDomain.getEditingDomainFor(domainObject);
editingDomain.getCommandStack().flush();
final VDomainModelReference dmr = VViewFactory.eINSTANCE.createDomainModelReference();
final EClass rootEClass = EcoreFactory.eINSTANCE.createEClass();
renderer.setDmrAndRootEClass(domainObject, dmr, rootEClass);
assertSame(dmr, domainObject.getDomainModelReference());
assertSame(rootEClass, domainObject.getRootEClass());
assertTrue(editingDomain.getCommandStack().canUndo());
editingDomain.getCommandStack().undo();
assertNull(domainObject.getDomainModelReference());
assertNull(domainObject.getRootEClass());
assertFalse(editingDomain.getCommandStack().canUndo());
assertTrue(editingDomain.getCommandStack().canRedo());
}
}