0ed841f7a07b527f25bd26542220c3d76d223fff
[cdmlib.git] / cdmlib-model / src / test / java / eu / etaxonomy / cdm / model / common / IdentifiableEntityTest.java
1 /**
2 * Copyright (C) 2009 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.common;
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.assertTrue;
16
17 import org.junit.After;
18 import org.junit.AfterClass;
19 import org.junit.Before;
20 import org.junit.BeforeClass;
21 import org.junit.Test;
22
23 import eu.etaxonomy.cdm.model.MockCdmCacher;
24 import eu.etaxonomy.cdm.model.agent.Person;
25 import eu.etaxonomy.cdm.model.name.NonViralName;
26 import eu.etaxonomy.cdm.model.name.Rank;
27 import eu.etaxonomy.cdm.model.reference.Reference;
28 import eu.etaxonomy.cdm.model.reference.ReferenceFactory;
29 import eu.etaxonomy.cdm.model.reference.ReferenceType;
30 import eu.etaxonomy.cdm.model.taxon.Taxon;
31
32 /**
33 * @author a.babadshanjan
34 * @created 02.02.2009
35 * @version 1.0
36 */
37 public class IdentifiableEntityTest {
38
39 private NonViralName<?> abies;
40 private NonViralName<?> abiesMill;
41 private NonViralName<?> abiesAlba;
42 private NonViralName<?> abiesAlbaMichx;
43 private NonViralName<?> abiesAlbaMill;
44
45 private Taxon abiesTaxon;
46 private Taxon abiesMillTaxon;
47
48 private NonViralName<?> abiesAutonym;
49 private Taxon abiesAutonymTaxon;
50
51 private NonViralName<?> abiesBalsamea;
52 private Taxon abiesBalsameaTaxon;
53 /**
54 * @throws java.lang.Exception
55 */
56
57 @BeforeClass
58 public static void setUpBeforeClass() {
59 DefaultTermInitializer vocabularyStore = new DefaultTermInitializer();
60 vocabularyStore.initialize();
61
62 }
63 /**
64 * @throws java.lang.Exception
65 */
66 @AfterClass
67 public static void tearDownAfterClass() throws Exception {
68 }
69
70 /**
71 * @throws java.lang.Exception
72 */
73 @Before
74 public void setUp() throws Exception {
75
76 abies = NonViralName.NewInstance(Rank.GENUS(), null);
77 abies.setNameCache("Abies");
78 abies.setTitleCache("Abies", true);
79 Reference sec = ReferenceFactory.newArticle();
80 sec.setTitle("Abies alba Ref");
81
82 abiesTaxon = Taxon.NewInstance(abies, sec);
83
84 abiesMill = NonViralName.NewInstance(Rank.GENUS(), null);
85 abiesMill.setNameCache("Abies");
86 abiesMill.setTitleCache("Abies Mill.", true);
87 abiesMillTaxon = Taxon.NewInstance(abiesMill, sec);
88
89 abiesAlba = NonViralName.NewInstance(Rank.SPECIES(), null);
90 abiesAlba.setNameCache("Abies alba");
91 abiesAlba.setTitleCache("Abies alba", true);
92
93 abiesAlbaMichx = NonViralName.NewInstance(Rank.SPECIES(), null);
94 abiesAlbaMichx.setNameCache("Abies alba");
95 abiesAlbaMichx.setTitleCache("Abies alba Michx.", true);
96
97 abiesAlbaMill = NonViralName.NewInstance(Rank.SPECIES(), null);
98 abiesAlbaMill.setNameCache("Abies alba");
99 abiesAlbaMill.setTitleCache("Abies alba Mill.", true);
100
101 abiesAutonym = NonViralName.NewInstance(Rank.SECTION_BOTANY());
102 abiesAutonym.setGenusOrUninomial("Abies");
103 abiesAutonym.setInfraGenericEpithet("Abies");
104
105 abiesAutonym.setTitleCache("Abies Mill. sect. Abies", true);
106 abiesAutonym.getNameCache();
107 abiesAutonymTaxon = Taxon.NewInstance(abiesAutonym, sec);
108
109 abiesBalsamea = NonViralName.NewInstance(Rank.SECTION_BOTANY());
110 abiesBalsamea.setGenusOrUninomial("Abies");
111 abiesBalsamea.setInfraGenericEpithet("Balsamea");
112 abiesBalsamea.getNameCache();
113 abiesBalsamea.setTitleCache("Abies sect. Balsamea L.", true);
114 abiesBalsameaTaxon = Taxon.NewInstance(abiesBalsamea, sec);
115
116 }
117
118 /**
119 * @throws java.lang.Exception
120 */
121 @After
122 public void tearDown() throws Exception {
123 }
124
125 /**
126 * Test method for {@link eu.etaxonomy.cdm.model.common.IdentifiableEntity#compareTo(eu.etaxonomy.cdm.model.common.IdentifiableEntity)}.
127 */
128 @Test
129 public void testCompareTo() {
130 int result = 0;
131
132 // "Abies" < "Abies Mill."
133 result = abies.compareTo(abiesMill);
134 assertTrue(result < 0);
135
136 abiesTaxon = abies.getTaxa().iterator().next();
137
138 assertTrue(abiesTaxon.compareTo(abiesTaxon) == 0);
139
140 assertTrue(abiesMillTaxon.compareTo(abiesTaxon) > 0);
141
142 assertTrue(abiesTaxon.compareTo(abiesMillTaxon) < 0);
143
144 // "Abies Mill." > "Abies"
145 result = abiesMill.compareTo(abies);
146 assertTrue(result > 0);
147
148 // "Abies" < "Abies alba"
149 result = abies.compareTo(abiesAlba);
150 assertTrue(result < 0);
151
152 // "Abies alba" > "Abies"
153 result = abiesAlba.compareTo(abies);
154 assertTrue(result > 0);
155
156 // "Abies Mill." < "Abies alba Michx."
157 result = abiesMill.compareTo(abiesAlbaMichx);
158 assertTrue(result < 0);
159
160 // "Abies alba Michx." > "Abies Mill."
161 result = abiesAlbaMichx.compareTo(abiesMill);
162 assertTrue(result > 0);
163
164 //Autonym should sorted without the authorstring
165
166 result = abiesAutonym.compareTo(abiesBalsamea);
167 assertTrue(result < 0);
168 // Test consistency of compareTo() with equals():
169 // Is consistent if and only if for every e1 and e2 of class C
170 // e1.compareTo(e2) == 0 has the same boolean value as e1.equals(e2)
171
172 boolean compareResult = false;
173 boolean equalsResult = false;
174
175 compareResult = (abies.compareTo(abies) == 0);
176 equalsResult = abies.equals(abies);
177 assertEquals(compareResult, equalsResult);
178
179 compareResult = (abies.compareTo(abiesAlba) == 0);
180 equalsResult = abies.equals(abiesAlba);
181 assertEquals(compareResult, equalsResult);
182
183 compareResult = (abiesMill.compareTo(abies) == 0);
184 equalsResult = abiesMill.equals(abies);
185 assertEquals(compareResult, equalsResult);
186 }
187
188 /**
189 * Test method for {@link eu.etaxonomy.cdm.model.common.IdentifiableEntity#addCredit(eu.etaxonomy.cdm.model.common.IdentifiableEntity)}.
190 */
191 @Test
192 public void testAddCredit() {
193 assertNotNull("A list should always be returned",abies.getCredits());
194 assertTrue("No credits should exist",abies.getCredits().isEmpty());
195 String text1 = "Credit1";
196 String text2 = "Credit2";
197 String text3 = "Credit0"; //for sorting order
198 Person person = Person.NewTitledInstance("Me");
199 abies.addCredit(Credit.NewInstance(person, text1));
200 assertEquals("Number of credits should be 1",1,abies.getCredits().size());
201 abies.addCredit(Credit.NewInstance(person, text2));
202 assertEquals("Number of credits should be 2",2,abies.getCredits().size());
203 abies.addCredit(Credit.NewInstance(person, text3));
204 assertEquals("Number of credits should be 3",3,abies.getCredits().size());
205 assertEquals("Credit0 should be last in list", text3, abies.getCredits(2).getText());
206 }
207
208 /**
209 * Test method for {@link eu.etaxonomy.cdm.model.common.IdentifiableEntity#addCredit(eu.etaxonomy.cdm.model.common.IdentifiableEntity)}.
210 */
211 @Test
212 public void testRemoveCredit() {
213 assertNotNull("A list should always be returned",abies.getCredits());
214 String text1 = "Credit1";
215 String text2 = "Credit2";
216 Person person = Person.NewTitledInstance("Me");
217 Credit credit1 = Credit.NewInstance(person, text1);
218 Credit credit2 = Credit.NewInstance(person, text2);
219 abies.addCredit(credit1);
220 abies.addCredit(credit2);
221 assertEquals("Number of credits should be 2",2,abies.getCredits().size());
222 abies.removeCredit(credit1);
223 assertNotNull("A list should always be returned",abies.getCredits());
224 assertFalse("The list should not be empty",abies.getCredits().isEmpty());
225 assertEquals("Number of credits should be 1",1,abies.getCredits().size());
226 assertEquals("Remaining credit should be credit2",credit2,abies.getCredits().get(0));
227 abies.removeCredit(credit2);
228 assertNotNull("A list should always be returned",abies.getCredits());
229 assertTrue("No credits should exist",abies.getCredits().isEmpty());
230 }
231
232 @Test
233 public void testClone(){
234 IdentifiableEntity clone = (IdentifiableEntity)abies.clone();
235 assertNotNull(clone);
236 assertEquals(clone.annotations, abies.annotations);
237 assertEquals(clone.markers, abies.markers);
238 assertFalse(clone.uuid.equals(abies.uuid));
239 }
240 }