Merge branch 'develop' into features/JAL-3010ontologyFeatureSettings
[jalview.git] / test / jalview / datamodel / ontology / OntologyBaseTest.java
1 package jalview.datamodel.ontology;
2
3 import static org.testng.Assert.assertEquals;
4 import static org.testng.Assert.assertTrue;
5
6 import jalview.ext.so.SequenceOntology;
7 import jalview.io.gff.SequenceOntologyFactory;
8
9 import java.util.Arrays;
10 import java.util.List;
11 import java.util.Map;
12
13 import org.testng.annotations.AfterClass;
14 import org.testng.annotations.BeforeClass;
15 import org.testng.annotations.Test;
16
17 public class OntologyBaseTest
18 {
19   @BeforeClass(alwaysRun = true)
20   public void setUp()
21   {
22     SequenceOntologyFactory.setInstance(new SequenceOntology());
23   }
24
25   @AfterClass(alwaysRun = true)
26   public void tearDown()
27   {
28     SequenceOntologyFactory.setInstance(null);
29   }
30
31   @Test(groups = "Functional")
32   public void testfindSequenceOntologyGroupings_nucleotide()
33   {
34     /*
35      * typical gnomAD feature types, plus the top level 'sequence_variant' as in dbSNP
36      */
37     List<String> featureTypes = Arrays.asList("sequence_variant",
38             "inframe_insertion", "stop_lost", "stop_gained",
39             "5_prime_UTR_variant", "non_coding_transcript_exon_variant",
40             "synonymous_variant", "inframe_deletion", "frameshift_variant",
41             "upstream_gene_variant", "splice_region_variant",
42             "missense_variant");
43
44     /*
45      * hierarchy from stop_gained
46      */
47     Map<String, List<String>> map = SequenceOntologyFactory.getInstance()
48             .findSequenceOntologyGroupings("stop_gained", featureTypes);
49     assertEquals(map.size(), 10);
50
51     /*
52      * feature_truncation adds inframe_deletion
53      */
54     List<String> terms = map.get("feature_truncation");
55     assertEquals(terms.size(), 1);
56     assertTrue(terms.contains("inframe_deletion"));
57
58     /*
59      * nonsynonymous_variant adds stop_lost, missense_variant
60      */
61     terms = map.get("nonsynonymous_variant");
62     assertEquals(terms.size(), 2);
63     assertEquals(terms.toString(), "[missense_variant, stop_lost]");
64
65     /*
66      * inframe_variant further adds inframe_deletion, inframe_insertion
67      */
68     terms = map.get("inframe_variant");
69     assertEquals(terms.size(), 4);
70     assertEquals(terms.toString(),
71             "[inframe_deletion, inframe_insertion, missense_variant, stop_lost]");
72
73     /*
74      * protein_altering_variant further adds frameshift_variant
75      */
76     terms = map.get("protein_altering_variant");
77     assertEquals(terms.size(), 5);
78     assertEquals(terms.toString(),
79             "[frameshift_variant, inframe_deletion, inframe_insertion, "
80                     + "missense_variant, stop_lost]");
81
82     /*
83      * coding_sequence_variant further adds synonymous_variant
84      */
85     terms = map.get("coding_sequence_variant");
86     assertEquals(terms.size(), 6);
87     assertEquals(terms.toString(),
88             "[frameshift_variant, inframe_deletion, inframe_insertion, "
89                     + "missense_variant, stop_lost, synonymous_variant]");
90
91     /*
92      * coding_transcript_variant further adds 5_prime_UTR_variant
93      */
94     terms = map.get("coding_transcript_variant");
95     assertEquals(terms.size(), 7);
96     assertEquals(terms.toString(),
97             "[5_prime_UTR_variant, frameshift_variant, inframe_deletion, "
98                     + "inframe_insertion, missense_variant, stop_lost, synonymous_variant]");
99
100     /*
101      * exon_variant further adds non_coding_transcript_exon_variant
102      */
103     terms = map.get("exon_variant");
104     assertEquals(terms.size(), 8);
105     assertEquals(terms.toString(),
106             "[5_prime_UTR_variant, frameshift_variant, inframe_deletion, "
107                     + "inframe_insertion, missense_variant, "
108                     + "non_coding_transcript_exon_variant, stop_lost, synonymous_variant]");
109
110     /*
111      * transcript_variant further adds splice_region_variant
112      */
113     terms = map.get("transcript_variant");
114     assertEquals(terms.size(), 9);
115     assertEquals(terms.toString(),
116             "[5_prime_UTR_variant, frameshift_variant, inframe_deletion, "
117                     + "inframe_insertion, missense_variant, "
118                     + "non_coding_transcript_exon_variant, splice_region_variant, "
119                     + "stop_lost, synonymous_variant]");
120
121     /*
122      * feature_variant further adds upstream_gene_variant
123      */
124     terms = map.get("feature_variant");
125     assertEquals(terms.size(), 10);
126     assertEquals(terms.toString(),
127             "[5_prime_UTR_variant, frameshift_variant, inframe_deletion, "
128                     + "inframe_insertion, missense_variant, "
129                     + "non_coding_transcript_exon_variant, splice_region_variant, "
130                     + "stop_lost, synonymous_variant, upstream_gene_variant]");
131
132     /*
133      * sequence_variant adds itself
134      */
135     terms = map.get("sequence_variant");
136     assertEquals(terms.size(), 11);
137     assertEquals(terms.toString(),
138             "[5_prime_UTR_variant, frameshift_variant, inframe_deletion, "
139                     + "inframe_insertion, missense_variant, "
140                     + "non_coding_transcript_exon_variant, sequence_variant, splice_region_variant, "
141                     + "stop_lost, synonymous_variant, upstream_gene_variant]");
142   }
143
144   @Test(groups = "Functional")
145   public void testfindSequenceOntologyGroupings_peptide()
146   {
147     /*
148      * typical Uniprot feature types
149      */
150     List<String> featureTypes = Arrays.asList("BETA-TURN-IR", "NEST-RL",
151             "BETA-BULGE", "ALPHA-BETA-MOTIF", "ASX-TURN-IR",
152             "GAMMA-TURN-CLASSIC", "GAMMA-TURN-INVERSE", "BETA-TURN-IL",
153             "BETA-TURN-IIL");
154   
155     /*
156      * hierarchy from GAMMA-TURN-INVERSE
157      * this is a synonym for 
158      */
159     Map<String, List<String>> map = SequenceOntologyFactory.getInstance()
160             .findSequenceOntologyGroupings("TURN", featureTypes);
161     assertEquals(map.size(), 10);
162   }
163
164 }