Skip to content

Package: TableControlSWTBot_PTest

TableControlSWTBot_PTest

nameinstructionbranchcomplexitylinemethod
TableControlSWTBot_PTest(boolean)
M: 0 C: 6
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 3
100%
M: 0 C: 1
100%
addEditingDomain(ResourceSet)
M: 0 C: 43
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 8
100%
M: 0 C: 1
100%
afterClass()
M: 1 C: 24
96%
M: 1 C: 1
50%
M: 1 C: 1
50%
M: 0 C: 3
100%
M: 0 C: 1
100%
assertions(double, double)
M: 2 C: 86
98%
M: 2 C: 4
67%
M: 2 C: 2
50%
M: 0 C: 20
100%
M: 0 C: 1
100%
createDomainObject()
M: 45 C: 67
60%
M: 1 C: 5
83%
M: 1 C: 3
75%
M: 11 C: 20
65%
M: 0 C: 1
100%
createPlayer()
M: 0 C: 49
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 14
100%
M: 0 C: 1
100%
createTableControl(VView)
M: 0 C: 71
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 23
100%
M: 0 C: 1
100%
createView()
M: 0 C: 18
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 5
100%
M: 0 C: 1
100%
data()
M: 0 C: 33
100%
M: 0 C: 2
100%
M: 0 C: 2
100%
M: 0 C: 5
100%
M: 0 C: 1
100%
logic()
M: 0 C: 145
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 37
100%
M: 0 C: 1
100%

Coverage

1: /*******************************************************************************
2: * Copyright (c) 2011-2013 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: * Johannes Faltermeier - initial API and implementation
13: ******************************************************************************/
14: package org.eclipse.emf.ecp.view.ui.editor.test.controls;
15:
16: import static org.eclipse.swtbot.swt.finder.matchers.WidgetMatcherFactory.widgetOfType;
17:
18: import java.math.BigDecimal;
19: import java.util.ArrayList;
20: import java.util.Calendar;
21: import java.util.Collection;
22: import java.util.Date;
23: import java.util.List;
24:
25: import org.eclipse.emf.common.command.BasicCommandStack;
26: import org.eclipse.emf.common.notify.AdapterFactory;
27: import org.eclipse.emf.common.util.URI;
28: import org.eclipse.emf.ecore.EObject;
29: import org.eclipse.emf.ecore.resource.Resource;
30: import org.eclipse.emf.ecore.resource.ResourceSet;
31: import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
32: import org.eclipse.emf.ecp.view.spi.model.VDomainModelReference;
33: import org.eclipse.emf.ecp.view.spi.model.VView;
34: import org.eclipse.emf.ecp.view.spi.model.VViewFactory;
35: import org.eclipse.emf.ecp.view.spi.table.model.VTableControl;
36: import org.eclipse.emf.ecp.view.spi.table.model.VTableDomainModelReference;
37: import org.eclipse.emf.ecp.view.spi.table.model.VTableFactory;
38: import org.eclipse.emf.ecp.view.table.test.common.TableTestUtil;
39: import org.eclipse.emf.ecp.view.test.common.spi.GCCollectable;
40: import org.eclipse.emf.ecp.view.ui.editor.test.ECPCommonSWTBotTest;
41: import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
42: import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
43: import org.eclipse.emf.edit.provider.ReflectiveItemProviderAdapterFactory;
44: import org.eclipse.emf.emfstore.bowling.BowlingFactory;
45: import org.eclipse.emf.emfstore.bowling.BowlingPackage;
46: import org.eclipse.emf.emfstore.bowling.Gender;
47: import org.eclipse.emf.emfstore.bowling.League;
48: import org.eclipse.emf.emfstore.bowling.Player;
49: import org.eclipse.emf.emfstore.bowling.TournamentType;
50: import org.eclipse.swt.widgets.Button;
51: import org.eclipse.swt.widgets.Table;
52: import org.eclipse.swt.widgets.Text;
53: import org.eclipse.swtbot.swt.finder.widgets.SWTBotButton;
54: import org.eclipse.swtbot.swt.finder.widgets.SWTBotDateTime;
55: import org.eclipse.swtbot.swt.finder.widgets.SWTBotShell;
56: import org.eclipse.swtbot.swt.finder.widgets.SWTBotTable;
57: import org.eclipse.swtbot.swt.finder.widgets.SWTBotText;
58: import org.junit.AfterClass;
59: import org.junit.runner.RunWith;
60: import org.junit.runners.Parameterized;
61: import org.junit.runners.Parameterized.Parameters;
62:
63: /**
64: * SWTBotTest for table control.
65: *
66: * @author jfaltermeier
67: *
68: */
69: @RunWith(Parameterized.class)
70: public class TableControlSWTBot_PTest extends ECPCommonSWTBotTest {
71:
72:         private static double memBefore;
73:         private static double memAfter;
74:
75:         private final boolean isDomainCollectable;
76:
77:         private GCCollectable viewCollectable;
78:         private GCCollectable domainCollectable;
79:         private ComposedAdapterFactory adapterFactory;
80:
81:         public TableControlSWTBot_PTest(boolean isDomainCollectable) {
82:                 this.isDomainCollectable = isDomainCollectable;
83:         }
84:
85:         @AfterClass
86:         public static void afterClass() {
87:                 final double diff = Math.abs((memBefore - memAfter) / memBefore);
88:•                assertTrue(String.format("Diff was %1$s.", diff), diff < 0.05);
89:         }
90:
91:         @Parameters
92:         public static Collection<Object[]> data() {
93:                 final List<Object[]> data = new ArrayList<Object[]>();
94:•                for (int i = 0; i < 24; i++) {
95:                         data.add(new Boolean[] { false });
96:                 }
97:                 data.add(new Boolean[] { true });
98:                 return data;
99:         }
100:
101:         /**
102:          * {@inheritDoc}
103:          *
104:          * @see org.eclipse.emf.ecp.view.ui.editor.test.ECPCommonSWTBotTest#logic()
105:          */
106:         @Override
107:         public void logic() {
108:                 bot.activeShell().setFocus();
109:                 bot.waitUntil(org.eclipse.swtbot.swt.finder.waits.Conditions.waitForWidget(widgetOfType(Button.class)));
110:                 final SWTBotButton addButton = bot.button(0);
111:                 addButton.click();
112:                 addButton.click();
113:
114:                 bot.waitUntil(org.eclipse.swtbot.swt.finder.waits.Conditions.waitForWidget(widgetOfType(Table.class)));
115:                 final SWTBotTable table = bot.table();
116:                 table.select(0);
117:                 table.click(0, 1);
118:                 bot.waitUntil(org.eclipse.swtbot.swt.finder.waits.Conditions.waitForWidget(widgetOfType(Text.class)));
119:                 SWTBotText text = bot.text();
120:                 text.setFocus();
121:                 text.setText("Maxl Morlock");
122:
123:                 table.click(0, 2);
124:                 final SWTBotDateTime dateTime = bot.dateTime();
125:                 dateTime.setFocus();
126:                 dateTime.setDate(new Date());
127:
128:                 table.click(0, 3);
129:                 // no actual cell editor to test (boolean)
130:
131:                 table.click(0, 4);
132:                 text = bot.text();
133:                 text.setFocus();
134:                 text.setText("maxl@foo.bar");
135:
136:                 table.click(1, 1);
137:                 text = bot.text();
138:                 text.setFocus();
139:                 text.setText("Hans Kalb");
140:
141:                 table.click(2, 1);
142:                 text = bot.text();
143:                 text.setFocus();
144:                 text.setText("Heiner Stuhlfauth");
145:
146:                 table.click(2, 1);
147:                 final SWTBotButton deleteButton = bot.button(1);
148:                 deleteButton.click();
149:
150:                 final SWTBotShell shell = bot.activeShell();
151:                 final SWTBotButton okButton = shell.bot().button(0);
152:                 okButton.click();
153:         }
154:
155:         @Override
156:         public void assertions(double before, double after) {
157:                 TableControlSWTBot_PTest.memBefore += before;
158:                 TableControlSWTBot_PTest.memAfter += after;
159:
160:•                if (getDomainObject() != null) {
161:                         assertTrue("More than four adapter left on domain model element after dispose of ECPSWTView: "
162:                                 + getDomainObject().eAdapters().size()
163:                                 + " adapters. Not all adapters can be removed, but it's maybe time to get suspicious.",
164:•                                getDomainObject()
165:                                         .eAdapters().size() < 5);
166:                         assertTrue("More than four adapter left on domain model element after dispose of ECPSWTView: "
167:                                 + ((League) getDomainObject()).getPlayers().get(0).eAdapters().size()
168:                                 + " adapters. Not all adapters can be removed, but it's maybe time to get suspicious.",
169:•                                ((League) getDomainObject()).getPlayers().get(0).eAdapters().size() < 5);
170:                 }
171:
172:                 assertTrue(getSWTViewCollectable().isCollectable());
173:                 unsetSWTViewCollectable();
174:                 unsetDomainObject();
175:                 adapterFactory.dispose();
176:                 assertTrue(viewCollectable.isCollectable());
177:                 viewCollectable = null;
178:                 assertTrue(domainCollectable.isCollectable());
179:
180:         }
181:
182:         /**
183:          * {@inheritDoc}
184:          *
185:          * @see org.eclipse.emf.ecp.view.ui.editor.test.ECPCommonSWTBotTest#createDomainObject()
186:          */
187:         @Override
188:         public EObject createDomainObject() {
189:                 League league = (League) getDomainObject();
190:
191:•                if (isDomainCollectable) {
192:                         // remove reference to domain object, since gc will be tested
193:                         setDomainObject(null);
194:                 }
195:
196:•                if (league == null) {
197:                         league = BowlingFactory.eINSTANCE.createLeague();
198:                         league.setName("Bayern Nord");
199:                         final Player player = createPlayer();
200:                         league.getPlayers().add(player);
201:                         final ResourceSet resourceSet = new ResourceSetImpl();
202:                         final Resource resource = resourceSet.createResource(URI.createFileURI("foo.xmi"));
203:                         resource.getContents().add(league);
204:                         resource.getContents().add(player);
205:                         addEditingDomain(resourceSet);
206:                         memBefore = 0d;
207:                         memAfter = 0d;
208:                 } else {
209:                         final Player player = league.getPlayers().get(0);
210:                         player.setName("Max Morlock");
211:                         player.setHeight(1.8);
212:                         player.getEMails().clear();
213:                         player.getEMails().add("maxl@foobar.com");
214:                         player.setNumberOfVictories(249);
215:                         player.getPlayedTournamentTypes().clear();
216:                         player.getPlayedTournamentTypes().add(TournamentType.AMATEUR);
217:                         player.setWinLossRatio(new BigDecimal(0.8));
218:                         player.setGender(Gender.MALE);
219:                         league.getPlayers().remove(1);
220:                 }
221:
222:•                if (!isDomainCollectable) {
223:                         setDomainObject(league);
224:                 }
225:
226:                 domainCollectable = new GCCollectable(league);
227:                 return league;
228:         }
229:
230:         private Player createPlayer() {
231:                 final Player player = BowlingFactory.eINSTANCE.createPlayer();
232:                 player.setName("Max Morlock");
233:                 final Calendar calendar = Calendar.getInstance();
234:                 calendar.clear();
235:                 calendar.set(11, 5, 1925);
236:                 player.setDateOfBirth(calendar.getTime());
237:                 player.setHeight(1.80d);
238:                 player.setIsProfessional(true);
239:                 player.getEMails().add("maxl@foobar.com");
240:                 player.setNumberOfVictories(249);
241:                 player.getPlayedTournamentTypes().add(TournamentType.AMATEUR);
242:                 player.setWinLossRatio(new BigDecimal(0.8));
243:                 player.setGender(Gender.MALE);
244:                 return player;
245:         }
246:
247:         private void addEditingDomain(ResourceSet resourceSet) {
248:                 adapterFactory = new ComposedAdapterFactory(
249:                         ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
250:                 adapterFactory = new ComposedAdapterFactory(new AdapterFactory[] { adapterFactory,
251:                         new ReflectiveItemProviderAdapterFactory() });
252:                 final AdapterFactoryEditingDomain domain = new AdapterFactoryEditingDomain(adapterFactory,
253:                         new BasicCommandStack(), resourceSet);
254:                 resourceSet.eAdapters().add(new AdapterFactoryEditingDomain.EditingDomainProvider(domain));
255:         }
256:
257:         /**
258:          * {@inheritDoc}
259:          *
260:          * @see org.eclipse.emf.ecp.view.ui.editor.test.ECPCommonSWTBotTest#createView()
261:          */
262:         @Override
263:         public VView createView() {
264:                 final VView view = VViewFactory.eINSTANCE.createView();
265:                 view.setRootEClass(BowlingPackage.eINSTANCE.getGame());
266:                 createTableControl(view);
267:                 viewCollectable = new GCCollectable(view);
268:                 return view;
269:         }
270:
271:         /**
272:          * @param view
273:          */
274:         private void createTableControl(VView view) {
275:                 final VTableControl control = VTableFactory.eINSTANCE.createTableControl();
276:
277:                 final VTableDomainModelReference domainRef = VTableFactory.eINSTANCE
278:                         .createTableDomainModelReference();
279:                 domainRef.setDomainModelEFeature(BowlingPackage.eINSTANCE.getLeague_Players());
280:                 control.setDomainModelReference(domainRef);
281:
282:                 final VDomainModelReference nameColumn = TableTestUtil.createTableColumn(BowlingPackage.eINSTANCE
283:                         .getPlayer_Name());
284:
285:                 final VDomainModelReference birthColumn = TableTestUtil.createTableColumn(BowlingPackage.eINSTANCE
286:                         .getPlayer_DateOfBirth());
287:
288:                 final VDomainModelReference professionalColumn = TableTestUtil.createTableColumn(BowlingPackage.eINSTANCE
289:                         .getPlayer_IsProfessional());
290:
291:                 final VDomainModelReference eMailsColumn = TableTestUtil.createTableColumn(BowlingPackage.eINSTANCE
292:                         .getPlayer_EMails());
293:
294:                 VTableDomainModelReference.class.cast(control.getDomainModelReference()).getColumnDomainModelReferences()
295:                         .add(nameColumn);
296:                 VTableDomainModelReference.class.cast(control.getDomainModelReference()).getColumnDomainModelReferences()
297:                         .add(birthColumn);
298:                 VTableDomainModelReference.class.cast(control.getDomainModelReference()).getColumnDomainModelReferences()
299:                         .add(professionalColumn);
300:                 VTableDomainModelReference.class.cast(control.getDomainModelReference()).getColumnDomainModelReferences()
301:                         .add(eMailsColumn);
302:
303:                 view.getChildren().add(control);
304:         }
305:
306: }