3 import static org.testng.AssertJUnit.assertEquals;
4 import static org.testng.AssertJUnit.assertNull;
5 import static org.testng.AssertJUnit.fail;
9 import org.testng.annotations.Test;
11 public class DnaUtilsTest
14 * Tests for parsing an ENA/GenBank location specifier
16 * @see http://www.insdc.org/files/feature_table.html#3.4
18 @Test(groups = { "Functional" })
19 public void testParseLocation()
24 List<int[]> ranges = DnaUtils.parseLocation("467");
25 assertEquals(1, ranges.size());
26 assertEquals(467, ranges.get(0)[0]);
27 assertEquals(467, ranges.get(0)[1]);
32 ranges = DnaUtils.parseLocation("12..78");
33 assertEquals(1, ranges.size());
34 assertEquals(12, ranges.get(0)[0]);
35 assertEquals(78, ranges.get(0)[1]);
38 * join of simple ranges
40 ranges = DnaUtils.parseLocation("join(12..78,134..202,322..345)");
41 assertEquals(3, ranges.size());
42 assertEquals(12, ranges.get(0)[0]);
43 assertEquals(78, ranges.get(0)[1]);
44 assertEquals(134, ranges.get(1)[0]);
45 assertEquals(202, ranges.get(1)[1]);
46 assertEquals(322, ranges.get(2)[0]);
47 assertEquals(345, ranges.get(2)[1]);
50 * complement of a simple range
52 ranges = DnaUtils.parseLocation("complement(34..126)");
53 assertEquals(1, ranges.size());
54 assertEquals(126, ranges.get(0)[0]);
55 assertEquals(34, ranges.get(0)[1]);
58 * complement of a join
61 .parseLocation("complement(join(2691..4571,4918..5163))");
62 assertEquals(2, ranges.size());
63 assertEquals(5163, ranges.get(0)[0]);
64 assertEquals(4918, ranges.get(0)[1]);
65 assertEquals(4571, ranges.get(1)[0]);
66 assertEquals(2691, ranges.get(1)[1]);
69 * join of two complements
72 .parseLocation("join(complement(4918..5163),complement(2691..4571))");
73 assertEquals(2, ranges.size());
74 assertEquals(5163, ranges.get(0)[0]);
75 assertEquals(4918, ranges.get(0)[1]);
76 assertEquals(4571, ranges.get(1)[0]);
77 assertEquals(2691, ranges.get(1)[1]);
80 * join complement to non-complement
81 * @see http://www.ncbi.nlm.nih.gov/genbank/genomesubmit_annotation/ Transpliced Genes
84 .parseLocation("join(complement(36618..36700),86988..87064)");
85 assertEquals(2, ranges.size());
86 assertEquals(36700, ranges.get(0)[0]);
87 assertEquals(36618, ranges.get(0)[1]);
88 assertEquals(86988, ranges.get(1)[0]);
89 assertEquals(87064, ranges.get(1)[1]);
92 * beyond 5' or 3' locus
94 ranges = DnaUtils.parseLocation("<34..126");
95 assertEquals(1, ranges.size());
96 assertEquals(34, ranges.get(0)[0]);
97 assertEquals(126, ranges.get(0)[1]);
98 ranges = DnaUtils.parseLocation("35..>127");
99 assertEquals(1, ranges.size());
100 assertEquals(35, ranges.get(0)[0]);
101 assertEquals(127, ranges.get(0)[1]);
104 * valid things we don't yet handle
106 assertNull(DnaUtils.parseLocation("34.126"));
107 assertNull(DnaUtils.parseLocation("34^126"));
108 assertNull(DnaUtils.parseLocation("order(34..126,130..180)"));
113 assertNull(DnaUtils.parseLocation(""));
114 assertNull(DnaUtils.parseLocation("JOIN(1..2)"));
115 assertNull(DnaUtils.parseLocation("join(1..2"));
116 assertNull(DnaUtils.parseLocation("join(1..2("));
117 assertNull(DnaUtils.parseLocation("complement(1..2"));
118 assertNull(DnaUtils.parseLocation("complement(1..2("));
121 assertNull(DnaUtils.parseLocation(null));
122 fail("Expected exception");
123 } catch (NullPointerException e)
129 * nested joins are not allowed; just as well since this fails to parse
130 * (splitting tokens by comma fragments the inner join expression)
133 .parseLocation("join(1..2,join(4..5,10..12),18..22)"));
135 * complement may not enclose multiple ranges
136 * parsing fails for the same reason
139 .parseLocation("join(complement(36618..36700,4000..4200),86988..87064)"));