Merge branch 'features/JAL-2526sequenceCursor' into
[jalview.git] / test / jalview / datamodel / SequenceTest.java
index c5850dc..97a75f9 100644 (file)
@@ -1265,24 +1265,58 @@ public class SequenceTest
     seq.setDatasetSequence(seq2);
   }
 
-  @Test
-  public void testFindPositions()
+  @Test(groups = { "Functional" })
+  public void testFindFeatures()
   {
-    SequenceI sq = new Sequence("Seq", "ABC--DE-F", 8, 13);
-
-    Range range = sq.findPositions(1, 4); // BC
-    assertEquals(new Range(9, 10), range);
-
-    range = sq.findPositions(2, 4); // C
-    assertEquals(new Range(10, 10), range);
-
-    assertNull(sq.findPositions(3, 4)); // all gaps
+    SequenceI sq = new Sequence("test/8-16", "-ABC--DEF--GHI--");
+    sq.createDatasetSequence();
 
-    range = sq.findPositions(2, 6); // CDE
-    assertEquals(new Range(10, 12), range);
+    assertTrue(sq.findFeatures(1, 99).isEmpty());
 
-    range = sq.findPositions(3, 7); // DE
-    assertEquals(new Range(11, 12), range);
+    // add non-positional feature
+    SequenceFeature sf0 = new SequenceFeature("Cath", "desc", 0, 0, 2f,
+            null);
+    sq.addSequenceFeature(sf0);
+    // add feature on BCD
+    SequenceFeature sf1 = new SequenceFeature("Cath", "desc", 9, 11, 2f,
+            null);
+    sq.addSequenceFeature(sf1);
+    // add feature on DE
+    SequenceFeature sf2 = new SequenceFeature("Cath", "desc", 11, 12, 2f,
+            null);
+    sq.addSequenceFeature(sf2);
+    // add contact feature at [B, H]
+    SequenceFeature sf3 = new SequenceFeature("Disulphide bond", "desc", 9,
+            15, 2f,
+            null);
+    sq.addSequenceFeature(sf3);
+    // add contact feature at [F, G]
+    SequenceFeature sf4 = new SequenceFeature("Disulfide Bond", "desc", 13,
+            14, 2f,
+            null);
+    sq.addSequenceFeature(sf4);
+
+    // no features in columns 1-2 (-A)
+    List<SequenceFeature> found = sq.findFeatures(1, 2);
+    assertTrue(found.isEmpty());
+
+    // columns 1-6 (-ABC--) includes BCD and B/H feature but not DE
+    found = sq.findFeatures(1, 6);
+    assertEquals(2, found.size());
+    assertTrue(found.contains(sf1));
+    assertTrue(found.contains(sf3));
+
+    // columns 5-6 (--) includes (enclosing) BCD but not (contact) B/H feature
+    found = sq.findFeatures(5, 6);
+    assertEquals(1, found.size());
+    assertTrue(found.contains(sf1));
+
+    // columns 7-10 (DEF-) includes BCD, DE, F/G but not B/H feature
+    found = sq.findFeatures(7, 10);
+    assertEquals(3, found.size());
+    assertTrue(found.contains(sf1));
+    assertTrue(found.contains(sf2));
+    assertTrue(found.contains(sf4));
   }
 
   @Test(groups = { "Functional" })
@@ -1366,48 +1400,6 @@ public class SequenceTest
   }
 
   @Test
-  public void testFindPositions_withCursor()
-  {
-    Sequence sq = new Sequence("Seq", "ABC--DE-F", 8, 13);
-  
-    // find positions for columns 1-4 (BC--) given E cursor
-    Range range = sq.findPositions(1, 4, new SequenceCursor(sq, 12, 7, 0)); // BC
-    assertEquals(new Range(9, 10), range);
-
-    // repeat using B cursor
-    range = sq.findPositions(1, 4, new SequenceCursor(sq, 9, 2, 0)); // BC
-    assertEquals(new Range(9, 10), range);
-  
-    // find positions for columns 2-4 (C--) given A cursor
-    range = sq.findPositions(2, 4, new SequenceCursor(sq, 8, 1, 0)); // C
-    assertEquals(new Range(10, 10), range);
-  
-    // gapped region
-    assertNull(sq.findPositions(3, 4, new SequenceCursor(sq, 10, 3, 0)));
-    assertNull(sq.findPositions(3, 4, new SequenceCursor(sq, 12, 7, 0)));
-  
-    // find positions for columns 2-6 (C--DE) given B cursor
-    range = sq.findPositions(2, 6, new SequenceCursor(sq, 9, 2, 0)); // CDE
-    assertEquals(new Range(10, 12), range);
-
-    // repeat using C as cursor
-    range = sq.findPositions(2, 6, new SequenceCursor(sq, 10, 3, 0));
-    assertEquals(new Range(10, 12), range);
-
-    // repeat using D as cursor
-    range = sq.findPositions(2, 6, new SequenceCursor(sq, 11, 6, 0));
-    assertEquals(new Range(10, 12), range);
-
-    // repeat using E as cursor
-    range = sq.findPositions(2, 6, new SequenceCursor(sq, 12, 7, 0));
-    assertEquals(new Range(10, 12), range);
-
-    // repeat using F as cursor
-    range = sq.findPositions(2, 6, new SequenceCursor(sq, 13, 9, 0));
-    assertEquals(new Range(10, 12), range);
-  }
-
-  @Test
   public void testIsValidCursor()
   {
     Sequence sq = new Sequence("Seq", "ABC--DE-F", 8, 13);