d42e48654380b325b0b8cf97578315efc95f4513
[cdmlib.git] / cdmlib-model / src / test / java / eu / etaxonomy / cdm / format / taxon / TaxonRelationshipFormatterTest.java
1 /**
2 * Copyright (C) 2018 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 package eu.etaxonomy.cdm.format.taxon;
10
11 import java.util.List;
12
13 import org.junit.Assert;
14 import org.junit.Before;
15 import org.junit.Test;
16
17 import eu.etaxonomy.cdm.model.agent.Person;
18 import eu.etaxonomy.cdm.model.agent.Team;
19 import eu.etaxonomy.cdm.model.common.Language;
20 import eu.etaxonomy.cdm.model.common.VerbatimTimePeriod;
21 import eu.etaxonomy.cdm.model.name.Rank;
22 import eu.etaxonomy.cdm.model.name.TaxonName;
23 import eu.etaxonomy.cdm.model.name.TaxonNameFactory;
24 import eu.etaxonomy.cdm.model.reference.Reference;
25 import eu.etaxonomy.cdm.model.reference.ReferenceFactory;
26 import eu.etaxonomy.cdm.model.taxon.Taxon;
27 import eu.etaxonomy.cdm.model.taxon.TaxonRelationship;
28 import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;
29 import eu.etaxonomy.cdm.strategy.cache.TaggedCacheHelper;
30 import eu.etaxonomy.cdm.strategy.cache.TaggedText;
31 import eu.etaxonomy.cdm.test.TermTestBase;
32
33 /**
34 * Test to test the {@link TaxonRelationshipFormatter}.
35 *
36 * @author a.mueller
37 * @since 14.08.2018
38 */
39 public class TaxonRelationshipFormatterTest extends TermTestBase{
40
41 private static boolean WITHOUT_NAME = true;
42
43 private TaxonRelationship taxonRel;
44 private Reference relSec;
45
46 private Taxon fromTaxon;
47 private TaxonName fromName;
48 private Reference fromSec;
49
50 private Taxon toTaxon;
51 private TaxonName toName;
52 private Reference toSec;
53
54 private TaxonRelationshipFormatter formatter;
55 private boolean inverse;
56
57 private Person toNameAuthor;
58 private Person macFarlane;
59 private Person cheek;
60 private Person toSecAuthor;
61 private List<Language> languages;
62
63 @Before
64 public void setUp() throws Exception {
65 fromName = TaxonNameFactory.NewBotanicalInstance(Rank.SPECIES());
66 fromName.setGenusOrUninomial("Abies");
67 fromName.setSpecificEpithet("alba");
68
69 toName = TaxonNameFactory.NewBotanicalInstance(Rank.SPECIES());
70 toName.setGenusOrUninomial("Pinus");
71 toName.setSpecificEpithet("pinova");
72 toNameAuthor = Person.NewInstance("Mill.", "Miller", "A.", "Andrew");
73 toName.setCombinationAuthorship(toNameAuthor);
74
75 fromSec = ReferenceFactory.newGeneric();
76 fromSec.setTitle("From Sec");
77 String initials = "J.M.";
78 macFarlane = Person.NewInstance(null, "Macfarlane", initials, null);
79 fromSec.setAuthorship(macFarlane);
80 fromSec.setDatePublished(VerbatimTimePeriod.NewVerbatimInstance(1918));
81
82 relSec = ReferenceFactory.newGeneric();
83 relSec.setTitle("From rel reference");
84 initials = null; //"M.R.";
85 cheek = Person.NewInstance(null, "Cheek", initials, null);
86 relSec.setAuthorship(cheek);
87 relSec.setDatePublished(VerbatimTimePeriod.NewVerbatimInstance(1919));
88
89 toSec = ReferenceFactory.newGeneric();
90 toSec.setTitle("To Sec");
91 toSecAuthor = Person.NewTitledInstance("ToSecAuthor");
92 toSec.setAuthorship(toSecAuthor);
93 toSec.setDatePublished(VerbatimTimePeriod.NewVerbatimInstance(1928));
94
95 fromTaxon = Taxon.NewInstance(fromName, fromSec);
96 toTaxon = Taxon.NewInstance(toName, toSec);
97
98 TaxonRelationshipType type = TaxonRelationshipType.MISAPPLIED_NAME_FOR();
99 taxonRel = fromTaxon.addTaxonRelation(toTaxon, type, relSec, "123");
100 inverse = false;
101
102 formatter = TaxonRelationshipFormatter.INSTANCE();
103
104 languages = null;
105 }
106
107 @Test
108 public void testGetTaggedTextMisappliedName() {
109
110 inverse = true;
111 String inverseSymbol = TaxonRelationshipType.MISAPPLIED_NAME_FOR().getInverseSymbol();
112 String symbol = TaxonRelationshipType.MISAPPLIED_NAME_FOR().getSymbol();
113
114 List<TaggedText> tags = formatter.getTaggedText(taxonRel, inverse, languages);
115 String str = TaggedCacheHelper.createString(tags);
116 Assert.assertEquals(inverseSymbol + " \"Abies alba\" sensu Macfarlane 1918, err. sec. Cheek 1919: 123", str);
117
118 //inverse
119 tags = formatter.getTaggedText(taxonRel, !inverse, languages);
120 str = TaggedCacheHelper.createString(tags);
121 Assert.assertEquals(symbol + " Pinus pinova Mill. sec. ToSecAuthor 1928, rel. sec. Cheek 1919: 123", str);
122
123 //auctores
124 fromTaxon.setAppendedPhrase("auctores");
125 tags = formatter.getTaggedText(taxonRel, inverse, languages);
126 str = TaggedCacheHelper.createString(tags);
127 Assert.assertEquals(inverseSymbol + " \"Abies alba\" auctores sensu Macfarlane 1918, err. sec. Cheek 1919: 123", str);
128
129 fromTaxon.setSec(null);
130 tags = formatter.getTaggedText(taxonRel, inverse, languages);
131 str = TaggedCacheHelper.createString(tags);
132 Assert.assertEquals(inverseSymbol + " \"Abies alba\" auctores, err. sec. Cheek 1919: 123", str);
133
134 fromTaxon.setAppendedPhrase("");
135 tags = formatter.getTaggedText(taxonRel, inverse, languages);
136 str = TaggedCacheHelper.createString(tags);
137 Assert.assertEquals(inverseSymbol + " \"Abies alba\" auct., err. sec. Cheek 1919: 123", str);
138
139 fromTaxon.setDoubtful(true);
140 tags = formatter.getTaggedText(taxonRel, inverse, languages);
141 str = TaggedCacheHelper.createString(tags);
142 // System.out.println(str);
143 Assert.assertEquals(inverseSymbol + " ?\u202F\"Abies alba\" auct., err. sec. Cheek 1919: 123", str);
144 }
145
146 @Test
147 public void testGetTaggedTextMisappliedNameProParte() {
148
149 inverse = true;
150 TaxonRelationshipType type = TaxonRelationshipType.PRO_PARTE_MISAPPLIED_NAME_FOR();
151 String inverseSymbol = type.getInverseSymbol();
152 String symbol = type.getSymbol();
153 taxonRel.setType(type);
154
155 List<TaggedText> tags = formatter.getTaggedText(taxonRel, inverse, languages);
156 String str = TaggedCacheHelper.createString(tags);
157 Assert.assertEquals(inverseSymbol + " \"Abies alba\" sensu Macfarlane 1918, err. sec. Cheek 1919: 123", str);
158
159 //inverse
160 tags = formatter.getTaggedText(taxonRel, !inverse, languages);
161 str = TaggedCacheHelper.createString(tags);
162 Assert.assertEquals(symbol + " Pinus pinova Mill. sec. ToSecAuthor 1928, rel. sec. Cheek 1919: 123", str);
163 }
164
165 @Test
166 public void testGetTaggedTextConceptRelations() {
167
168 inverse = false;
169
170 TaxonRelationshipType relType = TaxonRelationshipType.INCLUDES();
171
172 final String SYMBOL = relType.getSymbol();
173
174 taxonRel.setType(relType);
175 List<TaggedText> tags = formatter.getTaggedText(taxonRel, inverse, languages);
176 String str = TaggedCacheHelper.createString(tags);
177 Assert.assertEquals(SYMBOL + " Pinus pinova Mill. sec. ToSecAuthor 1928, rel. sec. Cheek 1919: 123", str);
178
179 tags = formatter.getTaggedText(taxonRel, !inverse, languages);
180 str = TaggedCacheHelper.createString(tags);
181 Assert.assertEquals(relType.getInverseSymbol() + " Abies alba sec. Macfarlane 1918, rel. sec. Cheek 1919: 123", str);
182
183 toTaxon.setAppendedPhrase("sensu stricto");
184 tags = formatter.getTaggedText(taxonRel, inverse, languages);
185 str = TaggedCacheHelper.createString(tags);
186 Assert.assertEquals(SYMBOL + " Pinus pinova Mill. sensu stricto sec. ToSecAuthor 1928, rel. sec. Cheek 1919: 123", str);
187
188 toTaxon.setSec(null);
189 tags = formatter.getTaggedText(taxonRel, inverse, languages);
190 str = TaggedCacheHelper.createString(tags);
191 Assert.assertEquals(SYMBOL + " Pinus pinova Mill. sensu stricto, rel. sec. Cheek 1919: 123", str);
192
193 toTaxon.setAppendedPhrase("");
194 tags = formatter.getTaggedText(taxonRel, inverse, languages);
195 str = TaggedCacheHelper.createString(tags);
196 Assert.assertEquals(SYMBOL + " Pinus pinova Mill. sec. ???, rel. sec. Cheek 1919: 123", str);
197
198 taxonRel.setDoubtful(true);
199 toTaxon.setAppendedPhrase("");
200 tags = formatter.getTaggedText(taxonRel, inverse, languages);
201 str = TaggedCacheHelper.createString(tags);
202 Assert.assertEquals("?" + SYMBOL + " Pinus pinova Mill. sec. ???, rel. sec. Cheek 1919: 123", str);
203 }
204
205 @Test
206 public void testGetTaggedTextSynonymRelations() {
207
208 inverse = false;
209
210 TaxonRelationshipType type = TaxonRelationshipType.PRO_PARTE_SYNONYM_FOR();
211 final String symbol = type.getSymbol();
212
213
214 taxonRel.setType(type);
215 List<TaggedText> tags = formatter.getTaggedText(taxonRel, inverse, languages);
216 String str = TaggedCacheHelper.createString(tags);
217 Assert.assertEquals(symbol + " Pinus pinova Mill. sec. ToSecAuthor 1928, syn. sec. Cheek 1919: 123", str);
218
219 tags = formatter.getTaggedText(taxonRel, !inverse, languages);
220 str = TaggedCacheHelper.createString(tags);
221 Assert.assertEquals(type.getInverseSymbol() + " Abies alba sec. Macfarlane 1918, syn. sec. Cheek 1919: 123", str);
222
223 toTaxon.setAppendedPhrase("sensu lato");
224 tags = formatter.getTaggedText(taxonRel, inverse, languages);
225 str = TaggedCacheHelper.createString(tags);
226 Assert.assertEquals(symbol + " Pinus pinova Mill. sensu lato sec. ToSecAuthor 1928, syn. sec. Cheek 1919: 123", str);
227
228
229 toTaxon.setSec(null);
230 tags = formatter.getTaggedText(taxonRel, inverse, languages);
231 str = TaggedCacheHelper.createString(tags);
232 Assert.assertEquals(symbol + " Pinus pinova Mill. sensu lato, syn. sec. Cheek 1919: 123", str);
233
234 toTaxon.setAppendedPhrase("");
235 tags = formatter.getTaggedText(taxonRel, inverse, languages);
236 str = TaggedCacheHelper.createString(tags);
237 Assert.assertEquals(symbol + " Pinus pinova Mill. sec. ???, syn. sec. Cheek 1919: 123", str);
238
239 }
240
241 @Test
242 public void testGetFamilyNames() {
243
244 //Test start condition with single person
245 List<TaggedText> tags = formatter.getTaggedText(taxonRel, inverse, languages);
246 String str = TaggedCacheHelper.createString(tags);
247 Assert.assertFalse("Formatted text should not contain the team correctly formatted", str.contains("Macfarlane & Cheek"));
248
249 //use team
250 Team secRelTeam = Team.NewInstance();
251 secRelTeam.addTeamMember(macFarlane);
252 secRelTeam.addTeamMember(cheek);
253 relSec.setAuthorship(secRelTeam);
254
255 tags = formatter.getTaggedText(taxonRel, inverse, languages);
256 str = TaggedCacheHelper.createString(tags);
257 // System.out.println(str);
258 Assert.assertTrue(str.contains("rel. sec. Macfarlane & Cheek 1919"));
259
260 //add third member
261 secRelTeam.addTeamMember(toSecAuthor);
262 tags = formatter.getTaggedText(taxonRel, inverse, languages);
263 str = TaggedCacheHelper.createString(tags);
264 // System.out.println(str);
265 Assert.assertTrue(str.contains("rel. sec. Macfarlane & al. 1919"));
266
267 //add et al.
268 secRelTeam.setHasMoreMembers(true);
269 tags = formatter.getTaggedText(taxonRel, inverse, languages);
270 str = TaggedCacheHelper.createString(tags);
271 // System.out.println(str);
272 Assert.assertTrue(str.contains("rel. sec. Macfarlane & al. 1919"));
273
274 }
275
276 @Test
277 public void testGetTaggedTextMisappliedNameWithoutName() {
278
279 inverse = true;
280 String inverseSymbol = TaxonRelationshipType.MISAPPLIED_NAME_FOR().getInverseSymbol();
281 String symbol = TaxonRelationshipType.MISAPPLIED_NAME_FOR().getSymbol();
282
283 List<TaggedText> tags = formatter.getTaggedText(taxonRel, inverse, languages, WITHOUT_NAME);
284 String str = TaggedCacheHelper.createString(tags);
285 Assert.assertEquals(inverseSymbol + " sensu Macfarlane 1918, err. sec. Cheek 1919: 123", str);
286
287 //inverse
288 tags = formatter.getTaggedText(taxonRel, !inverse, languages, WITHOUT_NAME);
289 str = TaggedCacheHelper.createString(tags);
290 Assert.assertEquals(symbol + " sec. ToSecAuthor 1928, rel. sec. Cheek 1919: 123", str);
291
292 //auctores
293 fromTaxon.setAppendedPhrase("auctores");
294 tags = formatter.getTaggedText(taxonRel, inverse, languages, WITHOUT_NAME);
295 str = TaggedCacheHelper.createString(tags);
296 Assert.assertEquals(inverseSymbol + " auctores sensu Macfarlane 1918, err. sec. Cheek 1919: 123", str);
297
298 fromTaxon.setSec(null);
299 fromTaxon.setAppendedPhrase("");
300 tags = formatter.getTaggedText(taxonRel, inverse, languages, WITHOUT_NAME);
301 str = TaggedCacheHelper.createString(tags);
302 Assert.assertEquals(inverseSymbol + " auct., err. sec. Cheek 1919: 123", str);
303
304 fromTaxon.setDoubtful(true);
305 tags = formatter.getTaggedText(taxonRel, inverse, languages, WITHOUT_NAME);
306 str = TaggedCacheHelper.createString(tags);
307 // System.out.println(str);
308 Assert.assertEquals(inverseSymbol + " ?\u202F auct., err. sec. Cheek 1919: 123", str);
309 }
310
311 @Test
312 public void testGetTaggedTextConceptRelationsWithoutName() {
313
314 inverse = false;
315
316 TaxonRelationshipType relType = TaxonRelationshipType.INCLUDES();
317
318 final String SYMBOL = relType.getSymbol();
319
320 taxonRel.setType(relType);
321 List<TaggedText> tags = formatter.getTaggedText(taxonRel, inverse, languages, WITHOUT_NAME);
322 String str = TaggedCacheHelper.createString(tags);
323 Assert.assertEquals(SYMBOL + " sec. ToSecAuthor 1928, rel. sec. Cheek 1919: 123", str);
324
325 tags = formatter.getTaggedText(taxonRel, !inverse, languages, WITHOUT_NAME);
326 str = TaggedCacheHelper.createString(tags);
327 Assert.assertEquals(relType.getInverseSymbol() + " sec. Macfarlane 1918, rel. sec. Cheek 1919: 123", str);
328
329 toTaxon.setAppendedPhrase("sensu stricto");
330 tags = formatter.getTaggedText(taxonRel, inverse, languages, WITHOUT_NAME);
331 str = TaggedCacheHelper.createString(tags);
332 Assert.assertEquals(SYMBOL + " sensu stricto sec. ToSecAuthor 1928, rel. sec. Cheek 1919: 123", str);
333
334 toTaxon.setSec(null);
335 toTaxon.setAppendedPhrase("");
336 tags = formatter.getTaggedText(taxonRel, inverse, languages, WITHOUT_NAME);
337 str = TaggedCacheHelper.createString(tags);
338 Assert.assertEquals(SYMBOL + " sec. ???, rel. sec. Cheek 1919: 123", str);
339
340 taxonRel.setDoubtful(true);
341 toTaxon.setAppendedPhrase("");
342 tags = formatter.getTaggedText(taxonRel, inverse, languages, WITHOUT_NAME);
343 str = TaggedCacheHelper.createString(tags);
344 Assert.assertEquals("?" + SYMBOL + " sec. ???, rel. sec. Cheek 1919: 123", str);
345 }
346 }