Skip to content

Package: MultiSegmentChildDmrOpenInNewContextStrategyProvider_PTest$OpenChildDmrTestProvider

MultiSegmentChildDmrOpenInNewContextStrategyProvider_PTest$OpenChildDmrTestProvider

nameinstructionbranchcomplexitylinemethod
MultiSegmentChildDmrOpenInNewContextStrategyProvider_PTest.OpenChildDmrTestProvider(MultiSegmentChildDmrOpenInNewContextStrategyProvider_PTest)
M: 0 C: 6
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
isSegmentToolingEnabled()
M: 0 C: 3
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
setSegmentToolingEnabled(boolean)
M: 0 C: 4
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 2
100%
M: 0 C: 1
100%

Coverage

1: /*******************************************************************************
2: * Copyright (c) 2011-2019 EclipseSource Muenchen GmbH and others.
3: *
4: * All rights reserved. This program and the accompanying materials
5: * are made available under the terms of the Eclipse Public License 2.0
6: * which accompanies this distribution, and is available at
7: * https://www.eclipse.org/legal/epl-2.0/
8: *
9: * SPDX-License-Identifier: EPL-2.0
10: *
11: * Contributors:
12: * Lucas Koehler - initial API and implementation
13: ******************************************************************************/
14: package org.eclipse.emfforms.internal.view.multisegment.tooling;
15:
16: import static org.junit.Assert.assertEquals;
17: import static org.junit.Assert.assertFalse;
18: import static org.junit.Assert.assertNotNull;
19: import static org.junit.Assert.assertTrue;
20: import static org.mockito.Matchers.any;
21: import static org.mockito.Mockito.mock;
22: import static org.mockito.Mockito.times;
23: import static org.mockito.Mockito.verify;
24: import static org.mockito.Mockito.when;
25:
26: import org.eclipse.emf.common.util.EList;
27: import org.eclipse.emf.databinding.IEMFValueProperty;
28: import org.eclipse.emf.ecore.EObject;
29: import org.eclipse.emf.ecore.EReference;
30: import org.eclipse.emf.ecore.EcorePackage;
31: import org.eclipse.emf.ecp.test.common.MultiTry;
32: import org.eclipse.emf.ecp.test.common.MultiTryTestRule;
33: import org.eclipse.emf.ecp.ui.view.swt.reference.OpenInNewContextStrategy;
34: import org.eclipse.emf.ecp.view.spi.model.VDomainModelReference;
35: import org.eclipse.emf.ecp.view.spi.model.VViewFactory;
36: import org.eclipse.emf.ecp.view.test.common.swt.spi.SWTTestUtil;
37: import org.eclipse.emfforms.internal.view.multisegment.tooling.MultiSegmentChildDmrOpenInNewContextStrategyProvider_PTest.OpenChildDmrTestProvider;
38: import org.eclipse.emfforms.spi.common.report.AbstractReport;
39: import org.eclipse.emfforms.spi.common.report.ReportService;
40: import org.eclipse.emfforms.spi.core.services.databinding.DatabindingFailedException;
41: import org.eclipse.emfforms.spi.core.services.databinding.emf.EMFFormsDatabindingEMF;
42: import org.eclipse.emfforms.view.spi.multisegment.model.VMultisegmentPackage;
43: import org.eclipse.swt.widgets.Button;
44: import org.eclipse.swt.widgets.Display;
45: import org.eclipse.swt.widgets.Shell;
46: import org.eclipse.swt.widgets.Tree;
47: import org.eclipse.swtbot.swt.finder.SWTBot;
48: import org.eclipse.swtbot.swt.finder.finders.UIThreadRunnable;
49: import org.junit.Rule;
50: import org.junit.Test;
51:
52: /**
53: * Tests for {@link MultiSegmentChildDmrOpenInNewContextStrategyProvider}.
54: *
55: * @author Lucas Koehler
56: */
57: public class MultiSegmentChildDmrOpenInNewContextStrategyProvider_PTest
58:         extends AbstractMultiSegmentChildDmrStrategyProviderTest<OpenChildDmrTestProvider> {
59:
60:         @Rule
61:         public final MultiTryTestRule multiTryRule = new MultiTryTestRule(3, false);
62:
63:         private ReportService reportService;
64:         private EMFFormsDatabindingEMF databinding;
65:
66:         @Override
67:         protected void initStrategyProvider() {
68:                 setStrategyProvider(new OpenChildDmrTestProvider());
69:                 reportService = mock(ReportService.class);
70:                 databinding = mock(EMFFormsDatabindingEMF.class);
71:                 getStrategyProvider().setReportService(reportService);
72:                 getStrategyProvider().setEMFFormsDatabinding(databinding);
73:         }
74:
75:         @Override
76:         protected boolean executeHandles(EObject owner, EReference reference) {
77:                 return getStrategyProvider().handles(owner, reference);
78:         }
79:
80:         @Test
81:         @MultiTry
82:         public void strategy() throws DatabindingFailedException, InterruptedException {
83:                 final OpenInNewContextStrategy strategy = getStrategyProvider().createOpenInNewContextStrategy();
84:                 assertNotNull(strategy);
85:
86:                 final VDomainModelReference editDmr = VViewFactory.eINSTANCE.createDomainModelReference();
87:                 final EList<VDomainModelReference> childDmrs = getMultiSegment().getChildDomainModelReferences();
88:                 childDmrs.add(editDmr);
89:
90:                 // mock databinding
91:                 final IEMFValueProperty valueProperty = mock(IEMFValueProperty.class);
92:                 when(valueProperty.getValueType()).thenReturn(EcorePackage.Literals.ECLASS__ESTRUCTURAL_FEATURES);
93:                 when(databinding.getValueProperty(getParentDmr(), EcorePackage.Literals.ECLASS))
94:                         .thenReturn(valueProperty);
95:
96:                 final Boolean[] result = new Boolean[1];
97:                 UIThreadRunnable.asyncExec(() -> {
98:                         result[0] = strategy.openInNewContext(getMultiSegment(),
99:                                 VMultisegmentPackage.Literals.MULTI_DOMAIN_MODEL_REFERENCE_SEGMENT__CHILD_DOMAIN_MODEL_REFERENCES,
100:                                 editDmr);
101:                 });
102:
103:                 StrategyTestUtil.waitForShell("Edit Child Domain Model Reference"); //$NON-NLS-1$
104:
105:                 UIThreadRunnable.syncExec(() -> {
106:                         final Shell wShell = Display.getDefault().getActiveShell();
107:                         final Tree tree = SWTTestUtil.findControl(wShell, 0, Tree.class);
108:                         SWTTestUtil.selectTreeItem(tree, 0);
109:                         final Button finish = SWTTestUtil.findControl(wShell, 4, Button.class);
110:                         SWTTestUtil.clickButton(finish);
111:                 });
112:
113:                 final Boolean strategyResult = StrategyTestUtil.waitUntilNotNull(result);
114:                 assertTrue(strategyResult);
115:                 assertFalse(childDmrs.contains(editDmr));
116:                 assertEquals(1, childDmrs.size());
117:                 assertEquals("Number of created segments", 1, childDmrs.get(0).getSegments().size()); //$NON-NLS-1$
118:         }
119:
120:         @Test
121:         @MultiTry
122:         public void strategy_cancel() throws DatabindingFailedException, InterruptedException {
123:                 final OpenInNewContextStrategy strategy = getStrategyProvider().createOpenInNewContextStrategy();
124:                 assertNotNull(strategy);
125:
126:                 final VDomainModelReference editDmr = VViewFactory.eINSTANCE.createDomainModelReference();
127:                 final EList<VDomainModelReference> childDmrs = getMultiSegment().getChildDomainModelReferences();
128:                 childDmrs.add(editDmr);
129:
130:                 // mock databinding
131:                 final IEMFValueProperty valueProperty = mock(IEMFValueProperty.class);
132:                 when(valueProperty.getValueType()).thenReturn(EcorePackage.Literals.ECLASS__ESTRUCTURAL_FEATURES);
133:                 when(databinding.getValueProperty(getParentDmr(), EcorePackage.Literals.ECLASS))
134:                         .thenReturn(valueProperty);
135:
136:                 final Boolean[] result = new Boolean[1];
137:                 UIThreadRunnable.asyncExec(() -> {
138:                         result[0] = strategy.openInNewContext(getMultiSegment(),
139:                                 VMultisegmentPackage.Literals.MULTI_DOMAIN_MODEL_REFERENCE_SEGMENT__CHILD_DOMAIN_MODEL_REFERENCES,
140:                                 editDmr);
141:                 });
142:
143:                 StrategyTestUtil.waitForShell("Edit Child Domain Model Reference"); //$NON-NLS-1$
144:
145:                 UIThreadRunnable.syncExec(() -> {
146:                         final SWTBot bot = new SWTBot();
147:                         final Shell wShell = bot.activeShell().widget;
148:                         final Tree tree = SWTTestUtil.findControl(wShell, 0, Tree.class);
149:                         SWTTestUtil.selectTreeItem(tree, 0);
150:                         bot.button("Cancel").click(); //$NON-NLS-1$
151:                         if (!wShell.isDisposed()) {
152:                                 wShell.dispose();
153:                         }
154:                 });
155:
156:                 final Boolean strategyResult = StrategyTestUtil.waitUntilNotNull(result);
157:                 assertTrue(strategyResult);
158:                 assertTrue(childDmrs.contains(editDmr));
159:                 assertEquals(1, childDmrs.size());
160:                 assertEquals("Cancel should not change the dmr", 0, childDmrs.get(0).getSegments().size()); //$NON-NLS-1$
161:         }
162:
163:         @Test
164:         @MultiTry
165:         public void strategy_databindingFailed() throws DatabindingFailedException, InterruptedException {
166:                 final OpenInNewContextStrategy strategy = getStrategyProvider().createOpenInNewContextStrategy();
167:                 assertNotNull(strategy);
168:
169:                 final VDomainModelReference editDmr = VViewFactory.eINSTANCE.createDomainModelReference();
170:                 final EList<VDomainModelReference> childDmrs = getMultiSegment().getChildDomainModelReferences();
171:                 childDmrs.add(editDmr);
172:
173:                 // mock databinding
174:                 final IEMFValueProperty valueProperty = mock(IEMFValueProperty.class);
175:                 when(valueProperty.getValueType()).thenReturn(EcorePackage.Literals.ECLASS__ESTRUCTURAL_FEATURES);
176:                 when(databinding.getValueProperty(getParentDmr(), EcorePackage.Literals.ECLASS))
177:                         .thenThrow(new DatabindingFailedException("Test")); //$NON-NLS-1$
178:
179:                 final Boolean[] result = new Boolean[1];
180:                 UIThreadRunnable.asyncExec(() -> {
181:                         result[0] = strategy.openInNewContext(getMultiSegment(),
182:                                 VMultisegmentPackage.Literals.MULTI_DOMAIN_MODEL_REFERENCE_SEGMENT__CHILD_DOMAIN_MODEL_REFERENCES,
183:                                 editDmr);
184:                 });
185:
186:                 final Boolean strategyResult = StrategyTestUtil.waitUntilNotNull(result);
187:                 assertFalse(strategyResult);
188:                 verify(reportService, times(1)).report(any(AbstractReport.class));
189:                 assertTrue(childDmrs.contains(editDmr));
190:                 assertEquals(1, childDmrs.size());
191:                 assertEquals("Failed databinding should not change the dmr", 0, childDmrs.get(0).getSegments().size()); //$NON-NLS-1$
192:         }
193:
194:         /** Allows to mock the segment tooling enabled flag without the need to provide a runtime parameter. */
195:         class OpenChildDmrTestProvider extends MultiSegmentChildDmrOpenInNewContextStrategyProvider
196:                 implements TestableStrategyProvider {
197:                 private boolean segmentToolingEnabled;
198:
199:                 /**
200:                  * @param segmentToolingEnabled true to enable segment mode
201:                  */
202:                 @Override
203:                 public void setSegmentToolingEnabled(boolean segmentToolingEnabled) {
204:                         this.segmentToolingEnabled = segmentToolingEnabled;
205:                 }
206:
207:                 @Override
208:                 boolean isSegmentToolingEnabled() {
209:                         return segmentToolingEnabled;
210:                 }
211:         }
212: }