public void testParseLocation()
{
/*
+ * single locus
+ */
+ List<int[]> ranges = DnaUtils.parseLocation("467");
+ assertEquals(1, ranges.size());
+ assertEquals(467, ranges.get(0)[0]);
+ assertEquals(467, ranges.get(0)[1]);
+
+ /*
* simple range
*/
- List<int[]> ranges = DnaUtils.parseLocation("12..78");
+ ranges = DnaUtils.parseLocation("12..78");
assertEquals(1, ranges.size());
assertEquals(12, ranges.get(0)[0]);
assertEquals(78, ranges.get(0)[1]);
assertEquals(87064, ranges.get(1)[1]);
/*
+ * beyond 5' or 3' locus
+ */
+ ranges = DnaUtils.parseLocation("<34..126");
+ assertEquals(1, ranges.size());
+ assertEquals(34, ranges.get(0)[0]);
+ assertEquals(126, ranges.get(0)[1]);
+ ranges = DnaUtils.parseLocation("35..>127");
+ assertEquals(1, ranges.size());
+ assertEquals(35, ranges.get(0)[0]);
+ assertEquals(127, ranges.get(0)[1]);
+
+ /*
* valid things we don't yet handle
*/
- assertNull(DnaUtils.parseLocation("<34..126"));
- assertNull(DnaUtils.parseLocation("34..>126"));
assertNull(DnaUtils.parseLocation("34.126"));
assertNull(DnaUtils.parseLocation("34^126"));
+ assertNull(DnaUtils.parseLocation("order(34..126,130..180)"));
/*
* invalid things
assertNull(DnaUtils.parseLocation(""));
assertNull(DnaUtils.parseLocation("JOIN(1..2)"));
assertNull(DnaUtils.parseLocation("join(1..2"));
+ assertNull(DnaUtils.parseLocation("join(1..2("));
+ assertNull(DnaUtils.parseLocation("complement(1..2"));
+ assertNull(DnaUtils.parseLocation("complement(1..2("));
try
{
assertNull(DnaUtils.parseLocation(null));
{
// expected
}
+
+ /*
+ * nested joins are not allowed; just as well since this fails to parse
+ * (splitting tokens by comma fragments the inner join expression)
+ */
+ assertNull(DnaUtils
+ .parseLocation("join(1..2,join(4..5,10..12),18..22)"));
+ /*
+ * complement may not enclose multiple ranges
+ * parsing fails for the same reason
+ */
+ assertNull(DnaUtils
+ .parseLocation("join(complement(36618..36700,4000..4200),86988..87064)"));
}
}