Skip to content

Package: ModifyNavigatorTest$TestRunnable$2$1

ModifyNavigatorTest$TestRunnable$2$1

nameinstructionbranchcomplexitylinemethod
doExecute()
M: 10 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 2 C: 0
0%
M: 1 C: 0
0%
{...}
M: 13 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%

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: * Edgar Mueller - initial API and implementation
13: ******************************************************************************/
14: package org.eclipse.emf.ecp.view.ui.editor.test;
15:
16: import java.util.Arrays;
17: import java.util.Collection;
18:
19: import org.eclipse.core.databinding.observable.Realm;
20: import org.eclipse.emf.common.notify.Notifier;
21: import org.eclipse.emf.ecore.EObject;
22: import org.eclipse.emf.ecp.core.ECPProject;
23: import org.eclipse.emf.ecp.core.ECPProvider;
24: import org.eclipse.emf.ecp.core.exceptions.ECPProjectWithNameExistsException;
25: import org.eclipse.emf.ecp.core.util.ECPUtil;
26: import org.eclipse.emf.ecp.emfstore.core.internal.EMFStoreProvider;
27: import org.eclipse.emf.ecp.spi.core.InternalProject;
28: import org.eclipse.emf.ecp.spi.core.InternalProvider;
29: import org.eclipse.emf.ecp.ui.common.ECPViewerFactory;
30: import org.eclipse.emf.ecp.ui.view.ECPRendererException;
31: import org.eclipse.emf.edit.command.ChangeCommand;
32: import org.eclipse.emf.edit.domain.EditingDomain;
33: import org.eclipse.emf.emfstore.bowling.BowlingFactory;
34: import org.eclipse.emf.emfstore.bowling.Player;
35: import org.eclipse.jface.databinding.swt.DisplayRealm;
36: import org.eclipse.jface.viewers.TreeViewer;
37: import org.eclipse.swt.layout.FillLayout;
38: import org.eclipse.swt.widgets.Display;
39: import org.eclipse.swt.widgets.Shell;
40: import org.eclipse.swtbot.swt.finder.SWTBotTestCase;
41: import org.eclipse.swtbot.swt.finder.finders.UIThreadRunnable;
42: import org.eclipse.swtbot.swt.finder.junit.SWTBotJunit4ClassRunner;
43: import org.eclipse.swtbot.swt.finder.results.Result;
44: import org.eclipse.swtbot.swt.finder.results.VoidResult;
45: import org.eclipse.ui.PlatformUI;
46: import org.junit.After;
47: import org.junit.Before;
48: import org.junit.Test;
49: import org.junit.runner.RunWith;
50:
51: /**
52: * @author emueller
53: *
54: */
55: @RunWith(SWTBotJunit4ClassRunner.class)
56: public class ModifyNavigatorTest extends SWTBotTestCase {
57:
58:         private static final String PROJECTNAME = ModifyNavigatorTest.class.getName() + "Project";
59:         private Display display;
60:         private Shell shell;
61:         private TreeViewer viewer;
62:         private ECPProvider provider;
63:         private boolean failed;
64:
65:         @Before
66:         public void init() {
67:                 display = Display.getDefault();
68:                 shell = UIThreadRunnable.syncExec(display, new Result<Shell>() {
69:                         @Override
70:                         public Shell run() {
71:                                 final Shell shell = new Shell(display);
72:                                 shell.setLayout(new FillLayout());
73:                                 return shell;
74:                         }
75:                 });
76:                 final ECPProject project = ECPUtil.getECPProjectManager().getProject(PROJECTNAME);
77:                 if (project != null) {
78:                         project.delete();
79:                 }
80:                 provider = ECPUtil.getECPProviderRegistry().getProvider(EMFStoreProvider.NAME);
81:         }
82:
83:         @After
84:         public void after() {
85:                 UIThreadRunnable.syncExec(new VoidResult() {
86:                         @Override
87:                         public void run() {
88:                                 shell.dispose();
89:                                 shell.close();
90:                         }
91:                 });
92:                 final ECPProject project = ECPUtil.getECPProjectManager().getProject(PROJECTNAME);
93:                 if (project != null) {
94:                         project.delete();
95:                 }
96:         }
97:
98:         @Test
99:         public void test() throws ECPRendererException, InterruptedException {
100:                 Realm.runWithDefault(DisplayRealm.getRealm(display), new TestRunnable());
101:         }
102:
103:         protected static Player createPlayer(String name) {
104:                 final Player player = BowlingFactory.eINSTANCE.createPlayer();
105:                 player.setName(name);
106:                 return player;
107:         }
108:
109:         private class TestRunnable implements Runnable {
110:
111:                 /**
112:                  * {@inheritDoc}
113:                  *
114:                  * @see java.lang.Runnable#run()
115:                  */
116:                 @Override
117:                 public void run() {
118:                         final ECPProject[] project = new ECPProject[1];
119:                         final Object monitor = new Object();
120:                         try {
121:                                 project[0] = ECPUtil.getECPProjectManager().createProject(provider, PROJECTNAME);
122:                         } catch (final ECPProjectWithNameExistsException ex) {
123:                                 fail(ex.getMessage());
124:                         }
125:                         UIThreadRunnable.syncExec(display, new VoidResult() {
126:
127:                                 @Override
128:                                 public void run() {
129:                                         viewer = ECPViewerFactory.createModelExplorerViewer(shell, false,
130:                                                 PlatformUI.getWorkbench().getDecoratorManager().getLabelDecorator());
131:                                         shell.open();
132:                                 }
133:                         });
134:                         final InternalProvider internalProvider = (InternalProvider) project[0].getProvider();
135:                         final Notifier root = internalProvider.getRoot((InternalProject) project[0]);
136:                         final Collection<Notifier> notifiers = Arrays.asList((Notifier) ((EObject) root).eContainer());
137:                         final EditingDomain editingDomain = project[0].getEditingDomain();
138:                         new Thread() {
139:                                 @Override
140:                                 public void run() {
141:                                         for (int i = 0; i < 1000; i++) {
142:                                                 final Player player = createPlayer("Player " + i);
143:                                                 editingDomain.getCommandStack().execute(new ChangeCommand(notifiers) {
144:                                                         @Override
145:                                                         protected void doExecute() {
146:                                                                 project[0].getContents().add(player);
147:                                                         }
148:                                                 });
149:                                         }
150:                                         synchronized (monitor) {
151:                                                 monitor.notify();
152:                                         }
153:                                 }
154:                         }.start();
155:
156:                         UIThreadRunnable.syncExec(new VoidResult() {
157:                                 @Override
158:                                 public void run() {
159:                                         bot.tree().getTreeItem(PROJECTNAME).expand();
160:                                         if (project[0].getContents().size() != viewer.getTree().getItems()[0].getItems().length) {
161:                                                 failed = true;
162:                                         }
163:                                 }
164:                         });
165:
166:                         synchronized (monitor) {
167:                                 try {
168:                                         monitor.wait();
169:                                 } catch (final InterruptedException ex) {
170:                                         fail(ex.getMessage());
171:                                 }
172:                         }
173:
174:                         UIThreadRunnable.syncExec(new VoidResult() {
175:                                 @Override
176:                                 public void run() {
177:                                         shell.close();
178:                                 }
179:                         });
180:
181:                         assertFalse(failed);
182:                 }
183:         }
184: }