+package jalview.gui;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertTrue;
+
+import jalview.ext.so.SequenceOntology;
+import jalview.io.gff.SequenceOntologyFactory;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+public class FeatureTypeSettingsTest
+{
+ @BeforeClass(alwaysRun = true)
+ public void setUp()
+ {
+ SequenceOntologyFactory.setInstance(new SequenceOntology());
+ }
+
+ @AfterClass(alwaysRun = true)
+ public void tearDown()
+ {
+ SequenceOntologyFactory.setInstance(null);
+ }
+
+ @Test(groups="Functional")
+ public void testfindSequenceOntologyGroupings()
+ {
+ /*
+ * typical gnomAD feature types, plus the top level 'sequence_variant' as in dbSNP
+ */
+ List<String> featureTypes = Arrays.asList("sequence_variant",
+ "inframe_insertion", "stop_lost", "stop_gained",
+ "5_prime_UTR_variant", "non_coding_transcript_exon_variant",
+ "synonymous_variant", "inframe_deletion", "frameshift_variant",
+ "upstream_gene_variant", "splice_region_variant",
+ "missense_variant");
+
+ /*
+ * for stop_gained:
+ * transcript_variant further adds 5_prime_UTR_variant,
+ * non_coding_transcript_exon_variant, synonymous_variant, splice_region_variant
+ * feature_variant further adds upstream_gene_variant
+ * sequence_variant further adds sequence_variant
+ */
+ Map<String, List<String>> map = FeatureTypeSettings
+ .findSequenceOntologyGroupings("stop_gained", featureTypes);
+ assertEquals(map.size(), 10);
+
+ /*
+ * feature_truncation adds inframe_deletion
+ */
+ List<String> terms = map.get("feature_truncation");
+ assertEquals(terms.size(), 1);
+ assertTrue(terms.contains("inframe_deletion"));
+
+ /*
+ * nonsynonymous_variant adds stop_lost, missense_variant
+ */
+ terms = map.get("nonsynonymous_variant");
+ assertEquals(terms.size(), 2);
+ assertEquals(terms.toString(), "[missense_variant, stop_lost]");
+
+ /*
+ * inframe_variant further adds inframe_deletion, inframe_insertion
+ */
+ terms = map.get("inframe_variant");
+ assertEquals(terms.size(), 4);
+ assertEquals(terms.toString(),
+ "[inframe_deletion, inframe_insertion, missense_variant, stop_lost]");
+
+ /*
+ * protein_altering_variant further adds frameshift_variant
+ */
+ terms = map.get("protein_altering_variant");
+ assertEquals(terms.size(), 5);
+ assertEquals(terms.toString(),
+ "[frameshift_variant, inframe_deletion, inframe_insertion, "
+ + "missense_variant, stop_lost]");
+
+ /*
+ * coding_sequence_variant further adds synonymous_variant
+ */
+ terms = map.get("coding_sequence_variant");
+ assertEquals(terms.size(), 6);
+ assertEquals(terms.toString(),
+ "[frameshift_variant, inframe_deletion, inframe_insertion, "
+ + "missense_variant, stop_lost, synonymous_variant]");
+
+ /*
+ * coding_transcript_variant further adds 5_prime_UTR_variant
+ */
+ terms = map.get("coding_transcript_variant");
+ assertEquals(terms.size(), 7);
+ assertEquals(terms.toString(),
+ "[5_prime_UTR_variant, frameshift_variant, inframe_deletion, "
+ + "inframe_insertion, missense_variant, stop_lost, synonymous_variant]");
+
+ /*
+ * exon_variant further adds non_coding_transcript_exon_variant
+ */
+ terms = map.get("exon_variant");
+ assertEquals(terms.size(), 8);
+ assertEquals(terms.toString(),
+ "[5_prime_UTR_variant, frameshift_variant, inframe_deletion, "
+ + "inframe_insertion, missense_variant, "
+ + "non_coding_transcript_exon_variant, stop_lost, synonymous_variant]");
+
+ /*
+ * transcript_variant further adds splice_region_variant
+ */
+ terms = map.get("transcript_variant");
+ assertEquals(terms.size(), 9);
+ assertEquals(terms.toString(),
+ "[5_prime_UTR_variant, frameshift_variant, inframe_deletion, "
+ + "inframe_insertion, missense_variant, "
+ + "non_coding_transcript_exon_variant, splice_region_variant, "
+ + "stop_lost, synonymous_variant]");
+
+ /*
+ * feature_variant further adds upstream_gene_variant
+ */
+ terms = map.get("feature_variant");
+ assertEquals(terms.size(), 10);
+ assertEquals(terms.toString(),
+ "[5_prime_UTR_variant, frameshift_variant, inframe_deletion, "
+ + "inframe_insertion, missense_variant, "
+ + "non_coding_transcript_exon_variant, splice_region_variant, "
+ + "stop_lost, synonymous_variant, upstream_gene_variant]");
+
+ /*
+ * sequence_variant adds itself
+ */
+ terms = map.get("sequence_variant");
+ assertEquals(terms.size(), 11);
+ assertEquals(terms.toString(),
+ "[5_prime_UTR_variant, frameshift_variant, inframe_deletion, "
+ + "inframe_insertion, missense_variant, "
+ + "non_coding_transcript_exon_variant, sequence_variant, splice_region_variant, "
+ + "stop_lost, synonymous_variant, upstream_gene_variant]");
+ }
+}