Project

General

Profile

Download (33.8 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.strategy.cache.name;
11

    
12
import static org.junit.Assert.assertEquals;
13
import static org.junit.Assert.assertNull;
14

    
15
import java.util.List;
16

    
17
import org.apache.log4j.Logger;
18
import org.junit.Assert;
19
import org.junit.Before;
20
import org.junit.BeforeClass;
21
import org.junit.Test;
22

    
23
import eu.etaxonomy.cdm.model.agent.Person;
24
import eu.etaxonomy.cdm.model.agent.Team;
25
import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;
26
import eu.etaxonomy.cdm.model.common.DefaultTermInitializer;
27
import eu.etaxonomy.cdm.model.name.BotanicalName;
28
import eu.etaxonomy.cdm.model.name.HybridRelationshipType;
29
import eu.etaxonomy.cdm.model.name.NameRelationshipType;
30
import eu.etaxonomy.cdm.model.name.NonViralName;
31
import eu.etaxonomy.cdm.model.name.Rank;
32
import eu.etaxonomy.cdm.model.name.TaxonNameBase;
33
import eu.etaxonomy.cdm.model.name.ZoologicalName;
34
import eu.etaxonomy.cdm.model.reference.Reference;
35
import eu.etaxonomy.cdm.model.reference.ReferenceFactory;
36
import eu.etaxonomy.cdm.strategy.cache.HTMLTagRules;
37
import eu.etaxonomy.cdm.strategy.cache.TagEnum;
38
import eu.etaxonomy.cdm.strategy.cache.TaggedCacheHelper;
39
import eu.etaxonomy.cdm.strategy.cache.TaggedText;
40

    
41
/**
42
 * @author a.mueller
43
 * @created 26.11.2008
44
 */
45
public class NonViralNameDefaultCacheStrategyTest extends NameCacheStrategyTestBase{
46
    @SuppressWarnings("unused")
47
	private static final Logger logger = Logger.getLogger(NonViralNameDefaultCacheStrategyTest.class);
48

    
49
    private NonViralNameDefaultCacheStrategy<NonViralName> strategy;
50

    
51
    private static final String familyNameString = "Familia";
52
    private static final String genusNameString = "Genus";
53
    private static final String speciesNameString = "Abies alba";
54
    private static final String subSpeciesNameString = "Abies alba subsp. beta";
55
    private static final String appendedPhraseString = "app phrase";
56

    
57
    private static final String authorString = "L.";
58
    private static final String exAuthorString = "Exaut.";
59
    private static final String basAuthorString = "Basio, A.";
60
    private static final String exBasAuthorString = "ExBas. N.";
61

    
62
    private static final String referenceTitle = "My Reference";
63

    
64
    private BotanicalName familyName;
65
    private BotanicalName genusName;
66
    private BotanicalName subGenusName;
67
    private BotanicalName speciesName;
68
    private BotanicalName subSpeciesName;
69
    private TeamOrPersonBase<?> author;
70
    private TeamOrPersonBase<?> exAuthor;
71
    private TeamOrPersonBase<?> basAuthor;
72
    private TeamOrPersonBase<?> exBasAuthor;
73
    private Reference citationRef;
74

    
75
    @BeforeClass
76
    public static void setUpBeforeClass() {
77
        DefaultTermInitializer vocabularyStore = new DefaultTermInitializer();
78
        vocabularyStore.initialize();
79
    }
80

    
81
    /**
82
     * @throws java.lang.Exception
83
     */
84
    @Before
85
    public void setUp() throws Exception {
86
        strategy = NonViralNameDefaultCacheStrategy.NewInstance();
87
        familyName = TaxonNameBase.PARSED_BOTANICAL(familyNameString, Rank.FAMILY());
88
        genusName = TaxonNameBase.PARSED_BOTANICAL(genusNameString, Rank.GENUS());
89

    
90
        subGenusName = TaxonNameBase.NewBotanicalInstance(Rank.SUBGENUS());
91
        subGenusName.setGenusOrUninomial("Genus");
92
        subGenusName.setInfraGenericEpithet("InfraGenericPart");
93

    
94
        speciesName = TaxonNameBase.PARSED_BOTANICAL(speciesNameString);
95
        subSpeciesName = TaxonNameBase.PARSED_BOTANICAL(subSpeciesNameString);
96

    
97
        author = Person.NewInstance();
98
        author.setNomenclaturalTitle(authorString);
99
        exAuthor = Person.NewInstance();
100
        exAuthor.setNomenclaturalTitle(exAuthorString);
101
        basAuthor = Person.NewInstance();
102
        basAuthor.setNomenclaturalTitle(basAuthorString);
103
        exBasAuthor = Person.NewInstance();
104
        exBasAuthor.setNomenclaturalTitle(exBasAuthorString);
105

    
106
        citationRef = ReferenceFactory.newGeneric();
107
        citationRef.setTitleCache(referenceTitle, true);
108

    
109
    }
110

    
111
//**************************** TESTS **************************************************
112

    
113
    /**
114
     * Test method for {@link eu.etaxonomy.cdm.strategy.cache.name.NonViralNameDefaultCacheStrategy#getTitleCache(eu.etaxonomy.cdm.model.name.NonViralName)}.
115
     */
116
    @Test
117
    public void testGetTitleCache() {
118
        Assert.assertEquals(speciesNameString, speciesName.getTitleCache());
119
        //TODO not yet completed
120
    }
121

    
122
    /**
123
     * Test method for {@link eu.etaxonomy.cdm.strategy.cache.name.NonViralNameDefaultCacheStrategy#getFullTitleCache(eu.etaxonomy.cdm.model.name.NonViralName)}.
124
     */
125
    @Test
126
    public void testGetFullTitleCache() {
127
        subSpeciesName.setNomenclaturalReference(citationRef);
128
        Assert.assertEquals(subSpeciesNameString + ", " +  referenceTitle, subSpeciesName.getFullTitleCache());
129
        //TODO not yet completed
130
    }
131

    
132
    @Test
133
    public void testGattungsAutonyme() {
134
    	BotanicalName botName = TaxonNameBase.NewBotanicalInstance(Rank.SECTION_BOTANY());
135
		String strTaraxacum = "Traxacum";
136
		botName.setGenusOrUninomial(strTaraxacum);
137
		botName.setInfraGenericEpithet(strTaraxacum);
138
		botName.setAuthorshipCache("Author");
139
		Assert.assertFalse(botName.getFullTitleCache().contains("bot."));
140
		//TODO #4288
141
		System.out.println(botName.getFullTitleCache());
142
    }
143

    
144

    
145

    
146
    /**
147
     * Test method for {@link eu.etaxonomy.cdm.strategy.cache.name.NonViralNameDefaultCacheStrategy#getNameCache(eu.etaxonomy.cdm.model.name.NonViralName)}.
148
     */
149
    @Test
150
    public void testGetNameCache() {
151
        assertEquals("Species Name should be Abies alba", speciesNameString, speciesName.getNameCache());
152
        speciesName.setNameCache("Any species");
153
        assertEquals("Species Name should be Any species", "Any species", speciesName.getNameCache());
154
        assertEquals("Species Name should be Any species", "Any species", speciesName.getTitleCache());
155
        assertEquals("subSpeciesNameString should be correct", subSpeciesNameString, subSpeciesName.getNameCache());
156
        BotanicalName botName = TaxonNameBase.NewBotanicalInstance(Rank.VARIETY());
157
        botName.setGenusOrUninomial("Lepidocaryum");
158
        botName.setSpecificEpithet("tenue");
159
        botName.setInfraSpecificEpithet("tenue");
160
        assertEquals("", "Lepidocaryum tenue var. tenue", botName.getNameCache());
161
        BotanicalName specName = TaxonNameBase.NewBotanicalInstance(Rank.SPECIES());
162
        specName.setGenusOrUninomial("Genus");
163
        specName.setSpecificEpithet("");
164
        assertEquals("Empty species string must not result in trailing whitespace", "Genus", specName.getNameCache());
165

    
166
        //unranked taxa
167
        String unrankedCache;
168
        BotanicalName unrankedName = TaxonNameBase.NewBotanicalInstance(Rank.INFRASPECIFICTAXON());
169
        unrankedName.setGenusOrUninomial("Genus");
170
        NonViralNameDefaultCacheStrategy<BotanicalName> strategy = NonViralNameDefaultCacheStrategy.NewInstance();
171
            //infraspecific
172
        unrankedName.setInfraSpecificEpithet("infraspecific");
173
        unrankedName.setSpecificEpithet("species");
174
        unrankedCache = strategy.getNameCache(unrankedName);
175

    
176
        Assert.assertEquals("Correct unranked cache expected", "Genus species [infraspec.] infraspecific", unrankedCache);
177

    
178
            //infrageneric
179
        unrankedName.setRank(Rank.INFRAGENERICTAXON());
180
        unrankedName.setInfraSpecificEpithet(null);
181
        unrankedName.setSpecificEpithet(null);
182
        unrankedName.setInfraGenericEpithet("Infrageneric");
183
        unrankedCache = strategy.getNameCache(unrankedName);
184
        Assert.assertEquals("Correct unranked cache expected", "Genus [unranked] Infrageneric", unrankedCache);
185

    
186
        //bot. specific ranks
187
        botName = TaxonNameBase.NewBotanicalInstance(Rank.SECTION_BOTANY());
188
        botName.setGenusOrUninomial("Genus");
189
        botName.setInfraGenericEpithet("Infragenus");
190
        Assert.assertEquals("", "Genus sect. Infragenus", botName.getNameCache());
191
        botName.setRank(Rank.SUBSECTION_BOTANY());
192
        Assert.assertEquals("", "Genus subsect. Infragenus", botName.getNameCache());
193

    
194
        //zool. specific ranks (we don't have markers here therefore no problem should exist
195
        ZoologicalName zooName = TaxonNameBase.NewZoologicalInstance(Rank.SECTION_ZOOLOGY());
196
        zooName.setGenusOrUninomial("Genus");
197
        zooName.setInfraGenericEpithet("Infragenus");
198
        Assert.assertEquals("", "Genus", zooName.getNameCache());
199
        zooName.setRank(Rank.SUBSECTION_ZOOLOGY());
200
        Assert.assertEquals("", "Genus", zooName.getNameCache());
201

    
202
    }
203

    
204
    /**
205
     * Test method for {@link eu.etaxonomy.cdm.strategy.cache.name.NonViralNameDefaultCacheStrategy#getNameCache(eu.etaxonomy.cdm.model.name.NonViralName)}.
206
     */
207
    @Test
208
    public void testNameCacheWithInfraGenericEpithet() {
209
        speciesName.setInfraGenericEpithet("Infraabies");
210
        assertEquals("Species Name should be Abies (Infraabies) alba", "Abies (Infraabies) alba", speciesName.getNameCache());
211

    
212
        BotanicalName botName = TaxonNameBase.NewBotanicalInstance(Rank.VARIETY());
213
        botName.setGenusOrUninomial("Lepidocaryum");
214
        botName.setInfraGenericEpithet("Infralepi");
215
        botName.setSpecificEpithet("tenue");
216
        botName.setInfraSpecificEpithet("tenue");
217
        assertEquals("Name cache should be Lepidocaryum (Infralepi) tenue var. tenue", "Lepidocaryum (Infralepi) tenue var. tenue", botName.getNameCache());
218

    
219
        botName.setInfraGenericEpithet(" ");
220
        //Note: This test may fail if aspectj doesn't work correctly
221
        assertEquals("Empty infrageneric epithet must be neglegted", "Lepidocaryum tenue var. tenue", botName.getNameCache());
222
    }
223

    
224
    /**
225
     * Test method for {@link eu.etaxonomy.cdm.strategy.cache.name.NonViralNameDefaultCacheStrategy#getAuthorshipCache(eu.etaxonomy.cdm.model.name.NonViralName)}.
226
     */
227
    @Test
228
    public void testGetAuthorshipCache() {
229
        this.speciesName.setCombinationAuthorship(author);
230
        assertEquals(author.getNomenclaturalTitle(), speciesName.getAuthorshipCache());
231
        this.speciesName.setBasionymAuthorship(basAuthor);
232
        String expected = strategy.getBasionymStart()+ basAuthor.getNomenclaturalTitle()+strategy.getBasionymEnd()+strategy.getBasionymAuthorCombinationAuthorSeperator()+author.getNomenclaturalTitle();
233
        assertEquals(expected, speciesName.getAuthorshipCache());
234
        String authorshipcache = "authorshipcache";
235
        speciesName.setAuthorshipCache(authorshipcache);
236
        assertEquals(authorshipcache, speciesName.getAuthorshipCache());
237
        speciesName.setCombinationAuthorship(exAuthor);
238
        assertEquals(authorshipcache, speciesName.getAuthorshipCache()); //cache is protected
239
        assertEquals(speciesNameString + " " + authorshipcache, speciesName.getFullTitleCache());
240
        //unprotected
241
        speciesName.setProtectedAuthorshipCache(false);
242
        String atomizedAuthorCache = strategy.getBasionymStart()+ basAuthor.getNomenclaturalTitle()+strategy.getBasionymEnd()+strategy.getBasionymAuthorCombinationAuthorSeperator()+exAuthor.getNomenclaturalTitle();
243
        assertEquals(atomizedAuthorCache, speciesName.getAuthorshipCache());
244
        String atomizedTitleCache = speciesNameString + " "+ strategy.getBasionymStart()+ basAuthor.getNomenclaturalTitle()+strategy.getBasionymEnd()+strategy.getBasionymAuthorCombinationAuthorSeperator()+exAuthor.getNomenclaturalTitle();
245
        //Note: This test may fail if aspectj doesn't work correctly
246
        assertEquals(atomizedTitleCache, speciesName.getTitleCache());
247
        assertEquals(atomizedTitleCache, speciesName.getFullTitleCache());
248
    }
249

    
250
    /**
251
     * Test method for {@link eu.etaxonomy.cdm.strategy.cache.name.NonViralNameDefaultCacheStrategy#getAuthorshipCache(eu.etaxonomy.cdm.model.name.NonViralName)}.
252
     */
253
    @Test
254
    public void testHybridNames() {
255
        //Note \u00D7 : hybrid sign (multiplication sign)
256
        this.speciesName.setCombinationAuthorship(author);
257
        Assert.assertEquals(author.getNomenclaturalTitle(), speciesName.getAuthorshipCache());
258
        Assert.assertEquals("Should be Abies alba L.", "Abies alba L.", speciesName.getTitleCache());
259

    
260
        speciesName.setBinomHybrid(true);
261
        //Note: This test may fail if aspectj doesn't work correctly
262
        Assert.assertEquals("Should be Abies \u00D7alba L.", "Abies \u00D7alba L.", speciesName.getTitleCache());
263
        speciesName.setMonomHybrid(true);
264
        Assert.assertEquals("Should be '\u00D7Abies \u00D7alba L.'", "\u00D7Abies \u00D7alba L.", speciesName.getTitleCache());
265

    
266
        Assert.assertEquals("Should be 'Genus'", "Genus", genusName.getTitleCache());
267
        genusName.setMonomHybrid(true);
268
        Assert.assertEquals("Should be '\u00D7Genus'", "\u00D7Genus", genusName.getTitleCache());
269

    
270
        Assert.assertEquals("Should be 'Abies alba subsp. beta'", subSpeciesNameString, subSpeciesName.getTitleCache());
271
        subSpeciesName.setTrinomHybrid(true);
272
        Assert.assertEquals("Should be 'Abies alba nothosubsp. beta or nbeta'", "Abies alba nothosubsp. beta", subSpeciesName.getTitleCache());
273
        subSpeciesName.setMonomHybrid(true);
274
        Assert.assertEquals("Should be '\u00D7Abies alba nothosubsp. beta'", "\u00D7Abies alba nothosubsp. beta", subSpeciesName.getTitleCache());
275

    
276
        Assert.assertEquals("Should be 'Genus subg. InfraGenericPart'", "Genus subg. InfraGenericPart", subGenusName.getTitleCache());
277
        subGenusName.setBinomHybrid(true);
278
        Assert.assertEquals("Should be 'Genus nothosubg. InfraGenericPart'", "Genus nothosubg. InfraGenericPart", subGenusName.getTitleCache());
279
    }
280

    
281
    @Test
282
    public void testHybridFormula(){
283
        this.speciesName.setCombinationAuthorship(author);
284
        Assert.assertEquals(author.getNomenclaturalTitle(), speciesName.getAuthorshipCache());
285
        Assert.assertEquals("Should be 'Abies alba L.'", "Abies alba L.", speciesName.getTitleCache());
286

    
287
        NonViralName<?> hybridName = TaxonNameBase.NewNonViralInstance(Rank.SPECIES());
288
        NonViralName<?> secondParent = TaxonNameBase.NewNonViralInstance(Rank.SPECIES());
289

    
290
        secondParent.setTitleCache("Second parent Mill.", true);
291
        hybridName.addHybridParent(speciesName, HybridRelationshipType.FIRST_PARENT(), null);
292
        hybridName.addHybridParent(secondParent, HybridRelationshipType.SECOND_PARENT(), null);
293
        hybridName.setHybridFormula(true);
294

    
295
        Assert.assertEquals("", "Abies alba L. \u00D7 Second parent Mill.", hybridName.getTitleCache());
296

    
297
    }
298

    
299
    //TODO add more tests when specification is clearer
300
    @Test
301
    public void testOriginalSpelling() {
302
    	NameRelationshipType origSpellingType = NameRelationshipType.ORIGINAL_SPELLING();
303
    	NonViralName<?> originalName = (NonViralName<?>)speciesName.clone();
304
    	originalName.setSpecificEpithet("alpa");
305
    	Assert.assertEquals("Preconditions are wrong", "Abies alpa", originalName.getNameCache());
306

    
307
    	speciesName.addRelationshipFromName(originalName, origSpellingType, null);
308
    	Assert.assertEquals("Abies alba 'alpa'", speciesName.getNameCache());
309
    	originalName.setGenusOrUninomial("Apies");
310

    
311
    	speciesName.setNameCache(null, false);
312
    	//TODO update cache of current name (species name)
313
    	Assert.assertEquals("Abies alba 'Apies alpa'", speciesName.getNameCache());
314

    
315
    	//TODO add more tests when specification of exact behaviour is clearer
316
    }
317

    
318
    @Test
319
    public void testCacheListener() {
320
        Reference ref = ReferenceFactory.newGeneric();
321
        ref.setTitleCache("GenericRef",true);
322
        this.subSpeciesName.setNomenclaturalReference(ref);
323
        Assert.assertEquals("Expected full title cache has error", "Abies alba subsp. beta, GenericRef", subSpeciesName.getFullTitleCache());
324
        subSpeciesName.setCombinationAuthorship(author);
325
        subSpeciesName.setBasionymAuthorship(basAuthor);
326
        Assert.assertEquals("Expected full title cache has error", "Abies alba subsp. beta (Basio, A.) L., GenericRef", subSpeciesName.getFullTitleCache());
327
        //cascade name change to fullTitleCache
328
        subSpeciesName.setRank(Rank.SPECIES());
329
        subSpeciesName.setProtectedNameCache(true);
330
        Assert.assertNull("name cache should be null", subSpeciesName.getNameCache());
331
        subSpeciesName.setProtectedNameCache(false);
332
        Assert.assertNotNull("name cache should not be null", subSpeciesName.getNameCache());
333
        Assert.assertEquals("Expected full title cache has error", "Abies alba (Basio, A.) L., GenericRef", subSpeciesName.getFullTitleCache());
334
        Assert.assertEquals("Expected full title cache has error", "Abies alba (Basio, A.) L.", subSpeciesName.getTitleCache());
335
        Assert.assertEquals("Expected full title cache has error", "Abies alba", subSpeciesName.getNameCache());
336

    
337
        subSpeciesName.setProtectedNameCache(true);
338
        subSpeciesName.setSpecificEpithet("gamma");
339
        Assert.assertEquals("Expected full title cache has error", "Abies alba (Basio, A.) L., GenericRef", subSpeciesName.getFullTitleCache());
340
        Assert.assertEquals("Expected full title cache has error", "Abies alba (Basio, A.) L.", subSpeciesName.getTitleCache());
341
        Assert.assertEquals("Expected full title cache has error", "Abies alba", subSpeciesName.getNameCache());
342
        //make original status
343
        subSpeciesName.setRank(Rank.SUBSPECIES());
344
        Assert.assertEquals("Expected full title cache has error", "Abies alba (Basio, A.) L., GenericRef", subSpeciesName.getFullTitleCache());
345

    
346
        //author change
347
        author.setNomenclaturalTitle("M.");
348
        Assert.assertEquals("Expected full title cache has error", "(Basio, A.) M.", subSpeciesName.getAuthorshipCache());
349
        Assert.assertEquals("Expected full title cache has error", "Abies alba (Basio, A.) M., GenericRef", subSpeciesName.getFullTitleCache());
350
        Assert.assertEquals("Expected full title cache has error", "Abies alba (Basio, A.) M.", subSpeciesName.getTitleCache());
351

    
352
        //protectedTitleCache
353
        subSpeciesName.setProtectedTitleCache(true);
354
        subSpeciesName.setProtectedNameCache(false);
355
        subSpeciesName.setGenusOrUninomial("Pinus");
356
        subSpeciesName.setSpecificEpithet("alba");
357
        Assert.assertEquals("Expected full title cache has error", "Pinus alba subsp. beta", subSpeciesName.getNameCache());
358
        Assert.assertEquals("Expected full title cache has error", "Abies alba (Basio, A.) M., GenericRef", subSpeciesName.getFullTitleCache());
359
        Assert.assertEquals("Expected full title cache has error", "Abies alba (Basio, A.) M.", subSpeciesName.getTitleCache());
360

    
361
        subSpeciesName.setTitleCache("Pinus beta C.", true);
362
        Assert.assertEquals("Expected full title cache has error", "Pinus beta C., GenericRef", subSpeciesName.getFullTitleCache());
363
        subSpeciesName.setProtectedTitleCache(false);
364

    
365
        Assert.assertEquals("Expected full title cache has error", "Pinus alba subsp. beta (Basio, A.) M., GenericRef", subSpeciesName.getFullTitleCache());
366

    
367
        //protected full title cache set
368
        subSpeciesName.setFullTitleCache("ABC");
369
        Assert.assertEquals("Expected full title cache has error", "ABC", subSpeciesName.getFullTitleCache());
370
        subSpeciesName.setProtectedFullTitleCache(false);
371
        Assert.assertEquals("Expected full title cache has error", "Pinus alba subsp. beta (Basio, A.) M., GenericRef", subSpeciesName.getFullTitleCache());
372

    
373
        //protected title cache set
374
        subSpeciesName.setProtectedTitleCache(false);
375
        Assert.assertEquals("Expected full title cache has error", "Pinus alba subsp. beta (Basio, A.) M., GenericRef", subSpeciesName.getFullTitleCache());
376

    
377
        //protectedNameCache set
378
        subSpeciesName.setProtectedNameCache(true);
379
        Assert.assertEquals("Expected full title cache has error", "Pinus alba subsp. beta (Basio, A.) M., GenericRef", subSpeciesName.getFullTitleCache());
380
        subSpeciesName.setNameCache("P. alba subsp. beta");
381
        Assert.assertEquals("Expected full title cache has error", "P. alba subsp. beta (Basio, A.) M., GenericRef", subSpeciesName.getFullTitleCache());
382

    
383
        subSpeciesName.setGenusOrUninomial("A.");
384
        subSpeciesName.setProtectedNameCache(false);
385
        Assert.assertEquals("Expected full title cache has error", "A. alba subsp. beta (Basio, A.) M., GenericRef", subSpeciesName.getFullTitleCache());
386
        subSpeciesName.setNameCache("P. alba subsp. beta");
387
        Assert.assertEquals("Expected full title cache has error", "P. alba subsp. beta (Basio, A.) M., GenericRef", subSpeciesName.getFullTitleCache());
388

    
389
        //protected authorship
390
        subSpeciesName.setProtectedAuthorshipCache(true);
391
        Assert.assertEquals("Expected full title cache has error", "P. alba subsp. beta (Basio, A.) M., GenericRef", subSpeciesName.getFullTitleCache());
392
        subSpeciesName.setAuthorshipCache("Ciard.");
393
        Assert.assertEquals("Expected full title cache has error", "P. alba subsp. beta Ciard., GenericRef", subSpeciesName.getFullTitleCache());
394

    
395
        author.setNomenclaturalTitle("X.");
396
        subSpeciesName.setProtectedAuthorshipCache(false);
397
        Assert.assertEquals("Expected full title cache has error", "P. alba subsp. beta (Basio, A.) X., GenericRef", subSpeciesName.getFullTitleCache());
398

    
399
        //clear
400
        subSpeciesName.setProtectedNameCache(false);
401
        Assert.assertEquals("Expected full title cache has error", "A. alba subsp. beta (Basio, A.) X., GenericRef", subSpeciesName.getFullTitleCache());
402

    
403
        //appended phrase
404
        subSpeciesName.setProtectedNameCache(true);
405
        Assert.assertEquals("Expected full title cache has error", "A. alba subsp. beta (Basio, A.) X., GenericRef", subSpeciesName.getFullTitleCache());
406
        subSpeciesName.setAppendedPhrase("app phrase");
407
        Assert.assertEquals("Expected full title cache has error", "A. alba subsp. beta (Basio, A.) X., GenericRef", subSpeciesName.getFullTitleCache());
408
        subSpeciesName.setProtectedNameCache(false);
409
        Assert.assertEquals("Expected full title cache has error", "A. alba subsp. beta app phrase (Basio, A.) X., GenericRef", subSpeciesName.getFullTitleCache());
410
        subSpeciesName.setAppendedPhrase("app2 phrase2");
411
        subSpeciesName.setProtectedNameCache(true);
412
        Assert.assertNull("NameCache should be null", subSpeciesName.getNameCache());
413
        subSpeciesName.setProtectedNameCache(false);
414
        subSpeciesName.setAppendedPhrase(null);
415

    
416

    
417
        //ref + nomRef
418
        Reference book = ReferenceFactory.newBook();
419
        book.setTitle("Booktitle");
420
        Assert.assertNotNull("TitleCache should not be null", subSpeciesName.getTitleCache());
421
        subSpeciesName.setNomenclaturalReference(book);
422
        subSpeciesName.setNomenclaturalMicroReference("22");
423
        Assert.assertEquals("Expected full title cache has error", "A. alba subsp. beta (Basio, A.) X., Booktitle: 22", subSpeciesName.getFullTitleCache());
424
        subSpeciesName.setProtectedTitleCache(true);
425
        Assert.assertNotNull("TitleCache should not be null", subSpeciesName.getTitleCache());
426

    
427
        //year
428
        ZoologicalName zooName = TaxonNameBase.NewZoologicalInstance(Rank.SPECIES());
429
        zooName.setGenusOrUninomial("Homo");
430
        zooName.setSpecificEpithet("sapiens");
431
        zooName.setBasionymAuthorship(basAuthor);
432
        zooName.setCombinationAuthorship(author);
433
        zooName.setNomenclaturalReference(book);
434
        zooName.setNomenclaturalMicroReference("22");
435
        Assert.assertEquals("Expected full title cache has error", "Homo sapiens (Basio, A.) X., Booktitle: 22", zooName.getFullTitleCache());
436

    
437
        zooName.setOriginalPublicationYear(1922);
438
        zooName.setPublicationYear(1948);
439
        Assert.assertEquals("Expected full title cache has error", "Homo sapiens (Basio, A., 1922) X., 1948, Booktitle: 22", zooName.getFullTitleCache());
440
        zooName.setOriginalPublicationYear(1923);
441
        zooName.setProtectedAuthorshipCache(true);
442
        Assert.assertNull("AuthorshipCache should be null", zooName.getAuthorshipCache());
443
        zooName.setProtectedAuthorshipCache(false);
444
        Assert.assertNotNull("AuthorshipCache should not be null", zooName.getAuthorshipCache());
445
        zooName.setPublicationYear(1949);
446
        zooName.setProtectedAuthorshipCache(true);
447
        Assert.assertNull("AuthorshipCache should be null", zooName.getAuthorshipCache());
448

    
449

    
450

    
451

    
452
    }
453

    
454
    /**
455
     * Test method for {@link eu.etaxonomy.cdm.strategy.cache.name.NonViralNameDefaultCacheStrategy#setNameAuthorSeperator(java.lang.String)}.
456
     */
457
    @Test
458
    public void testGetSetNameAuthorSeperator() {
459
        String authorSeparator = "authorSeparator";
460
        strategy.setNameAuthorSeperator(authorSeparator);
461
        assertEquals(authorSeparator, strategy.getNameAuthorSeperator());
462
        strategy.setNameAuthorSeperator(null);
463
        assertNull(strategy.getNameAuthorSeperator());
464
    }
465

    
466
    /**
467
     * Test method for {@link eu.etaxonomy.cdm.strategy.cache.name.NonViralNameDefaultCacheStrategy#setBasionymStart(java.lang.String)}.
468
     * Test method for {@link eu.etaxonomy.cdm.strategy.cache.name.NonViralNameDefaultCacheStrategy#getBasionymStart()}.
469
     */
470
    @Test
471
    public void testGetSetBasionymStart() {
472
        String basStart = "start";
473
        strategy.setBasionymStart(basStart);
474
        assertEquals(basStart, strategy.getBasionymStart());
475
        strategy.setBasionymStart(null);
476
        assertNull(strategy.getBasionymStart());
477
    }
478

    
479
    /**
480
     * Test method for {@link eu.etaxonomy.cdm.strategy.cache.name.NonViralNameDefaultCacheStrategy#setBasionymEnd(java.lang.String)}.
481
     * Test method for {@link eu.etaxonomy.cdm.strategy.cache.name.NonViralNameDefaultCacheStrategy#getBasionymEnd()}.
482
    */
483
    @Test
484
    public void testGetSetBasionymEnd() {
485
        String basEnd = "end";
486
        strategy.setBasionymEnd(basEnd);
487
        assertEquals(basEnd, strategy.getBasionymEnd());
488
        strategy.setBasionymEnd(null);
489
        assertNull(strategy.getBasionymEnd());
490
    }
491

    
492
    /**
493
     * Test method for {@link eu.etaxonomy.cdm.strategy.cache.name.NonViralNameDefaultCacheStrategy#setExAuthorSeperator(java.lang.String)}.
494
     * Test method for {@link eu.etaxonomy.cdm.strategy.cache.name.NonViralNameDefaultCacheStrategy#getExAuthorSeperator()}.
495
     */
496
    @Test
497
    public void testGetSetExAuthorSeperator() {
498
        String exAuthorSeparator = "exAuthorSeparator";
499
        strategy.setExAuthorSeperator(exAuthorSeparator);
500
        assertEquals(exAuthorSeparator, strategy.getExAuthorSeperator());
501
        strategy.setExAuthorSeperator(null);
502
        assertNull(strategy.getExAuthorSeperator());
503
    }
504

    
505
    /**
506
     * Test method for {@link eu.etaxonomy.cdm.strategy.cache.name.NonViralNameDefaultCacheStrategy#setBasionymAuthorCombinationAuthorSeperator(java.lang.CharSequence)}.
507
     * Test method for {@link eu.etaxonomy.cdm.strategy.cache.name.NonViralNameDefaultCacheStrategy#getBasionymAuthorCombinationAuthorSeperator()}.
508
     */
509
    @Test
510
    public void testSetBasionymAuthorCombinationAuthorSeperator() {
511
        String basComSeparator = "basComSeparator";
512
        strategy.setBasionymAuthorCombinationAuthorSeperator(basComSeparator);
513
        assertEquals(basComSeparator, strategy.getBasionymAuthorCombinationAuthorSeperator());
514
        strategy.setBasionymAuthorCombinationAuthorSeperator(null);
515
        assertNull(strategy.getBasionymAuthorCombinationAuthorSeperator());
516
    }
517

    
518
    @Test
519
    public void testGetInfraGenericNames(){
520
        String author = "Anyauthor";
521
        NonViralName<?> nonViralName = TaxonNameBase.NewNonViralInstance(Rank.SUBGENUS());
522
        nonViralName.setGenusOrUninomial("Genus");
523
        nonViralName.setInfraGenericEpithet("subgenus");
524
        nonViralName.setAuthorshipCache(author);
525

    
526
        //test ordinary infrageneric
527
        List<TaggedText> subGenusNameCacheTagged = strategy.getInfraGenusTaggedNameCache(nonViralName);
528
        String subGenusNameCache = TaggedCacheHelper.createString(subGenusNameCacheTagged);
529
        assertEquals("Subgenus name should be 'Genus subg. subgenus'.", "Genus subg. subgenus", subGenusNameCache);
530
        String subGenusTitle = strategy.getTitleCache(nonViralName);
531
        assertEquals("Subgenus name should be 'Genus subg. subgenus Anyauthor'.", "Genus subg. subgenus Anyauthor", subGenusTitle);
532

    
533
        //test species aggregates and species groups
534
        nonViralName.setRank(Rank.SPECIESAGGREGATE());
535
        nonViralName.setSpecificEpithet("myspecies");
536
        nonViralName.setInfraGenericEpithet(null);
537
        nonViralName.setAuthorshipCache(null);
538

    
539
        List<TaggedText> aggrNameCacheTagged = strategy.getInfraGenusTaggedNameCache(nonViralName);
540

    
541
        String aggrNameCache = TaggedCacheHelper.createString(aggrNameCacheTagged);
542
        assertEquals("Species aggregate name should be 'Genus myspecies aggr.'.", "Genus myspecies aggr.", aggrNameCache);
543
        String aggrNameTitle = strategy.getTitleCache(nonViralName);
544
        Assert.assertTrue("Species aggregate should not include author information.", aggrNameTitle.indexOf(author) == -1);
545
        assertEquals("Species aggregate name should be 'Genus myspecies aggr.'.", "Genus myspecies aggr.", aggrNameTitle);
546
        nonViralName.setRank(Rank.SPECIESGROUP());
547
        String groupNameTitle = strategy.getTitleCache(nonViralName);
548
        assertEquals("Species group name should be 'Genus myspecies species group'.", "Genus myspecies species group", groupNameTitle);
549

    
550
        //test species aggregates and species groups with infrageneric information
551
        //TODO check if groups do ever have infrageneric epithets
552
        nonViralName.setRank(Rank.SPECIESAGGREGATE());
553
        nonViralName.setSpecificEpithet("myspecies");
554
        nonViralName.setInfraGenericEpithet("Infragenus");
555

    
556

    
557
        aggrNameCacheTagged = strategy.getInfraGenusTaggedNameCache(nonViralName);
558
        aggrNameCache = TaggedCacheHelper.createString(aggrNameCacheTagged);
559
        assertEquals("Species aggregate name should be 'Genus (Infragenus) myspecies aggr.'.", "Genus (Infragenus) myspecies aggr.", aggrNameCache);
560

    
561
        aggrNameTitle = strategy.getTitleCache(nonViralName);
562
        Assert.assertTrue("Species aggregate should not include author information.", aggrNameTitle.indexOf(author) == -1);
563
        assertEquals("Species aggregate name should be 'Genus (Infragenus) myspecies aggr.'.", "Genus (Infragenus) myspecies aggr.", aggrNameTitle);
564

    
565
        nonViralName.setRank(Rank.SPECIESGROUP());
566
        groupNameTitle = strategy.getTitleCache(nonViralName);
567
        assertEquals("Species group name should be 'Genus (Infragenus) myspecies species group'.", "Genus (Infragenus) myspecies species group", groupNameTitle);
568

    
569
        //aggregates with author and nom.ref. information #4288
570
        nonViralName.setRank(Rank.SPECIESAGGREGATE());
571
        nonViralName.setSpecificEpithet("myspecies");
572
        nonViralName.setInfraGenericEpithet(null);
573
        nonViralName.setAuthorshipCache("L.");
574

    
575
        aggrNameCacheTagged = strategy.getTaggedTitle(nonViralName);
576
        aggrNameCache = TaggedCacheHelper.createString(aggrNameCacheTagged);
577
        assertEquals("Species aggregate name should be 'Genus myspecies L.'.", "Genus myspecies L.", aggrNameCache);
578

    
579
    }
580

    
581
    /**
582
     * Test method for {@link eu.etaxonomy.cdm.strategy.cache.name.NonViralNameDefaultCacheStrategy#getTaggedName(eu.etaxonomy.cdm.model.name.NonViralName)}.
583
     */
584
    @Test
585
    public void testGetTaggedNameSpeciesAggregate() {
586
        BotanicalName speciesAggregate = TaxonNameBase.NewBotanicalInstance(Rank.SPECIESAGGREGATE());
587
        speciesAggregate.setGenusOrUninomial("Mygenus");
588
        speciesAggregate.setSpecificEpithet("myspecies");
589
        List<TaggedText> taggedName = strategy.getTaggedName(speciesAggregate);
590
        Assert.assertEquals("1rd tag must be genus epithet", "Mygenus", taggedName.get(0).getText());
591
        Assert.assertEquals("2rd tag must be species epithet", "myspecies", taggedName.get(1).getText());
592
        Assert.assertEquals("3rd tag must be aggregate marker", "aggr.",taggedName.get(2).getText());
593
    }
594

    
595

    
596
    @Test
597
    public void testGetTaggedNameSubspecies(){
598
        List<TaggedText> taggedName = strategy.getTaggedName(subSpeciesName);
599
        Assert.assertEquals("First tag should be 'Abies'", "Abies", taggedName.get(0).getText());
600
        Assert.assertEquals("Second tag should be 'alba'", "alba", taggedName.get(1).getText());
601
        Assert.assertEquals("Third tag should be subspecies rank, and rank abbreviatioin should be subsp.", "subsp.", taggedName.get(2).getText());
602
        Assert.assertEquals("Fourth tag should be 'beta'", "beta", taggedName.get(3).getText());
603
        //to be continued
604

    
605
    }
606

    
607
    @Test
608
    public void testTitleCacheHtmlTagged(){
609
    	HTMLTagRules rules = new HTMLTagRules().addRule(TagEnum.name, "i");
610
    	Assert.assertEquals("<i>Abies alba</i>", strategy.getTitleCache(speciesName, rules));
611
    	rules.addRule(TagEnum.name, "b");
612
    	Assert.assertEquals("<b><i>Abies alba</i></b>", strategy.getTitleCache(speciesName, rules));
613
    	speciesName.setCombinationAuthorship(author);
614
    	Assert.assertEquals("<b><i>Abies alba</i></b> L.", strategy.getTitleCache(speciesName, rules));
615
    	rules.addRule(TagEnum.authors, "i");
616
    	Assert.assertEquals("<b><i>Abies alba</i></b> <i>L.</i>", strategy.getTitleCache(speciesName, rules));
617
    	rules = new HTMLTagRules().addRule(TagEnum.name, "i").addRule(TagEnum.name, "b").addRule(TagEnum.authors, "b");
618
    	Assert.assertEquals("<b><i>Abies alba</i> L.</b>", strategy.getTitleCache(speciesName, rules));
619

    
620
    }
621

    
622
    @Test //#2888
623
    public void testAutonymWithExAuthor(){
624
    	BotanicalName name = TaxonNameBase.NewBotanicalInstance(Rank.FORM());
625
    	name.setGenusOrUninomial("Euphorbia");
626
    	name.setSpecificEpithet("atropurpurea");
627
    	name.setInfraSpecificEpithet("atropurpurea");
628
    	Team combTeam = Team.NewTitledInstance("Combauthor", "Combauthor");
629
    	name.setCombinationAuthorship(combTeam);
630
    	Team exCombTeam = Team.NewTitledInstance("Excomb", "Excomb");
631
    	name.setExCombinationAuthorship(exCombTeam);
632

    
633
    	Assert.assertEquals("", "Euphorbia atropurpurea Excomb ex Combauthor f. atropurpurea", name.getTitleCache());
634
    }
635

    
636

    
637
}
(3-3/5)