Project

General

Profile

Download (9.04 KB) Statistics
| Branch: | Tag: | Revision:
1
// $Id$
2
/**
3
* Copyright (C) 2017 EDIT
4
* European Distributed Institute of Taxonomy
5
* http://www.e-taxonomy.eu
6
*
7
* The contents of this file are subject to the Mozilla Public License Version 1.1
8
* See LICENSE.TXT at the top of this package for the full license terms.
9
*/
10
package eu.etaxonomy.cdm.strategy.homotypicgroup;
11

    
12
import org.junit.Assert;
13
import org.junit.Before;
14
import org.junit.BeforeClass;
15
import org.junit.Test;
16

    
17
import eu.etaxonomy.cdm.model.agent.Person;
18
import eu.etaxonomy.cdm.model.name.HomotypicalGroup;
19
import eu.etaxonomy.cdm.model.name.NameRelationshipType;
20
import eu.etaxonomy.cdm.model.name.Rank;
21
import eu.etaxonomy.cdm.model.name.TaxonName;
22
import eu.etaxonomy.cdm.model.name.TaxonNameFactory;
23
import eu.etaxonomy.cdm.model.taxon.Synonym;
24
import eu.etaxonomy.cdm.model.taxon.SynonymType;
25
import eu.etaxonomy.cdm.model.taxon.Taxon;
26
import eu.etaxonomy.cdm.model.term.DefaultTermInitializer;
27

    
28
/**
29
 * @author a.mueller
30
 * @since 22.04.2017
31
 *
32
 */
33
public class BasionymRelationCreatorTest {
34

    
35
    /**
36
     *
37
     */
38
    private static final String SPECIUS = "specius";
39
    private Taxon taxon1;
40
    private Synonym synonym1;
41
    private Synonym synonym2;
42
    private Synonym synonym3;
43
    private TaxonName accName1;
44
    private TaxonName synName1;
45
    private TaxonName synName2;
46
    private TaxonName synName3;
47
    private Person person1;
48
    private Person person2;
49
    private Person person3;
50
    private BasionymRelationCreator guesser;
51

    
52

    
53
    /**
54
     * @throws java.lang.Exception
55
     */
56
    @BeforeClass
57
    public static void setUpBeforeClass() throws Exception {
58
        if (NameRelationshipType.BASIONYM() == null){
59
            new DefaultTermInitializer().initialize();
60
        }
61
    }
62

    
63
    /**
64
     * @throws java.lang.Exception
65
     */
66
    @Before
67
    public void setUp() throws Exception {
68
        guesser = new BasionymRelationCreator();
69

    
70
        person1 = Person.NewInstance();
71
        person2 = Person.NewInstance();
72
        person3 = Person.NewInstance();
73
        person1.setNomenclaturalTitle("Pers1");
74
        person2.setNomenclaturalTitle("Pers2");
75
        person3.setNomenclaturalTitle("Pers3");
76

    
77
        accName1 = TaxonNameFactory.NewBotanicalInstance(Rank.SPECIES());
78
        synName1 = TaxonNameFactory.NewBotanicalInstance(Rank.SPECIES());
79
        synName2 = TaxonNameFactory.NewBotanicalInstance(Rank.SPECIES());
80
        synName3 = TaxonNameFactory.NewBotanicalInstance(Rank.SPECIES());
81
        accName1.setGenusOrUninomial("Accepted");
82
        synName1.setGenusOrUninomial("Genus1");
83
        synName2.setGenusOrUninomial("Genus2");
84
        synName3.setGenusOrUninomial("Genus3");
85
        accName1.setSpecificEpithet(SPECIUS);
86
        synName1.setSpecificEpithet(SPECIUS);
87
        synName2.setSpecificEpithet(SPECIUS);
88
        synName3.setSpecificEpithet(SPECIUS);
89

    
90
        taxon1 = Taxon.NewInstance(accName1, null);
91
        synonym1 = Synonym.NewInstance(synName1, null);
92
        synonym2 = Synonym.NewInstance(synName2, null);
93
        synonym3 = Synonym.NewInstance(synName3, null);
94

    
95
        taxon1.addSynonym(synonym1, SynonymType.SYNONYM_OF());
96
        taxon1.addSynonym(synonym2, SynonymType.SYNONYM_OF());
97
        taxon1.addSynonym(synonym3, SynonymType.SYNONYM_OF());
98
    }
99

    
100
    @Test
101
    public void testMatchingSimple() {
102
        accName1.setCombinationAuthorship(person1);
103
        synName1.setBasionymAuthorship(person1);
104
        synName2.setBasionymAuthorship(person1);
105
        synName2.setInfraSpecificEpithet(synName2.getSpecificEpithet());
106
        synName2.setSpecificEpithet("xyz");
107
        synName2.setRank(Rank.VARIETY());
108
        synName3.setBasionymAuthorship(person3);
109
        HomotypicalGroup accNameGroup = accName1.getHomotypicalGroup();
110
        guesser.invoke(taxon1);
111
        Assert.assertEquals("Accepted and synonym1 should have same homotypic group", accName1.getHomotypicalGroup(), synName1.getHomotypicalGroup());
112
        Assert.assertEquals("Accepted and synonym2 should have same homotypic group", accName1.getHomotypicalGroup(), synName2.getHomotypicalGroup());
113
        Assert.assertEquals("Homotypical group shoul be taken from basionym", accNameGroup, accName1.getHomotypicalGroup());
114
        Assert.assertNotEquals("Accepted and synonym3 should not have same homotypic group due to different author", accName1.getHomotypicalGroup(), synName3.getHomotypicalGroup());
115
        Assert.assertEquals(SynonymType.HOMOTYPIC_SYNONYM_OF(), synonym1.getType());
116
        Assert.assertEquals(SynonymType.HOMOTYPIC_SYNONYM_OF(), synonym2.getType());
117
        Assert.assertEquals(SynonymType.SYNONYM_OF(), synonym3.getType());
118
    }
119

    
120
    @Test
121
    public void testMatchingSynonym() {
122
        accName1.setBasionymAuthorship(person1);
123
        synName1.setCombinationAuthorship(person1);
124
        synName2.setBasionymAuthorship(person1);
125
        synName2.setInfraSpecificEpithet(synName2.getSpecificEpithet());
126
        synName2.setSpecificEpithet("xyz");
127
        synName2.setRank(Rank.VARIETY());
128
        synName3.setBasionymAuthorship(person3);
129
        HomotypicalGroup accNameGroup = accName1.getHomotypicalGroup();
130
        guesser.invoke(taxon1);
131
        Assert.assertEquals("Accepted and synonym1 should have same homotypic group", accName1.getHomotypicalGroup(), synName1.getHomotypicalGroup());
132
        Assert.assertEquals("Synonym1 and synonym2 should have same homotypic group", accName1.getHomotypicalGroup(), synName2.getHomotypicalGroup());
133
        Assert.assertEquals("Accepted and synonym2 should have same homotypic group", accName1.getHomotypicalGroup(), synName2.getHomotypicalGroup());
134
        Assert.assertEquals("Homotypical group shoul be taken from basionym", accNameGroup, accName1.getHomotypicalGroup());
135
        Assert.assertNotEquals("Accepted and synonym3 should not have same homotypic group due to different author", accName1.getHomotypicalGroup(), synName3.getHomotypicalGroup());
136
        Assert.assertEquals(SynonymType.HOMOTYPIC_SYNONYM_OF(), synonym1.getType());
137
        Assert.assertEquals(SynonymType.HOMOTYPIC_SYNONYM_OF(), synonym2.getType());
138
        Assert.assertEquals(SynonymType.SYNONYM_OF(), synonym3.getType());
139
    }
140

    
141
    @Test
142
    public void testNonMatchingSimple() {
143
        accName1.setCombinationAuthorship(person1);
144
        synName1.setBasionymAuthorship(person1);
145
        synName1.setSpecificEpithet("spefides");
146
        synName2.setBasionymAuthorship(person2);
147
        HomotypicalGroup accNameGroup = accName1.getHomotypicalGroup();
148
        guesser.invoke(taxon1);
149
        Assert.assertEquals("Homotypical group shoul be taken from basionym", accNameGroup, accName1.getHomotypicalGroup());
150
        Assert.assertNotEquals("Different last epithets should not match", accName1.getHomotypicalGroup(), synName1.getHomotypicalGroup());
151
        Assert.assertNotEquals("Different authors should not match", accName1.getHomotypicalGroup(), synName2.getHomotypicalGroup());
152
        Assert.assertNotEquals("Missing basionym author should not match", accName1.getHomotypicalGroup(), synName3.getHomotypicalGroup());
153
        Assert.assertEquals(SynonymType.SYNONYM_OF(), synonym1.getType());
154
        Assert.assertEquals(SynonymType.SYNONYM_OF(), synonym2.getType());
155
        Assert.assertEquals(SynonymType.SYNONYM_OF(), synonym3.getType());
156
    }
157

    
158
    @Test
159
    public void testMatchingNormalization() {
160
        accName1.setCombinationAuthorship(person1);
161
        synName1.setBasionymAuthorship(person1);
162
        synName1.setSpecificEpithet("specia");
163
        synName2.setBasionymAuthorship(person1);
164
        synName2.setInfraSpecificEpithet("specios");
165
        synName2.setSpecificEpithet("xyz");
166
        synName2.setRank(Rank.VARIETY());
167
        synName3.setBasionymAuthorship(person1);
168
        synName1.setSpecificEpithet("specium");
169

    
170
        guesser.invoke(taxon1);
171
        Assert.assertEquals("Accepted and synonym1 should have same homotypic group", accName1.getHomotypicalGroup(), synName1.getHomotypicalGroup());
172
        Assert.assertEquals("Accepted and synonym2 should have same homotypic group", accName1.getHomotypicalGroup(), synName2.getHomotypicalGroup());
173
        Assert.assertEquals("Accepted and synonym3 should have same homotypic group", accName1.getHomotypicalGroup(), synName3.getHomotypicalGroup());
174
        Assert.assertEquals(SynonymType.HOMOTYPIC_SYNONYM_OF(), synonym1.getType());
175
        Assert.assertEquals(SynonymType.HOMOTYPIC_SYNONYM_OF(), synonym2.getType());
176
        Assert.assertEquals(SynonymType.HOMOTYPIC_SYNONYM_OF(), synonym3.getType());
177
    }
178

    
179
    @Test
180
    public void testMatchingNomTitle() {
181
        accName1.setCombinationAuthorship(person1);
182
        synName1.setBasionymAuthorship(person2);
183
        guesser.invoke(taxon1);
184
        Assert.assertNotEquals("Accepted and synonym1 should NOT have same homotypic group", accName1.getHomotypicalGroup(), synName1.getHomotypicalGroup());
185
        Assert.assertEquals(SynonymType.SYNONYM_OF(), synonym1.getType());
186

    
187
        person2.setNomenclaturalTitle(person1.getNomenclaturalTitle());
188
        guesser.invoke(taxon1);
189
        Assert.assertEquals("Accepted and synonym1 should have same homotypic group", accName1.getHomotypicalGroup(), synName1.getHomotypicalGroup());
190
        Assert.assertEquals(SynonymType.HOMOTYPIC_SYNONYM_OF(), synonym1.getType());
191
    }
192

    
193
}
    (1-1/1)