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() {
150 TaxonRelationshipType type
= TaxonRelationshipType
.PRO_PARTE_MISAPPLIED_NAME_FOR();
151 String inverseSymbol
= type
.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
);
157 Assert
.assertEquals(inverseSymbol
+ " \"Abies alba\" sensu Macfarlane 1918, err. sec. Cheek 1919: 123", str
);
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
);
166 public void testGetTaggedTextConceptRelations() {
170 TaxonRelationshipType relType
= TaxonRelationshipType
.INCLUDES();
172 final String SYMBOL
= relType
.getSymbol();
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
);
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
);
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
);
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
);
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
);
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
);
206 public void testGetTaggedTextSynonymRelations() {
210 TaxonRelationshipType type
= TaxonRelationshipType
.PRO_PARTE_SYNONYM_FOR();
211 final String symbol
= type
.getSymbol();
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
);
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
);
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
);
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
);
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
);
242 public void testGetFamilyNames() {
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"));
250 Team secRelTeam
= Team
.NewInstance();
251 secRelTeam
.addTeamMember(macFarlane
);
252 secRelTeam
.addTeamMember(cheek
);
253 relSec
.setAuthorship(secRelTeam
);
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"));
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"));
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"));
277 public void testGetTaggedTextMisappliedNameWithoutName() {
280 String inverseSymbol
= TaxonRelationshipType
.MISAPPLIED_NAME_FOR().getInverseSymbol();
281 String symbol
= TaxonRelationshipType
.MISAPPLIED_NAME_FOR().getSymbol();
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
);
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
);
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
);
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
);
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
);
312 public void testGetTaggedTextConceptRelationsWithoutName() {
316 TaxonRelationshipType relType
= TaxonRelationshipType
.INCLUDES();
318 final String SYMBOL
= relType
.getSymbol();
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
);
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
);
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
);
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
);
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
);