JAL-1941 Annotate3d tests should be in network group
[jalview.git] / test / jalview / util / DnaUtilsTest.java
index af76885..6623c13 100644 (file)
@@ -19,9 +19,17 @@ public class DnaUtilsTest
   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]);
@@ -81,12 +89,23 @@ public class DnaUtilsTest
     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
@@ -94,6 +113,9 @@ public class DnaUtilsTest
     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));
@@ -102,6 +124,19 @@ public class DnaUtilsTest
     {
       // 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)"));
   }
 
 }