JAL-2759 Rationalising hidden cols cursor, and sorting out coverage
[jalview.git] / test / jalview / datamodel / HiddenColumnsCursorTest.java
index 91cd3cd..dc627bc 100644 (file)
@@ -20,6 +20,7 @@
  */
 package jalview.datamodel;
 
+import static org.testng.Assert.assertNull;
 import static org.testng.AssertJUnit.assertEquals;
 
 import java.util.ArrayList;
@@ -29,6 +30,31 @@ import org.testng.annotations.Test;
 
 public class HiddenColumnsCursorTest
 {
+
+  @Test(groups = { "Functional" })
+  public void testConstructor()
+  {
+    HiddenColumnsCursor cursor = new HiddenColumnsCursor();
+    assertNull(cursor.findRegionForColumn(0, false));
+
+    List<int[]> hlist = new ArrayList<>();
+    cursor = new HiddenColumnsCursor(hlist);
+    assertNull(cursor.findRegionForColumn(0, false));
+
+    cursor = new HiddenColumnsCursor(hlist, 3, 12);
+    assertNull(cursor.findRegionForColumn(0, false));
+
+    hlist.add(new int[] { 3, 7 });
+    hlist.add(new int[] { 15, 25 });
+    cursor = new HiddenColumnsCursor(hlist);
+    HiddenCursorPosition p = cursor.findRegionForColumn(8, false);
+    assertEquals(1, p.getRegionIndex());
+
+    cursor = new HiddenColumnsCursor(hlist, 1, 5);
+    p = cursor.findRegionForColumn(8, false);
+    assertEquals(1, p.getRegionIndex());
+  }
+
   /**
    * Test the method which finds the corresponding region given a column
    */
@@ -37,78 +63,122 @@ public class HiddenColumnsCursorTest
   {
     HiddenColumnsCursor cursor = new HiddenColumnsCursor();
     
-    int regionIndex = cursor.findRegionForColumn(20);
-    assertEquals(-1, regionIndex);
+    HiddenCursorPosition pos = cursor.findRegionForColumn(20, false);
+    assertNull(pos);
     
     List<int[]> hidden = new ArrayList<>();
     hidden.add(new int[] { 53, 76 });
     hidden.add(new int[] { 104, 125 });
-    cursor.resetCursor(hidden);
 
-    regionIndex = cursor.findRegionForColumn(126);
+    cursor = new HiddenColumnsCursor(hidden);
+
+    int regionIndex = cursor.findRegionForColumn(126, false).getRegionIndex();
     assertEquals(2, regionIndex);
 
-    regionIndex = cursor.findRegionForColumn(125);
+    regionIndex = cursor.findRegionForColumn(125, false).getRegionIndex();
     assertEquals(1, regionIndex);
 
-    regionIndex = cursor.findRegionForColumn(108);
+    regionIndex = cursor.findRegionForColumn(108, false).getRegionIndex();
     assertEquals(1, regionIndex);
 
-    regionIndex = cursor.findRegionForColumn(104);
+    regionIndex = cursor.findRegionForColumn(104, false).getRegionIndex();
     assertEquals(1, regionIndex);
 
-    regionIndex = cursor.findRegionForColumn(103);
+    regionIndex = cursor.findRegionForColumn(103, false).getRegionIndex();
     assertEquals(1, regionIndex);
 
-    regionIndex = cursor.findRegionForColumn(77);
+    regionIndex = cursor.findRegionForColumn(77, false).getRegionIndex();
     assertEquals(1, regionIndex);
 
-    regionIndex = cursor.findRegionForColumn(76);
+    regionIndex = cursor.findRegionForColumn(76, false).getRegionIndex();
     assertEquals(0, regionIndex);
 
-    regionIndex = cursor.findRegionForColumn(53);
+    regionIndex = cursor.findRegionForColumn(53, false).getRegionIndex();
     assertEquals(0, regionIndex);
 
-    regionIndex = cursor.findRegionForColumn(52);
+    regionIndex = cursor.findRegionForColumn(52, false).getRegionIndex();
     assertEquals(0, regionIndex);
 
-    regionIndex = cursor.findRegionForColumn(0);
+    regionIndex = cursor.findRegionForColumn(0, false).getRegionIndex();
     assertEquals(0, regionIndex);
+
+    hidden.add(new int[] { 138, 155 });
+
+    cursor = new HiddenColumnsCursor(hidden);
+
+    regionIndex = cursor.findRegionForColumn(160, false).getRegionIndex();
+    assertEquals(3, regionIndex);
+
+    regionIndex = cursor.findRegionForColumn(100, false).getRegionIndex();
+    assertEquals(1, regionIndex);
   }
 
   /**
    * Test the method which counts the number of hidden columns before a column
    */
   @Test(groups = { "Functional" })
-  public void testGetHiddenOffset()
+  public void testFindRegionForColumn_Visible()
   {
     HiddenColumnsCursor cursor = new HiddenColumnsCursor();
 
-    int offset = cursor.getHiddenOffset(20);
-    assertEquals(-1, offset);
+    HiddenCursorPosition pos = cursor.findRegionForColumn(20, true);
+    assertNull(pos);
 
     List<int[]> hidden = new ArrayList<>();
     hidden.add(new int[] { 53, 76 });
     hidden.add(new int[] { 104, 125 });
-    cursor.resetCursor(hidden);
 
-    offset = cursor.getHiddenOffset(80);
+    cursor = new HiddenColumnsCursor(hidden);
+
+    int offset = cursor.findRegionForColumn(80, true).getHiddenSoFar();
     assertEquals(46, offset);
 
-    offset = cursor.getHiddenOffset(79);
+    offset = cursor.findRegionForColumn(79, true).getHiddenSoFar();
     assertEquals(24, offset);
 
-    offset = cursor.getHiddenOffset(53);
+    offset = cursor.findRegionForColumn(53, true).getHiddenSoFar();
     assertEquals(24, offset);
 
-    offset = cursor.getHiddenOffset(52);
+    offset = cursor.findRegionForColumn(52, true).getHiddenSoFar();
     assertEquals(0, offset);
 
-    offset = cursor.getHiddenOffset(10);
+    offset = cursor.findRegionForColumn(10, true).getHiddenSoFar();
     assertEquals(0, offset);
 
-    offset = cursor.getHiddenOffset(0);
+    offset = cursor.findRegionForColumn(0, true).getHiddenSoFar();
     assertEquals(0, offset);
+
+    offset = cursor.findRegionForColumn(79, true).getHiddenSoFar();
+    assertEquals(24, offset);
+
+    offset = cursor.findRegionForColumn(80, true).getHiddenSoFar();
+    assertEquals(46, offset);
+  }
+
+  /**
+   * Test the method which updates for a deleted region
+   */
+  @Test(groups = { "Functional" })
+  public void testUpdateForDeletedRegion()
+  {
+    List<int[]> hlist = new ArrayList<>();
+    HiddenColumnsCursor cursor = new HiddenColumnsCursor(hlist, 1, 5);
+    cursor.updateForDeletedRegion(hlist, 0);
+    assertNull(cursor.findRegionForColumn(30, false));
+
+    hlist.add(new int[] { 3, 7 });
+    hlist.add(new int[] { 15, 25 });
+
+    cursor = new HiddenColumnsCursor(hlist, 1, 5);
+
+    HiddenCursorPosition p = cursor.findRegionForColumn(30, false);
+    assertEquals(16, p.getHiddenSoFar());
+
+    List<int[]> hlist2 = new ArrayList<>();
+    hlist2.add(new int[] { 3, 7 });
+    cursor.updateForDeletedRegion(hlist2, 11);
+    p = cursor.findRegionForColumn(30, false);
+    assertEquals(5, p.getHiddenSoFar());
   }
 
 }