Skip to content

Package: EMFDeleteSerivceImpl_PTest

EMFDeleteSerivceImpl_PTest

nameinstructionbranchcomplexitylinemethod
EMFDeleteSerivceImpl_PTest()
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%
canRemoveElement_containment()
M: 0 C: 33
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 6
100%
M: 0 C: 1
100%
canRemoveElement_crossReferenced()
M: 0 C: 15
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 3
100%
M: 0 C: 1
100%
canRemoveElement_crossReferenced_readOnly()
M: 0 C: 48
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 9
100%
M: 0 C: 1
100%
canRemoveElement_notReferenced()
M: 0 C: 22
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 4
100%
M: 0 C: 1
100%
setUp()
M: 0 C: 158
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 28
100%
M: 0 C: 1
100%
testCanDeleteElement()
M: 0 C: 27
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 4
100%
M: 0 C: 1
100%
testCanDeleteElements()
M: 0 C: 39
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 5
100%
M: 0 C: 1
100%
testCanDeleteNoEditingDomain()
M: 0 C: 52
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 10
100%
M: 0 C: 1
100%
testDeleteElement()
M: 0 C: 52
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 9
100%
M: 0 C: 1
100%
testDeleteElementNoChildOfParentReference()
M: 0 C: 42
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 10
100%
M: 0 C: 1
100%
testDeleteElements()
M: 0 C: 51
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 7
100%
M: 0 C: 1
100%
testRemove_noEditingDomain()
M: 0 C: 44
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 10
100%
M: 0 C: 1
100%

Coverage

1: /*******************************************************************************
2: * Copyright (c) 2011-2020 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: * jfaltermeier - initial API and implementation
13: * Christian W. Damus - bugs 552385, 559267
14: ******************************************************************************/
15: package org.eclipse.emf.ecp.edit.internal.swt.util;
16:
17: import static org.hamcrest.CoreMatchers.is;
18: import static org.hamcrest.MatcherAssert.assertThat;
19: import static org.junit.Assert.assertEquals;
20: import static org.junit.Assert.assertNull;
21: import static org.junit.Assert.assertSame;
22: import static org.junit.Assert.assertTrue;
23: import static org.mockito.Mockito.mock;
24: import static org.mockito.Mockito.when;
25:
26: import java.util.Arrays;
27: import java.util.Collection;
28: import java.util.HashMap;
29:
30: import org.eclipse.emf.common.command.BasicCommandStack;
31: import org.eclipse.emf.common.command.Command;
32: import org.eclipse.emf.common.command.UnexecutableCommand;
33: import org.eclipse.emf.common.util.URI;
34: import org.eclipse.emf.ecore.EObject;
35: import org.eclipse.emf.ecore.resource.Resource;
36: import org.eclipse.emf.ecore.resource.ResourceSet;
37: import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
38: import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
39: import org.eclipse.emf.ecp.edit.spi.ConditionalDeleteService;
40: import org.eclipse.emf.ecp.edit.spi.EMFDeleteServiceImpl;
41: import org.eclipse.emf.ecp.test.university.Address;
42: import org.eclipse.emf.ecp.test.university.Professor;
43: import org.eclipse.emf.ecp.test.university.UniversityFactory;
44: import org.eclipse.emf.ecp.view.spi.context.ViewModelContext;
45: import org.eclipse.emf.edit.command.OverrideableCommand;
46: import org.eclipse.emf.edit.command.RemoveCommand;
47: import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
48: import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
49: import org.eclipse.emf.emfstore.bowling.BowlingFactory;
50: import org.eclipse.emf.emfstore.bowling.BowlingPackage;
51: import org.eclipse.emf.emfstore.bowling.Game;
52: import org.eclipse.emf.emfstore.bowling.League;
53: import org.eclipse.emf.emfstore.bowling.Player;
54: import org.eclipse.emf.emfstore.bowling.Tournament;
55: import org.junit.Before;
56: import org.junit.Test;
57:
58: /**
59: * @author jfaltermeier
60: *
61: */
62: @SuppressWarnings("nls")
63: public class EMFDeleteSerivceImpl_PTest {
64:
65:         private ConditionalDeleteService deleteService;
66:         private AdapterFactoryEditingDomain domain;
67:         private ViewModelContext context;
68:         private Resource resource;
69:         private League league;
70:         private Game game;
71:         private Player player1;
72:         private Player player2;
73:         private Player player3;
74:         private Tournament tournament;
75:
76:         private EObject denyDeletion;
77:
78:         @Before
79:         public void setUp() {
80:                 final ResourceSet resourceSet = new ResourceSetImpl();
81:                 resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("*", new XMIResourceFactoryImpl()); //$NON-NLS-1$
82:                 domain = new AdapterFactoryEditingDomain(
83:                         new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE),
84:                         new BasicCommandStack(), resourceSet) {
85:
86:                         @Override
87:                         public Command createOverrideCommand(OverrideableCommand command) {
88:                                 if (denyDeletion != null && command instanceof RemoveCommand
89:                                         && ((RemoveCommand) command).getCollection().contains(denyDeletion)) {
90:                                         return UnexecutableCommand.INSTANCE;
91:                                 }
92:                                 return super.createOverrideCommand(command);
93:                         }
94:                 };
95:                 resourceSet.eAdapters().add(new AdapterFactoryEditingDomain.EditingDomainProvider(domain));
96:                 resource = resourceSet.createResource(URI.createURI("VIRTUAL_URI")); //$NON-NLS-1$
97:
98:                 league = BowlingFactory.eINSTANCE.createLeague();
99:                 game = BowlingFactory.eINSTANCE.createGame();
100:                 tournament = BowlingFactory.eINSTANCE.createTournament();
101:
102:                 resource.getContents().add(league);
103:                 resource.getContents().add(game);
104:                 resource.getContents().add(tournament);
105:
106:                 player1 = BowlingFactory.eINSTANCE.createPlayer();
107:                 player2 = BowlingFactory.eINSTANCE.createPlayer();
108:                 player3 = BowlingFactory.eINSTANCE.createPlayer();
109:                 league.getPlayers().add(player1);
110:                 league.getPlayers().add(player2);
111:                 league.getPlayers().add(player3);
112:                 tournament.getPlayers().add(player1);
113:                 tournament.getPlayers().add(player2);
114:                 tournament.getPlayers().add(player3);
115:
116:                 game.setPlayer(player1);
117:
118:                 deleteService = new EMFDeleteServiceImpl();
119:                 context = mock(ViewModelContext.class);
120:                 when(context.getDomainModel()).thenReturn(league);
121:                 deleteService.instantiate(context);
122:         }
123:
124:         @Test
125:         public void testDeleteElements() {
126:                 /* act */
127:                 deleteService.deleteElements(Arrays.asList(Object.class.cast(player1), player2));
128:
129:                 /* assert */
130:                 assertEquals(1, league.getPlayers().size());
131:                 assertTrue(league.getPlayers().contains(player3));
132:                 assertEquals(1, tournament.getPlayers().size());
133:                 assertTrue(tournament.getPlayers().contains(player3));
134:                 assertNull(game.getPlayer());
135:
136:         }
137:
138:         @Test
139:         public void testDeleteElement() {
140:                 /* act */
141:                 deleteService.deleteElement(player1);
142:
143:                 /* assert */
144:                 assertEquals(2, league.getPlayers().size());
145:                 assertTrue(league.getPlayers().contains(player2));
146:                 assertTrue(league.getPlayers().contains(player3));
147:                 assertEquals(2, tournament.getPlayers().size());
148:                 assertTrue(tournament.getPlayers().contains(player2));
149:                 assertTrue(tournament.getPlayers().contains(player3));
150:                 assertNull(game.getPlayer());
151:         }
152:
153:         @Test
154:         public void testDeleteElementNoChildOfParentReference() {
155:                 // setup
156:                 final Professor professor = UniversityFactory.eINSTANCE.createProfessor();
157:                 final Address address1 = UniversityFactory.eINSTANCE.createAddress();
158:                 final Address address2 = UniversityFactory.eINSTANCE.createAddress();
159:                 professor.getAddresses().add(address1);
160:                 professor.getAddresses().add(address2);
161:                 resource.getContents().add(professor);
162:
163:                 // act
164:                 deleteService.deleteElement(address2);
165:
166:                 // assert
167:                 assertEquals(1, professor.getAddresses().size());
168:                 assertSame(address1, professor.getAddresses().get(0));
169:         }
170:
171:         @Test
172:         public void testCanDeleteElement() {
173:                 assertThat("can delete returns false", deleteService.canDelete(player1), is(true));
174:
175:                 denyDeletion = player1;
176:                 assertThat("can delete returns true", deleteService.canDelete(player1), is(false));
177:         }
178:
179:         @Test
180:         public void testCanDeleteElements() {
181:                 final Collection<?> objects = Arrays.asList(player1, player2);
182:
183:                 assertThat("can delete returns false", deleteService.canDelete(objects), is(true));
184:
185:                 denyDeletion = player2; // Not the first one
186:                 assertThat("can delete returns true", deleteService.canDelete(objects), is(false));
187:         }
188:
189:         @Test
190:         public void testCanDeleteNoEditingDomain() {
191:                 // Disconnect everything from the editing domain
192:                 resource.getContents().clear();
193:                 resource.getResourceSet().eAdapters().clear();
194:                 resource.getResourceSet().getResources().clear();
195:                 resource.unload();
196:                 resource.eAdapters().clear();
197:
198:                 // Re-initialize to forget the editing domain
199:                 deleteService.dispose();
200:                 deleteService.instantiate(context);
201:
202:                 assertThat("cannot delete a contained object", deleteService.canDelete(player1), is(true));
203:
204:                 assertThat("can delete a root object", deleteService.canDelete(league), is(false));
205:         }
206:
207:         @Test
208:         public void canRemoveElement_containment() {
209:                 assertThat("can delete returns false",
210:                         deleteService.canRemove(league, BowlingPackage.Literals.LEAGUE__PLAYERS, player1), is(true));
211:
212:                 denyDeletion = player1;
213:                 assertThat("can delete returns true",
214:                         deleteService.canRemove(league, BowlingPackage.Literals.LEAGUE__PLAYERS, player1), is(false));
215:         }
216:
217:         @Test
218:         public void canRemoveElement_crossReferenced() {
219:                 assertThat("cannot remove a referenced object",
220:                         deleteService.canRemove(tournament, BowlingPackage.Literals.TOURNAMENT__PLAYERS, player1), is(true));
221:         }
222:
223:         @Test
224:         public void canRemoveElement_notReferenced() {
225:                 tournament.getPlayers().remove(player3);
226:
227:                 assertThat("cannot remove a referenced object",
228:                         deleteService.canRemove(tournament, BowlingPackage.Literals.TOURNAMENT__PLAYERS, player3), is(false));
229:         }
230:
231:         @Test
232:         public void canRemoveElement_crossReferenced_readOnly() {
233:                 final Resource readOnly = resource.getResourceSet().createResource(URI.createURI("READ_ONLY"));
234:                 final League others = BowlingFactory.eINSTANCE.createLeague();
235:                 others.setName("The Others");
236:                 others.getPlayers().add(player3);
237:                 domain.setResourceToReadOnlyMap(new HashMap<>());
238:                 domain.getResourceToReadOnlyMap().put(readOnly, true);
239:
240:                 assertThat("cannot remove a referenced object",
241:                         deleteService.canRemove(tournament, BowlingPackage.Literals.TOURNAMENT__PLAYERS, player3), is(true));
242:         }
243:
244:         @Test
245:         public void testRemove_noEditingDomain() {
246:                 // Disconnect everything from the editing domain
247:                 resource.getContents().clear();
248:                 resource.getResourceSet().eAdapters().clear();
249:                 resource.getResourceSet().getResources().clear();
250:                 resource.unload();
251:                 resource.eAdapters().clear();
252:
253:                 // Re-initialize to forget the editing domain
254:                 deleteService.dispose();
255:                 deleteService.instantiate(context);
256:
257:                 assertThat("cannot remove a referenced object",
258:                         deleteService.canRemove(tournament, BowlingPackage.Literals.TOURNAMENT__PLAYERS, player1), is(true));
259:         }
260:
261: }