1 package pl.edu.agh.cast.editor.operation;
2
3 import static org.junit.Assert.fail;
4
5 import java.io.File;
6 import java.io.IOException;
7 import java.util.Collections;
8 import java.util.Date;
9 import java.util.HashMap;
10 import java.util.List;
11 import java.util.Map;
12
13 import junit.framework.Assert;
14 import junit.framework.JUnit4TestAdapter;
15
16 import org.junit.Before;
17 import org.junit.Test;
18
19 import pl.edu.agh.cast.backward.editor.operation.SelectMediatorsOperation;
20 import pl.edu.agh.cast.backward.editor.operation.SelectMediatorsParameters;
21 import pl.edu.agh.cast.backward.editor.operation.SelectMediatorsParameters.SelectMediatorsMode;
22 import pl.edu.agh.cast.model.attributes.NodeAttributeManager;
23 import pl.edu.agh.cast.model.base.DataImporter;
24 import pl.edu.agh.cast.model.base.DataSet;
25 import pl.edu.agh.cast.model.base.Entity;
26 import pl.edu.agh.cast.model.base.IDataSet;
27 import pl.edu.agh.cast.model.base.IEntity;
28 import pl.edu.agh.cast.model.base.IModel;
29 import pl.edu.agh.cast.model.base.Model;
30 import pl.edu.agh.cast.model.base.TimedRelation;
31 import pl.edu.agh.cast.model.visual.backward.Diagram;
32 import pl.edu.agh.cast.model.visual.backward.IDiagram;
33 import pl.edu.agh.cast.model.visual.backward.Node;
34 import pl.edu.agh.cast.schema.command.SelectMediatorsCommand;
35 import pl.edu.agh.cast.schema.util.Messages;
36
37
38
39
40
41
42 public class SelectMediatorsOperationTest {
43
44 private static final Map<String, Object> MAIN_ENTITIES_IDS = getMainEntitiesIds();
45
46 private IDiagram _diagram;
47
48 Node[] _positionedNodes = new Node[6];
49
50 DataImporter _importer;
51
52 public static junit.framework.Test suite() {
53 return new JUnit4TestAdapter(SelectMediatorsOperationTest.class);
54 }
55
56 @Before
57 public void setUp() throws Exception {
58 IModel model = new Model();
59 _diagram = new Diagram(model.getDataSets());
60 _importer = new DataImporter(model);
61 }
62
63 private static Map<String, Object> getMainEntitiesIds() {
64 HashMap<String, Object> mainEntitiesIds = new HashMap<String, Object>();
65 mainEntitiesIds.put("0000", null);
66 mainEntitiesIds.put("1111", null);
67 mainEntitiesIds.put("2222", null);
68 mainEntitiesIds.put("3333", null);
69 mainEntitiesIds.put("4444", null);
70 mainEntitiesIds.put("5555", null);
71 mainEntitiesIds.put("6666", null);
72 mainEntitiesIds.put("7777", null);
73 mainEntitiesIds.put("8888", null);
74 mainEntitiesIds.put("9999", null);
75 return mainEntitiesIds;
76 }
77
78 @Test
79 public void findMediatorsTest() {
80 buildModel();
81 SelectMediatorsParameters params = new SelectMediatorsParameters();
82 SelectMediatorsOperation command = new SelectMediatorsOperation(params,
83 _diagram.getNodes());
84 List<Node> execute = command.execute();
85
86 Assert.assertTrue(_positionedNodes[2].isMainNode());
87 Assert.assertFalse(_positionedNodes[3].isMainNode());
88 Assert.assertTrue(_positionedNodes[4].isMainNode());
89 Assert.assertFalse(_positionedNodes[5].isMainNode());
90 Assert.assertFalse(_positionedNodes[1].isMainNode());
91
92 Assert.assertEquals(1, execute.size());
93 Assert.assertEquals(_positionedNodes[1], execute.get(0));
94 }
95
96 @Test
97 public void findZeroMediators() {
98 buildModel();
99 SelectMediatorsParameters params = new SelectMediatorsParameters();
100 params.setMinEachConnections(3);
101 SelectMediatorsOperation command = new SelectMediatorsOperation(params,
102 _diagram.getNodes());
103 List<Node> execute = command.execute();
104
105 Assert.assertTrue(_positionedNodes[2].isMainNode());
106 Assert.assertFalse(_positionedNodes[3].isMainNode());
107 Assert.assertTrue(_positionedNodes[4].isMainNode());
108 Assert.assertFalse(_positionedNodes[5].isMainNode());
109 Assert.assertFalse(_positionedNodes[1].isMainNode());
110
111 Assert.assertEquals(0, execute.size());
112 }
113
114 @Test
115 public void findMediatorsTest2() {
116 buildModel();
117 SelectMediatorsParameters params = new SelectMediatorsParameters();
118 params.setMode(SelectMediatorsMode.SUM);
119 params.setMinTotalConnections(6);
120
121 SelectMediatorsOperation command = new SelectMediatorsOperation(params,
122 _diagram.getNodes());
123 List<Node> execute = command.execute();
124
125 Assert.assertTrue(_positionedNodes[2].isMainNode());
126 Assert.assertFalse(_positionedNodes[3].isMainNode());
127 Assert.assertTrue(_positionedNodes[4].isMainNode());
128 Assert.assertFalse(_positionedNodes[5].isMainNode());
129 Assert.assertFalse(_positionedNodes[1].isMainNode());
130
131 Assert.assertEquals(0, execute.size());
132 }
133
134 @Test
135 public void noMainEntities() {
136 buildModel();
137
138 SelectMediatorsParameters params = new SelectMediatorsParameters();
139 SelectMediatorsOperation command = new SelectMediatorsOperation(params,
140 _diagram.getNodes());
141 command.execute();
142
143 _positionedNodes[1].setAttributeValue(
144 NodeAttributeManager.PERMANENT_ISMAIN, false);
145 _positionedNodes[2].setAttributeValue(
146 NodeAttributeManager.PERMANENT_ISMAIN, false);
147 _positionedNodes[3].setAttributeValue(
148 NodeAttributeManager.PERMANENT_ISMAIN, false);
149 _positionedNodes[4].setAttributeValue(
150 NodeAttributeManager.PERMANENT_ISMAIN, false);
151 _positionedNodes[5].setAttributeValue(
152 NodeAttributeManager.PERMANENT_ISMAIN, false);
153
154 Assert.assertFalse(_positionedNodes[2].isMainNode());
155 Assert.assertFalse(_positionedNodes[3].isMainNode());
156 Assert.assertFalse(_positionedNodes[4].isMainNode());
157 Assert.assertFalse(_positionedNodes[5].isMainNode());
158 Assert.assertFalse(_positionedNodes[1].isMainNode());
159 }
160
161 @Test
162 public void fileBased_p5t10() {
163
164 try {
165 _importer.importDataFromFile(buildFullFilePath("p5t10"
166 + File.separator + "p5t10_a.txt"));
167 _importer.importDataFromFile(buildFullFilePath("p5t10"
168 + File.separator + "p5t10_b.txt"));
169 _importer.importDataFromFile(buildFullFilePath("p5t10"
170 + File.separator + "p5t10_c.txt"));
171 } catch (IOException ex) {
172 fail("Exception occurred: " + ex.getMessage());
173 }
174
175 validateFileBased();
176 }
177
178 @Test
179 public void fileBased_p15t20() {
180
181 try {
182 _importer.importDataFromFile(buildFullFilePath("p15t20"
183 + File.separator + "p15t20_a.txt"));
184 _importer.importDataFromFile(buildFullFilePath("p15t20"
185 + File.separator + "p15t20_b.txt"));
186 _importer.importDataFromFile(buildFullFilePath("p15t20"
187 + File.separator + "p15t20_c.txt"));
188 } catch (IOException ex) {
189 fail("Exception occurred: " + ex.getMessage());
190 }
191
192 validateFileBased();
193 }
194
195 @Test
196 public void fileBased_p50t200() {
197 try {
198 _importer.importDataFromFile(buildFullFilePath("p50t200"
199 + File.separator + "p50t200_a.txt"));
200 _importer.importDataFromFile(buildFullFilePath("p50t200"
201 + File.separator + "p50t200_b.txt"));
202 _importer.importDataFromFile(buildFullFilePath("p50t200"
203 + File.separator + "p50t200_c.txt"));
204 } catch (IOException ex) {
205 fail("Exception occurred: " + ex.getMessage());
206 }
207
208 validateFileBased();
209 }
210
211 @Test
212 public void testUndo() {
213 buildModel();
214 SelectMediatorsParameters params = new SelectMediatorsParameters();
215 params.setMode(SelectMediatorsMode.SUM);
216 params.setMinTotalConnections(1);
217
218 SelectMediatorsCommand command = new SelectMediatorsCommand(params,
219 _diagram.getNodes());
220 command.execute();
221
222 Assert.assertTrue(_positionedNodes[2].isMainNode());
223 Assert.assertTrue(_positionedNodes[3].isMainNode());
224 Assert.assertTrue(_positionedNodes[4].isMainNode());
225 Assert.assertFalse(_positionedNodes[5].isMainNode());
226 Assert.assertTrue(_positionedNodes[1].isMainNode());
227
228 command.undo();
229
230 Assert.assertTrue(_positionedNodes[2].isMainNode());
231 Assert.assertFalse(_positionedNodes[3].isMainNode());
232 Assert.assertTrue(_positionedNodes[4].isMainNode());
233 Assert.assertFalse(_positionedNodes[5].isMainNode());
234 Assert.assertFalse(_positionedNodes[1].isMainNode());
235 }
236
237 @Test
238 public void TestMessage() {
239 SelectMediatorsParameters params = new SelectMediatorsParameters();
240 params.setMode(SelectMediatorsMode.SUM);
241 params.setMinTotalConnections(1);
242
243 SelectMediatorsCommand command = new SelectMediatorsCommand(params,
244 _diagram.getNodes());
245 Assert.assertEquals(Messages.SelectMediatorsCommand_0, command
246 .getLabel());
247 }
248
249 private Node getNodeById(IDiagram model, String id) {
250 for (Node node : model.getNodes())
251 if (id.equals(node.getId()))
252 return node;
253 return null;
254 }
255
256 private void validateFileBased() {
257 SelectMediatorsParameters params = new SelectMediatorsParameters();
258 params.setMinEachConnections(1);
259
260 SelectMediatorsOperation command = new SelectMediatorsOperation(params,
261 _diagram.getNodes());
262 command.execute();
263
264 for (String strEntityId : MAIN_ENTITIES_IDS.keySet()) {
265 Node node = getNodeById(_diagram, strEntityId);
266 if (node != null)
267 Assert
268 .assertTrue(
269 node.getId() + " should be a main entity", node.isMainNode());
270 }
271
272 for (Node node : _diagram.getNodes()) {
273 if (MAIN_ENTITIES_IDS.containsKey(node.getId()))
274 continue;
275 boolean isMain = node.isMainNode();
276 if (isMain)
277 fail(node.getId() + " should not be a main entity");
278 }
279 }
280
281 private String buildFullFilePath(String filePath) {
282 return "src" + File.separator +
283 "test" + File.separator +
284 "resources" + File.separator +
285 "testData" + File.separator +
286 "find_mediators" + File.separator +
287 filePath + File.separator;
288 }
289
290
291
292
293 private void buildModel() {
294 IDataSet dataSet = new DataSet();
295 IEntity[] entities = new IEntity[6];
296 for (int i = 1; i <= 5; i++) {
297 entities[i] = new Entity(Integer.toString(i));
298 if (i == 2 || i == 4)
299 entities[i].setAttribute("IsMain", true);
300 }
301
302 dataSet.addRelation(new TimedRelation(entities[1], entities[2],
303 new Date(1210000000l)));
304 dataSet.addRelation(new TimedRelation(entities[1], entities[2],
305 new Date(1220000000l)));
306 dataSet.addRelation(new TimedRelation(entities[1], entities[4],
307 new Date(1410000000l)));
308 dataSet.addRelation(new TimedRelation(entities[1], entities[4],
309 new Date(1420000000l)));
310 dataSet.addRelation(new TimedRelation(entities[1], entities[4],
311 new Date(1430000000l)));
312 dataSet.addRelation(new TimedRelation(entities[2], entities[3],
313 new Date(2310000000l)));
314 dataSet.addRelation(new TimedRelation(entities[2], entities[5],
315 new Date(2510000000l)));
316 dataSet.addRelation(new TimedRelation(entities[3], entities[4],
317 new Date(3410000000l)));
318
319 Assert.assertEquals(8, dataSet.getRelations().size());
320 Assert.assertEquals(5, dataSet.getEntities().size());
321
322 _diagram = new Diagram(Collections.singleton(dataSet));
323
324 Assert.assertEquals(5, _diagram.getNodes().size());
325
326 Map<Integer, Integer> expectedConnGroups = new HashMap<Integer, Integer>();
327 expectedConnGroups.put(1, 2);
328 expectedConnGroups.put(2, 3);
329 expectedConnGroups.put(3, 2);
330 expectedConnGroups.put(4, 2);
331 expectedConnGroups.put(5, 1);
332
333 for (Node node : _diagram.getNodes()) {
334 for (int i = 1; i <= 5; i++) {
335 if (entities[i].getId().equals(node.getId())) {
336 _positionedNodes[i] = node;
337 Assert.assertEquals((Integer) node.getConnectionGroups()
338 .size(), expectedConnGroups.get(i));
339 break;
340 }
341 }
342 }
343 }
344 }