Project

General

Profile

Download (14.4 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
* Copyright (C) 2007 EDIT
3
* European Distributed Institute of Taxonomy
4
* http://www.e-taxonomy.eu
5
*
6
* The contents of this file are subject to the Mozilla Public License Version 1.1
7
* See LICENSE.TXT at the top of this package for the full license terms.
8
*/
9

    
10
package eu.etaxonomy.cdm.model.taxon;
11

    
12
import static org.junit.Assert.assertEquals;
13
import static org.junit.Assert.assertFalse;
14
import static org.junit.Assert.assertNotNull;
15
import static org.junit.Assert.assertSame;
16
import static org.junit.Assert.assertTrue;
17

    
18
import java.util.List;
19
import java.util.Set;
20

    
21
import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
22
import org.junit.After;
23
import org.junit.AfterClass;
24
import org.junit.Before;
25
import org.junit.BeforeClass;
26
import org.junit.Test;
27
import org.springframework.beans.BeanUtils;
28

    
29
import eu.etaxonomy.cdm.model.name.IBotanicalName;
30
import eu.etaxonomy.cdm.model.name.Rank;
31
import eu.etaxonomy.cdm.model.name.TaxonName;
32
import eu.etaxonomy.cdm.model.name.TaxonNameFactory;
33
//import eu.etaxonomy.cdm.model.reference.Book;
34
//import eu.etaxonomy.cdm.model.reference.Journal;
35
import eu.etaxonomy.cdm.model.reference.Reference;
36
import eu.etaxonomy.cdm.model.reference.ReferenceFactory;
37

    
38
/**
39
 * @author a.mueller
40
 * @since 01.04.2009
41
 */
42
public class TaxonNodeTest {
43
	@SuppressWarnings("unused")
44
	private static final Logger logger = LogManager.getLogger(TaxonNodeTest.class);
45
	private static String viewName1;
46
	private static Classification classification1;
47
	private static Classification classification2;
48
	private static Taxon taxon1;
49
	private static Taxon taxon2;
50
	private static Taxon taxon3;
51
	private static TaxonName taxonName1;
52
	private static TaxonName taxonName2;
53
	private static TaxonName taxonName3;
54
	private static Reference ref1;
55
	private static Reference ref2;
56
	private static Reference ref3;
57
	private static Synonym syn1;
58
	/**
59
	 * @throws java.lang.Exception
60
	 */
61
	@BeforeClass
62
	public static void setUpBeforeClass() throws Exception {
63
	}
64

    
65
	/**
66
	 * @throws java.lang.Exception
67
	 */
68
	@AfterClass
69
	public static void tearDownAfterClass() throws Exception {
70
	}
71

    
72
	/**
73
	 * @throws java.lang.Exception
74
	 */
75
	@Before
76
	public void setUp() throws Exception {
77
		viewName1 = "Greuther, 1993";
78
		classification1 = Classification.NewInstance(viewName1);
79
		classification2 = Classification.NewInstance("Test View 2");
80
		taxonName1 = TaxonNameFactory.NewBotanicalInstance(Rank.SPECIES());
81
		taxonName1 = TaxonNameFactory.NewBotanicalInstance(Rank.SUBSPECIES());
82
		taxonName3 = TaxonNameFactory.NewBotanicalInstance(Rank.SPECIES());
83
		ref1 = ReferenceFactory.newJournal();
84
		ref2 = ReferenceFactory.newBook();
85
		ref3 = ReferenceFactory.newGeneric();
86
		taxon1 = Taxon.NewInstance(taxonName1, ref1);
87
		taxon2 = Taxon.NewInstance(taxonName2, ref1);
88
		taxon3 = Taxon.NewInstance(taxonName3, ref3);
89
		//taxonNode1 = new TaxonNode(taxon1, taxonomicView1);
90
		syn1 = Synonym.NewInstance(null, null);
91
	}
92

    
93
	/**
94
	 * @throws java.lang.Exception
95
	 */
96
	@After
97
	public void tearDown() throws Exception {
98
	}
99

    
100
//****************************** TESTS *****************************************/
101

    
102

    
103
	/**
104
	 * Test method for {@link eu.etaxonomy.cdm.model.taxon.TaxonNode#NewInstance(eu.etaxonomy.cdm.model.taxon.Taxon, eu.etaxonomy.cdm.model.taxon.Classification)}.
105
	 */
106
	@Test
107
	public void testNewTaxonTaxonomicView() {
108
		TaxonNode testNode = new TaxonNode(taxon1);
109
		classification1.addChildNode(testNode, null, null);
110

    
111
		assertNotNull("test node should not be null", testNode);
112
		assertEquals(taxon1,testNode.getTaxon());
113
		assertEquals(classification1,testNode.getClassification());
114
		assertTrue("taxon1 must become part of taxonomicView1", classification1.isTaxonInTree(taxon1));
115
	}
116

    
117
	/**
118
	 * Test method for {@link eu.etaxonomy.cdm.model.taxon.TaxonNode#addChildNode(eu.etaxonomy.cdm.model.taxon.Taxon, eu.etaxonomy.cdm.model.reference.Reference, java.lang.String, eu.etaxonomy.cdm.model.taxon.Synonym)}.
119
	 */
120
	@Test
121
	public void testAddChild() {
122
		TaxonNode root = classification1.addChildTaxon(taxon1, null, null);
123
		assertEquals("Number of all nodes in view should be 1", 1, classification1.getAllNodes().size());
124

    
125
		TaxonNode child = root.addChildTaxon(taxon2, ref2, "p33");
126
		child.setSynonymToBeUsed(syn1); //originally synToBeUsed was part of addChildTaxon
127
		//test child properties
128
		assertNotNull("Child should not be null", child);
129
		assertEquals("Child taxon should be taxon2", taxon2, child.getTaxon());
130
		assertEquals("Parent taxon should be taxon1", taxon1, (child.getParent()).getTaxon());
131
		assertEquals("Reference should be ref2", ref2, child.getReference());
132
		assertEquals("Microreference should be 'p33'", "p33", child.getMicroReference());
133
		assertEquals("Synonym should be syn1", syn1, child.getSynonymToBeUsed());
134

    
135
		//test parent properties
136
		List<TaxonNode> childList = root.getChildNodes();
137
		assertFalse("parent child list must not be empty",childList.isEmpty());
138
		assertEquals("size of child list be 1", 1, childList.size());
139
		assertSame("taxa must be the same", taxon2, childList.iterator().next().getTaxon());
140

    
141
		//test view properties
142
		List<TaxonNode> rootNodes = classification1.getChildNodes();
143
		assertEquals("Number of root nodes should be 1", 1, rootNodes.size());
144
		Set<TaxonNode> allNodes = classification1.getAllNodes();
145
		assertEquals("Number of all nodes should be 2", 2, allNodes.size());
146
		assertTrue("Taxonomic view should include child", allNodes.contains(child));
147

    
148

    
149
		//is part of taxon
150
		Set<TaxonNode> nodes2 = taxon2.getTaxonNodes();
151
		assertFalse("taxon2 must not be empty", nodes2.isEmpty());
152
		assertEquals("size of nodes of taxon2 must be 1", 1, nodes2.size());
153
		assertSame("taxa must be the same", taxon2, nodes2.iterator().next().getTaxon());
154
	}
155

    
156
	/**
157
	 * Test method for {@link eu.etaxonomy.cdm.model.taxon.TaxonNode#setTaxon(eu.etaxonomy.cdm.model.taxon.Taxon)}.
158
	 */
159
	@Test
160
	public void testSetTaxon() {
161
		TaxonNode node = new TaxonNode(taxon1);
162
		classification1.addChildNode(node, null, null);
163
		assertNotNull(taxon2);
164
		node.setTaxon(taxon2);
165
		assertSame("taxon must be the same", taxon2, node.getTaxon());
166
		assertTrue("taxon2 must contain node", taxon2.getTaxonNodes().contains(node));
167
	}
168

    
169
	/**
170
	 * Test method for {@link eu.etaxonomy.cdm.model.taxon.TaxonNode#setParent(eu.etaxonomy.cdm.model.taxon.TaxonNode)}.
171
	 */
172
	@Test
173
	public void testSetParent() {
174
		TaxonNode node = new TaxonNode(taxon1);
175
		assertNotNull(taxon2);
176
		TaxonNode parent = new TaxonNode(taxon2);
177
		assertSame("Taxon must be the same", taxon2, parent.getTaxon());
178
		classification1.addChildNode(parent, null, null);
179
		node.setParent(parent);
180
		assertSame("taxon2 must contain node", parent, node.getParent());
181
		assertTrue("setParent must not handle child list of parent", parent.getChildNodes().isEmpty());
182
	}
183

    
184
	/**
185
	 * Test method for {@link eu.etaxonomy.cdm.model.taxon.TaxonNode#getChildNodes()}.
186
	 */
187
	@Test
188
	public void testGetChildNodes() {
189
		TaxonNode root = classification1.addChildTaxon(taxon1, null, null);
190
		assertEquals("Number of all nodes in view should be 1", 1, classification1.getAllNodes().size());
191

    
192
		TaxonNode child = root.addChildTaxon(taxon2, ref2, "p33");
193
		child.setSynonymToBeUsed(syn1);
194

    
195
		List<TaxonNode> childList = root.getChildNodes();
196
		assertFalse("parent child list must not be empty",childList.isEmpty());
197
		assertEquals("size of child list be 1", 1, childList.size());
198
		assertSame("child must be in child list", child, childList.iterator().next());
199
		assertSame("taxa must be the same", taxon2, childList.iterator().next().getTaxon());
200
	}
201

    
202
	@Test
203
	public void testGetCountChildren(){
204
		TaxonNode root = classification1.addChildTaxon(taxon1, null, null);
205
		assertEquals("Count of children must be 0", 0, root.getCountChildren());
206
		TaxonNode child = root.addChildTaxon(taxon2, ref2, "p33");
207
		child.setSynonymToBeUsed(syn1);
208
		assertEquals("Count of children must be 1", 1, root.getCountChildren());
209
		Taxon taxon3 = Taxon.NewInstance(null, null);
210
		TaxonNode child2 = root.addChildTaxon(taxon3, null, null);
211
		assertEquals("Count of children must be 2", 2, root.getCountChildren());
212
		root.removeChildNode(child);
213
		assertEquals("Count of children must be 1", 1, root.getCountChildren());
214
		root.removeChildNode(child2);
215
		assertEquals("Count of children must be 0", 0, root.getCountChildren());
216

    
217
	}
218

    
219
	@Test
220
	public void testDelete(){
221
		TaxonNode root = classification1.addChildTaxon(taxon1, null, null);
222
		assertEquals("Number of all nodes in view should be 1", 1, classification1.getAllNodes().size());
223

    
224

    
225
		TaxonNode childNode = root.addChildTaxon(taxon2, null, null);
226
		assertEquals("Count of children must be 1", 1, root.getCountChildren());
227

    
228
		childNode.delete();
229
		assertEquals("Count of children must be 0", 0, root.getCountChildren());
230

    
231

    
232
		root.delete();
233
		assertEquals("Number of all nodes in view should be 0", 0, classification1.getAllNodes().size());
234

    
235

    
236
	}
237

    
238
	@Test
239
	public void testMoveTaxonNodeToOtherTree(){
240
		TaxonNode node = classification1.addChildTaxon(taxon1, null, null);
241
		assertEquals("The node should be in the classification we added it to", classification1, node.getClassification());
242

    
243
		TaxonNode movedNode = classification2.addChildNode(node, null, null);
244
		assertEquals("The node should be in the classification we moved it to", classification2, movedNode.getClassification());
245
		assertEquals("The old tree should be empty now", 0, classification1.getChildNodes().size());
246
	}
247

    
248
	@Test
249
	public void testMoveTaxonNodeToOtherTaxonNodeInDifferentTree(){
250
		TaxonNode node1 = classification1.addChildTaxon(taxon1, null, null);
251
		TaxonNode node2 = node1.addChildTaxon(taxon3, null, null);
252

    
253
		assertEquals("The node should have exactly one child", 1, node1.getChildNodes().size());
254
		assertEquals("The child is not in the correct tree", classification1, node2.getClassification());
255
		assertEquals("The Classification should contain exactly two nodes", 2, classification1.getAllNodes().size());
256

    
257
		TaxonNode node3 = classification2.addChildTaxon(taxon3, null, null);
258

    
259
		// move node2 to node3 in other tree
260
		node3.addChildNode(node2, null, null);
261

    
262
		assertEquals("Old node should not have child nodes", 0, node1.getChildNodes().size());
263
		assertEquals("Old tree should contain only one node now", 1, classification1.getAllNodes().size());
264
		assertEquals("Moved node not in expected tree", classification2, node2.getClassification());
265
		assertEquals("Count of nodes in new tree:", 2, classification2.getAllNodes().size());
266

    
267
	}
268

    
269
	/**
270
	 * Basically tests #setClassificationRecursively(Classification) which is a private method
271
	 */
272
	@Test
273
	public void testMoveTaxonNodesRecursivelyToOtherTaxonNodeInDifferentTree(){
274
		TaxonNode node1 = classification1.addChildTaxon(taxon1, null, null);
275
		TaxonNode node2 = node1.addChildTaxon(taxon2, null, null);
276
		TaxonNode node3 = node2.addChildTaxon(taxon3, null, null);
277

    
278
		//move the branch to a different tree
279
		classification2.addChildNode(node1, null, null);
280

    
281
		assertEquals("Old tree should be empty:", 0, classification1.getAllNodes().size());
282
		assertEquals("Moved node not in expected tree:", classification2, node1.getClassification());
283
		assertEquals("Recursively moved node not in expected tree:", classification2, node2.getClassification());
284
		assertEquals("Recursively moved node not in expected tree:", classification2, node3.getClassification());
285

    
286
		assertEquals("Count of nodes in new tree:", 3, classification2.getAllNodes().size());
287

    
288
	}
289

    
290
	@Test
291
	public void testAddChildNode(){
292
		TaxonNode root = classification1.addChildTaxon(taxon1, null, null);
293
		assertEquals("Number of all nodes in cla should be 1", 1, classification1.getAllNodes().size());
294

    
295
		TaxonNode child = root.addChildTaxon(taxon2, ref2, "p33");
296
		child.setSynonymToBeUsed(syn1); //originally synToBeUsed was part of addChildTaxon
297
		//test child properties
298
		assertNotNull("Child should not be null", child);
299
		assertEquals("Child taxon should be taxon2", taxon2, child.getTaxon());
300
		assertEquals("Parent taxon should be taxon1", taxon1, (child.getParent()).getTaxon());
301
		assertEquals("Reference should be ref2", ref2, child.getReference());
302
		assertEquals("Microreference should be 'p33'", "p33", child.getMicroReference());
303
		assertEquals("Synonym should be syn1", syn1, child.getSynonymToBeUsed());
304

    
305
		//test parent properties
306
		List<TaxonNode> childList = root.getChildNodes();
307
		assertFalse("parent child list must not be empty",childList.isEmpty());
308
		assertEquals("size of child list be 1", 1, childList.size());
309
		assertSame("taxa must be the same", taxon2, childList.iterator().next().getTaxon());
310

    
311
		//test view properties
312
		List<TaxonNode> rootNodes = classification1.getChildNodes();
313
		assertEquals("Number of root nodes should be 1", 1, rootNodes.size());
314
		Set<TaxonNode> allNodes = classification1.getAllNodes();
315
		assertEquals("Number of all nodes should be 2", 2, allNodes.size());
316
		assertTrue("Taxonomic view should include child", allNodes.contains(child));
317
	}
318

    
319

    
320

    
321
    @Test
322
    public void testGetAncestors(){
323
    	/*
324
    	 * Classification
325
    	 *  * Pinus
326
    	 *  `- Pinus pampa
327
    	 *   `- Pinus pampa subsp. persicifolia
328
    	 */
329
    	Classification classification = Classification.NewInstance("Classification");
330
    	IBotanicalName pinusName = TaxonNameFactory.NewBotanicalInstance(null);
331
    	pinusName.setGenusOrUninomial("Pinus");
332
    	Taxon pinus = Taxon.NewInstance(pinusName, null);
333
    	IBotanicalName pinusPampaName = TaxonNameFactory.NewBotanicalInstance(null);
334
    	pinusPampaName.setGenusOrUninomial("Pinus");
335
    	pinusPampaName.setSpecificEpithet("pampa");
336
    	Taxon pinusPampa = Taxon.NewInstance(pinusPampaName, null);
337
    	IBotanicalName pinusPampaSubName = TaxonNameFactory.NewBotanicalInstance(null);
338
    	pinusPampaSubName.setGenusOrUninomial("Pinus");
339
    	pinusPampaSubName.setSpecificEpithet("pampa");
340
    	pinusPampaSubName.setInfraSpecificEpithet("persicifolia");
341
    	Taxon pinusPampaSub = Taxon.NewInstance(pinusPampaSubName, null);
342

    
343
    	TaxonNode pinusNode = classification.addChildTaxon(pinus, null, null);
344
    	TaxonNode pinusPampaNode = classification.addParentChild(pinus, pinusPampa, null, null);
345
    	TaxonNode pinusPampaSubNode = classification.addParentChild(pinusPampa, pinusPampaSub, null, null);
346
    	TaxonNode rootNode = classification.getRootNode();
347

    
348
    	Set<TaxonNode> ancestors = pinusPampaSubNode.getAncestors();
349
    	assertEquals(3, ancestors.size());
350
    	assertTrue(ancestors.contains(pinusPampaNode));
351
    	assertTrue(ancestors.contains(pinusNode));
352
    	assertTrue(ancestors.contains(rootNode));
353

    
354
    	Set<TaxonNode> rootAncestors = rootNode.getAncestors();
355
    	assertTrue(rootAncestors.isEmpty());
356

    
357
    }
358

    
359
    @Test
360
    public void beanTests(){
361
//      #5307 Test that BeanUtils does not fail
362
        BeanUtils.getPropertyDescriptors(TaxonNode.class);
363
    }
364

    
365
}
(3-3/5)