JAL-2114 parser + tests for GenBank location descriptors
[jalview.git] / test / jalview / util / DnaUtilsTest.java
1 package jalview.util;
2
3 import static org.testng.AssertJUnit.assertEquals;
4 import static org.testng.AssertJUnit.assertNull;
5 import static org.testng.AssertJUnit.fail;
6
7 import java.util.List;
8
9 import org.testng.annotations.Test;
10
11 public class DnaUtilsTest
12 {
13   /**
14    * Tests for parsing an ENA/GenBank location specifier
15    * 
16    * @see http://www.insdc.org/files/feature_table.html#3.4
17    */
18   @Test(groups = { "Functional" })
19   public void testParseLocation()
20   {
21     /*
22      * simple range
23      */
24     List<int[]> ranges = DnaUtils.parseLocation("12..78");
25     assertEquals(1, ranges.size());
26     assertEquals(12, ranges.get(0)[0]);
27     assertEquals(78, ranges.get(0)[1]);
28
29     /*
30      * join of simple ranges
31      */
32     ranges = DnaUtils.parseLocation("join(12..78,134..202,322..345)");
33     assertEquals(3, ranges.size());
34     assertEquals(12, ranges.get(0)[0]);
35     assertEquals(78, ranges.get(0)[1]);
36     assertEquals(134, ranges.get(1)[0]);
37     assertEquals(202, ranges.get(1)[1]);
38     assertEquals(322, ranges.get(2)[0]);
39     assertEquals(345, ranges.get(2)[1]);
40
41     /*
42      * complement of a simple range
43      */
44     ranges = DnaUtils.parseLocation("complement(34..126)");
45     assertEquals(1, ranges.size());
46     assertEquals(126, ranges.get(0)[0]);
47     assertEquals(34, ranges.get(0)[1]);
48
49     /*
50      * complement of a join
51      */
52     ranges = DnaUtils
53             .parseLocation("complement(join(2691..4571,4918..5163))");
54     assertEquals(2, ranges.size());
55     assertEquals(5163, ranges.get(0)[0]);
56     assertEquals(4918, ranges.get(0)[1]);
57     assertEquals(4571, ranges.get(1)[0]);
58     assertEquals(2691, ranges.get(1)[1]);
59
60     /*
61      * join of two complements
62      */
63     ranges = DnaUtils
64             .parseLocation("join(complement(4918..5163),complement(2691..4571))");
65     assertEquals(2, ranges.size());
66     assertEquals(5163, ranges.get(0)[0]);
67     assertEquals(4918, ranges.get(0)[1]);
68     assertEquals(4571, ranges.get(1)[0]);
69     assertEquals(2691, ranges.get(1)[1]);
70
71     /*
72      * join complement to non-complement
73      * @see http://www.ncbi.nlm.nih.gov/genbank/genomesubmit_annotation/ Transpliced Genes
74      */
75     ranges = DnaUtils
76             .parseLocation("join(complement(36618..36700),86988..87064)");
77     assertEquals(2, ranges.size());
78     assertEquals(36700, ranges.get(0)[0]);
79     assertEquals(36618, ranges.get(0)[1]);
80     assertEquals(86988, ranges.get(1)[0]);
81     assertEquals(87064, ranges.get(1)[1]);
82
83     /*
84      * valid things we don't yet handle
85      */
86     assertNull(DnaUtils.parseLocation("<34..126"));
87     assertNull(DnaUtils.parseLocation("34..>126"));
88     assertNull(DnaUtils.parseLocation("34.126"));
89     assertNull(DnaUtils.parseLocation("34^126"));
90
91     /*
92      * invalid things
93      */
94     assertNull(DnaUtils.parseLocation(""));
95     assertNull(DnaUtils.parseLocation("JOIN(1..2)"));
96     assertNull(DnaUtils.parseLocation("join(1..2"));
97     try
98     {
99       assertNull(DnaUtils.parseLocation(null));
100       fail("Expected exception");
101     } catch (NullPointerException e)
102     {
103       // expected
104     }
105   }
106
107 }