2 * Copyright (C) 2018 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
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.
9 package eu
.etaxonomy
.cdm
.format
.taxon
;
11 import java
.util
.List
;
13 import org
.junit
.Assert
;
14 import org
.junit
.Before
;
15 import org
.junit
.Test
;
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
;
34 * Test to test the {@link TaxonRelationshipFormatter}.
39 public class TaxonRelationshipFormatterTest
extends TermTestBase
{
41 private static boolean WITHOUT_NAME
= true;
43 private TaxonRelationship taxonRel
;
44 private Reference relSec
;
46 private Taxon fromTaxon
;
47 private TaxonName fromName
;
48 private Reference fromSec
;
50 private Taxon toTaxon
;
51 private TaxonName toName
;
52 private Reference toSec
;
54 private TaxonRelationshipFormatter formatter
;
55 private boolean inverse
;
57 private Person toNameAuthor
;
58 private Person macFarlane
;
60 private Person toSecAuthor
;
61 private List
<Language
> languages
;
64 public void setUp() throws Exception
{
65 fromName
= TaxonNameFactory
.NewBotanicalInstance(Rank
.SPECIES());
66 fromName
.setGenusOrUninomial("Abies");
67 fromName
.setSpecificEpithet("alba");
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
);
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));
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));
89 toSec
= ReferenceFactory
.newGeneric();
90 toSec
.setTitle("To Sec");
91 toSecAuthor
= Person
.NewTitledInstance("ToSecAuthor");
92 toSec
.setAuthorship(toSecAuthor
);
93 toSec
.setDatePublished(VerbatimTimePeriod
.NewVerbatimInstance(1928));
95 fromTaxon
= Taxon
.NewInstance(fromName
, fromSec
);
96 toTaxon
= Taxon
.NewInstance(toName
, toSec
);
98 TaxonRelationshipType type
= TaxonRelationshipType
.MISAPPLIED_NAME_FOR();
99 taxonRel
= fromTaxon
.addTaxonRelation(toTaxon
, type
, relSec
, "123");
102 formatter
= TaxonRelationshipFormatter
.INSTANCE();
108 public void testGetTaggedTextMisappliedName() {
111 String inverseSymbol
= TaxonRelationshipType
.MISAPPLIED_NAME_FOR().getInverseSymbol();
112 String symbol
= TaxonRelationshipType
.MISAPPLIED_NAME_FOR().getSymbol();
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
);
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
);
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
);
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
);
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
);
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
);
147 public void testGetTaggedTextMisappliedNameProParte() {
149 inverse
= true; //this is the default visible on taxon pages
150 TaxonRelationshipType type
= TaxonRelationshipType
.PRO_PARTE_MISAPPLIED_NAME_FOR();
151 String manInverseSymbol
= TaxonRelationshipType
.MISAPPLIED_NAME_FOR().getInverseSymbol();
152 String symbol
= type
.getSymbol();
153 taxonRel
.setType(type
);
155 List
<TaggedText
> tags
= formatter
.getTaggedText(taxonRel
, inverse
, languages
);
156 String str
= TaggedCacheHelper
.createString(tags
);
158 Assert
.assertEquals("We split the inverse symbol here", manInverseSymbol
+ " \"Abies alba\" sensu Macfarlane 1918, p.p., err. sec. Cheek 1919: 123", str
);
160 //direct (we do not (yet) split the symbol
161 tags
= formatter
.getTaggedText(taxonRel
, !inverse
, languages
);
162 str
= TaggedCacheHelper
.createString(tags
);
163 Assert
.assertEquals(symbol
+ " Pinus pinova Mill. sec. ToSecAuthor 1928, rel. sec. Cheek 1919: 123", str
);
166 type
= TaxonRelationshipType
.PARTIAL_MISAPPLIED_NAME_FOR();
167 symbol
= type
.getSymbol();
168 taxonRel
.setType(type
);
170 tags
= formatter
.getTaggedText(taxonRel
, inverse
, languages
);
171 str
= TaggedCacheHelper
.createString(tags
);
173 Assert
.assertEquals("We split the inverse symbol here", manInverseSymbol
+ " \"Abies alba\" sensu Macfarlane 1918, part., err. sec. Cheek 1919: 123", str
);
179 public void testGetTaggedTextConceptRelations() {
183 TaxonRelationshipType relType
= TaxonRelationshipType
.INCLUDES();
185 final String SYMBOL
= relType
.getSymbol();
187 taxonRel
.setType(relType
);
188 List
<TaggedText
> tags
= formatter
.getTaggedText(taxonRel
, inverse
, languages
);
189 String str
= TaggedCacheHelper
.createString(tags
);
190 Assert
.assertEquals(SYMBOL
+ " Pinus pinova Mill. sec. ToSecAuthor 1928, rel. sec. Cheek 1919: 123", str
);
192 tags
= formatter
.getTaggedText(taxonRel
, !inverse
, languages
);
193 str
= TaggedCacheHelper
.createString(tags
);
194 Assert
.assertEquals(relType
.getInverseSymbol() + " Abies alba sec. Macfarlane 1918, rel. sec. Cheek 1919: 123", str
);
196 toTaxon
.setAppendedPhrase("sensu stricto");
197 tags
= formatter
.getTaggedText(taxonRel
, inverse
, languages
);
198 str
= TaggedCacheHelper
.createString(tags
);
199 Assert
.assertEquals(SYMBOL
+ " Pinus pinova Mill. sensu stricto sec. ToSecAuthor 1928, rel. sec. Cheek 1919: 123", str
);
201 toTaxon
.setSec(null);
202 tags
= formatter
.getTaggedText(taxonRel
, inverse
, languages
);
203 str
= TaggedCacheHelper
.createString(tags
);
204 Assert
.assertEquals(SYMBOL
+ " Pinus pinova Mill. sensu stricto, rel. sec. Cheek 1919: 123", str
);
206 toTaxon
.setAppendedPhrase("");
207 tags
= formatter
.getTaggedText(taxonRel
, inverse
, languages
);
208 str
= TaggedCacheHelper
.createString(tags
);
209 Assert
.assertEquals(SYMBOL
+ " Pinus pinova Mill. sec. ???, rel. sec. Cheek 1919: 123", str
);
211 taxonRel
.setDoubtful(true);
212 toTaxon
.setAppendedPhrase("");
213 tags
= formatter
.getTaggedText(taxonRel
, inverse
, languages
);
214 str
= TaggedCacheHelper
.createString(tags
);
215 Assert
.assertEquals("?" + SYMBOL
+ " Pinus pinova Mill. sec. ???, rel. sec. Cheek 1919: 123", str
);
219 public void testGetTaggedTextSynonymRelations() {
223 TaxonRelationshipType type
= TaxonRelationshipType
.PRO_PARTE_SYNONYM_FOR();
224 final String symbol
= type
.getSymbol();
227 taxonRel
.setType(type
);
228 List
<TaggedText
> tags
= formatter
.getTaggedText(taxonRel
, inverse
, languages
);
229 String str
= TaggedCacheHelper
.createString(tags
);
230 Assert
.assertEquals(symbol
+ " Pinus pinova Mill. sec. ToSecAuthor 1928, syn. sec. Cheek 1919: 123", str
);
232 tags
= formatter
.getTaggedText(taxonRel
, !inverse
, languages
);
233 str
= TaggedCacheHelper
.createString(tags
);
234 Assert
.assertEquals(type
.getInverseSymbol() + " Abies alba sec. Macfarlane 1918, syn. sec. Cheek 1919: 123", str
);
236 toTaxon
.setAppendedPhrase("sensu lato");
237 tags
= formatter
.getTaggedText(taxonRel
, inverse
, languages
);
238 str
= TaggedCacheHelper
.createString(tags
);
239 Assert
.assertEquals(symbol
+ " Pinus pinova Mill. sensu lato sec. ToSecAuthor 1928, syn. sec. Cheek 1919: 123", str
);
242 toTaxon
.setSec(null);
243 tags
= formatter
.getTaggedText(taxonRel
, inverse
, languages
);
244 str
= TaggedCacheHelper
.createString(tags
);
245 Assert
.assertEquals(symbol
+ " Pinus pinova Mill. sensu lato, syn. sec. Cheek 1919: 123", str
);
247 toTaxon
.setAppendedPhrase("");
248 tags
= formatter
.getTaggedText(taxonRel
, inverse
, languages
);
249 str
= TaggedCacheHelper
.createString(tags
);
250 Assert
.assertEquals(symbol
+ " Pinus pinova Mill. sec. ???, syn. sec. Cheek 1919: 123", str
);
255 public void testGetFamilyNames() {
257 //Test start condition with single person
258 List
<TaggedText
> tags
= formatter
.getTaggedText(taxonRel
, inverse
, languages
);
259 String str
= TaggedCacheHelper
.createString(tags
);
260 Assert
.assertFalse("Formatted text should not contain the team correctly formatted", str
.contains("Macfarlane & Cheek"));
263 Team secRelTeam
= Team
.NewInstance();
264 secRelTeam
.addTeamMember(macFarlane
);
265 secRelTeam
.addTeamMember(cheek
);
266 relSec
.setAuthorship(secRelTeam
);
268 tags
= formatter
.getTaggedText(taxonRel
, inverse
, languages
);
269 str
= TaggedCacheHelper
.createString(tags
);
270 // System.out.println(str);
271 Assert
.assertTrue(str
.contains("rel. sec. Macfarlane & Cheek 1919"));
274 secRelTeam
.addTeamMember(toSecAuthor
);
275 tags
= formatter
.getTaggedText(taxonRel
, inverse
, languages
);
276 str
= TaggedCacheHelper
.createString(tags
);
277 // System.out.println(str);
278 Assert
.assertTrue(str
.contains("rel. sec. Macfarlane & al. 1919"));
281 secRelTeam
.setHasMoreMembers(true);
282 tags
= formatter
.getTaggedText(taxonRel
, inverse
, languages
);
283 str
= TaggedCacheHelper
.createString(tags
);
284 // System.out.println(str);
285 Assert
.assertTrue(str
.contains("rel. sec. Macfarlane & al. 1919"));
290 public void testGetTaggedTextMisappliedNameWithoutName() {
293 String inverseSymbol
= TaxonRelationshipType
.MISAPPLIED_NAME_FOR().getInverseSymbol();
294 String symbol
= TaxonRelationshipType
.MISAPPLIED_NAME_FOR().getSymbol();
296 List
<TaggedText
> tags
= formatter
.getTaggedText(taxonRel
, inverse
, languages
, WITHOUT_NAME
);
297 String str
= TaggedCacheHelper
.createString(tags
);
298 Assert
.assertEquals(inverseSymbol
+ " sensu Macfarlane 1918, err. sec. Cheek 1919: 123", str
);
301 tags
= formatter
.getTaggedText(taxonRel
, !inverse
, languages
, WITHOUT_NAME
);
302 str
= TaggedCacheHelper
.createString(tags
);
303 Assert
.assertEquals(symbol
+ " sec. ToSecAuthor 1928, rel. sec. Cheek 1919: 123", str
);
306 fromTaxon
.setAppendedPhrase("auctores");
307 tags
= formatter
.getTaggedText(taxonRel
, inverse
, languages
, WITHOUT_NAME
);
308 str
= TaggedCacheHelper
.createString(tags
);
309 Assert
.assertEquals(inverseSymbol
+ " auctores sensu Macfarlane 1918, err. sec. Cheek 1919: 123", str
);
311 fromTaxon
.setSec(null);
312 fromTaxon
.setAppendedPhrase("");
313 tags
= formatter
.getTaggedText(taxonRel
, inverse
, languages
, WITHOUT_NAME
);
314 str
= TaggedCacheHelper
.createString(tags
);
315 Assert
.assertEquals(inverseSymbol
+ " auct., err. sec. Cheek 1919: 123", str
);
317 fromTaxon
.setDoubtful(true);
318 tags
= formatter
.getTaggedText(taxonRel
, inverse
, languages
, WITHOUT_NAME
);
319 str
= TaggedCacheHelper
.createString(tags
);
320 // System.out.println(str);
321 Assert
.assertEquals(inverseSymbol
+ " ?\u202F auct., err. sec. Cheek 1919: 123", str
);
325 public void testGetTaggedTextConceptRelationsWithoutName() {
329 TaxonRelationshipType relType
= TaxonRelationshipType
.INCLUDES();
331 final String SYMBOL
= relType
.getSymbol();
333 taxonRel
.setType(relType
);
334 List
<TaggedText
> tags
= formatter
.getTaggedText(taxonRel
, inverse
, languages
, WITHOUT_NAME
);
335 String str
= TaggedCacheHelper
.createString(tags
);
336 Assert
.assertEquals(SYMBOL
+ " sec. ToSecAuthor 1928, rel. sec. Cheek 1919: 123", str
);
338 tags
= formatter
.getTaggedText(taxonRel
, !inverse
, languages
, WITHOUT_NAME
);
339 str
= TaggedCacheHelper
.createString(tags
);
340 Assert
.assertEquals(relType
.getInverseSymbol() + " sec. Macfarlane 1918, rel. sec. Cheek 1919: 123", str
);
342 toTaxon
.setAppendedPhrase("sensu stricto");
343 tags
= formatter
.getTaggedText(taxonRel
, inverse
, languages
, WITHOUT_NAME
);
344 str
= TaggedCacheHelper
.createString(tags
);
345 Assert
.assertEquals(SYMBOL
+ " sensu stricto sec. ToSecAuthor 1928, rel. sec. Cheek 1919: 123", str
);
347 toTaxon
.setSec(null);
348 toTaxon
.setAppendedPhrase("");
349 tags
= formatter
.getTaggedText(taxonRel
, inverse
, languages
, WITHOUT_NAME
);
350 str
= TaggedCacheHelper
.createString(tags
);
351 Assert
.assertEquals(SYMBOL
+ " sec. ???, rel. sec. Cheek 1919: 123", str
);
353 taxonRel
.setDoubtful(true);
354 toTaxon
.setAppendedPhrase("");
355 tags
= formatter
.getTaggedText(taxonRel
, inverse
, languages
, WITHOUT_NAME
);
356 str
= TaggedCacheHelper
.createString(tags
);
357 Assert
.assertEquals("?" + SYMBOL
+ " sec. ???, rel. sec. Cheek 1919: 123", str
);