JAL-2674 Unit test for new copy constructor.
[jalview.git] / test / jalview / datamodel / HiddenColumnsTest.java
index 1aec1d3..8aee615 100644 (file)
@@ -32,6 +32,7 @@ import jalview.util.Comparison;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.BitSet;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Random;
 
@@ -189,7 +190,7 @@ public class HiddenColumnsTest
     HiddenColumns cs = new HiddenColumns();
 
     int[] visible = cs.getVisibleContigs(3, 10);
-    assertEquals("[]", Arrays.toString(visible));
+    assertEquals("[3, 9]", Arrays.toString(visible));
 
     cs.hideColumns(3, 6);
     cs.hideColumns(8, 9);
@@ -260,6 +261,33 @@ public class HiddenColumnsTest
             Arrays.toString(cs2.getHiddenColumnsCopy().get(1)));
   }
 
+  @Test(groups = "Functional")
+  public void testCopyConstructor2()
+  {
+    HiddenColumns cs = new HiddenColumns();
+    cs.hideColumns(10, 11);
+    cs.hideColumns(5, 7);
+
+    HiddenColumns cs2 = new HiddenColumns(cs, 3, 9, 1);
+    assertTrue(cs2.hasHiddenColumns());
+
+    // only [5,7] returned, offset by 1
+    assertEquals("[4, 6]",
+            Arrays.toString(cs2.getHiddenColumnsCopy().get(0)));
+    assertEquals(3, cs2.getSize());
+
+    cs2 = new HiddenColumns(cs, 8, 15, 4);
+    assertTrue(cs2.hasHiddenColumns());
+
+    // only [10,11] returned, offset by 4
+    assertEquals("[6, 7]",
+            Arrays.toString(cs2.getHiddenColumnsCopy().get(0)));
+    assertEquals(2, cs2.getSize());
+
+    cs2 = new HiddenColumns(cs, 6, 10, 4);
+    assertFalse(cs2.hasHiddenColumns());
+  }
+
   /**
    * Test the code used to locate the reference sequence ruler origin
    */
@@ -795,18 +823,42 @@ public class HiddenColumnsTest
   {
     HiddenColumns hc = new HiddenColumns();
 
-    List<Integer> positions = hc.findHiddenRegionPositions();
+    List<Integer> positions = hc.findHiddenRegionPositions(0, 20);
     assertTrue(positions.isEmpty());
 
     hc.hideColumns(3, 7);
     hc.hideColumns(10, 10);
     hc.hideColumns(14, 15);
 
-    positions = hc.findHiddenRegionPositions();
+    positions = hc.findHiddenRegionPositions(0, 20);
     assertEquals(3, positions.size());
     assertEquals(3, positions.get(0).intValue());
     assertEquals(5, positions.get(1).intValue());
     assertEquals(8, positions.get(2).intValue());
+
+    positions = hc.findHiddenRegionPositions(7, 20);
+    assertEquals(2, positions.size());
+    assertEquals(5, positions.get(0).intValue());
+    assertEquals(8, positions.get(1).intValue());
+
+    positions = hc.findHiddenRegionPositions(11, 13);
+    assertEquals(0, positions.size());
+
+    positions = hc.findHiddenRegionPositions(7, 20);
+    assertEquals(2, positions.size());
+    assertEquals(5, positions.get(0).intValue());
+    assertEquals(8, positions.get(1).intValue());
+
+    positions = hc.findHiddenRegionPositions(0, 1);
+    assertEquals(0, positions.size());
+
+    positions = hc.findHiddenRegionPositions(17, 20);
+    assertEquals(0, positions.size());
+
+    positions = hc.findHiddenRegionPositions(10, 15);
+    assertEquals(2, positions.size());
+    assertEquals(5, positions.get(0).intValue());
+    assertEquals(8, positions.get(1).intValue());
   }
 
   @Test(groups = { "Functional" })
@@ -1055,85 +1107,6 @@ public class HiddenColumnsTest
     assertEquals(4, h.adjustForHiddenColumns(2));
   }
 
-  /*@Test(groups = "Functional")
-  public void testCompensateForEdit()
-  {
-    HiddenColumns2 h = new HiddenColumns2();
-  
-    ColumnSelection sel = new ColumnSelection();
-    assertNull(h.compensateForEdit(10, 3, sel));
-  
-    h.hideColumns(3, 4);
-    List<int[]> result = h.compensateForEdit(10, 3, sel);
-    assertEquals(0, result.size());
-  
-    // edit partially overlapping hidden
-  
-    h = new HiddenColumns2();
-    h.hideColumns(15, 17);
-    result = h.compensateForEdit(10, 6, sel);
-    assertEquals(0, result.size());
-  
-    HiddenColumns2 h2 = new HiddenColumns2();
-    h2.hideColumns(9, 11);
-    assertTrue(h.equals(h2));
-  
-    // edit fully overlapping hidden
-  
-    h = new HiddenColumns2();
-    h.hideColumns(15, 17);
-    result = h.compensateForEdit(10, 8, sel);
-    assertEquals(result.get(0)[0], 15);
-    assertEquals(result.get(0)[1], 17);
-    assertFalse(h.hasHiddenColumns());
-  
-    // edit at start
-  
-    h = new HiddenColumns2();
-    h.hideColumns(0, 3);
-    result = h.compensateForEdit(0, 4, sel);
-    assertEquals(0, result.size());
-    assertEquals(sel.getSelected().size(), 4);
-    assertFalse(h.hasHiddenColumns());
-  }*/
-
-  /*@Test(groups = "Functional")
-  public void testCompensateForDelEdits()
-  {
-    HiddenColumns2 h = new HiddenColumns2();
-    HiddenColumns2 h2 = new HiddenColumns2();
-  
-    h.compensateForDelEdits(10, 3);
-    assertFalse(h.hasHiddenColumns());
-  
-    h = new HiddenColumns2();
-    h.hideColumns(3, 4);
-    h.compensateForDelEdits(10, 3);
-    h2.hideColumns(3, 4);
-    assertTrue(h.equals(h2));
-  
-    h = new HiddenColumns2();
-    h.hideColumns(15, 17);
-    h.compensateForDelEdits(10, 6);
-    h2 = new HiddenColumns2();
-    h2.hideColumns(9, 11);
-    assertTrue(h.equals(h2));
-  
-    h = new HiddenColumns2();
-    h.hideColumns(15, 17);
-    h.compensateForDelEdits(10, 8);
-    h2 = new HiddenColumns2();
-    h2.hideColumns(7, 9);
-    assertTrue(h.equals(h2));
-  
-    h = new HiddenColumns2();
-    h.hideColumns(0, 3);
-    h.compensateForDelEdits(0, 4);
-    h2 = new HiddenColumns2();
-    h2.hideColumns(0, 0);
-    assertTrue(h.equals(h2));
-  }*/
-
   @Test(groups = "Functional")
   public void testGetHiddenBoundaryLeft()
   {
@@ -1346,12 +1319,109 @@ public class HiddenColumnsTest
     ColumnSelection sel = new ColumnSelection();
     h.revealAllHiddenColumns(sel);
     h.hideColumns(0, 30);
-    result = h.subtractVisibleColumns(31, 13);
-    assertEquals(-18, result);
-
     result = h.subtractVisibleColumns(31, 0);
     assertEquals(-31, result);
+  }
 
+  @Test(groups = "Functional")
+  public void testBoundedIterator()
+  {
+    HiddenColumns h = new HiddenColumns();
+    Iterator<int[]> it = h.getBoundedIterator(0, 10, false);
+
+    // no hidden columns = nothing to iterate over
+    assertFalse(it.hasNext());
+
+    // [start,end] contains all hidden columns
+    // all regions are returned
+    h.hideColumns(3, 10);
+    h.hideColumns(14, 16);
+    it = h.getBoundedIterator(0, 20, false);
+    assertTrue(it.hasNext());
+    int[] next = it.next();
+    assertEquals(3, next[0]);
+    assertEquals(10, next[1]);
+    next = it.next();
+    assertEquals(14, next[0]);
+    assertEquals(16, next[1]);
+    assertFalse(it.hasNext());
+
+    // [start,end] overlaps a region
+    // 1 region returned
+    it = h.getBoundedIterator(5, 7, false);
+    assertTrue(it.hasNext());
+    next = it.next();
+    assertEquals(3, next[0]);
+    assertEquals(10, next[1]);
+    assertFalse(it.hasNext());
+
+    // [start,end] fully contains 1 region and start of last
+    // - 2 regions returned
+    it = h.getBoundedIterator(3, 15, false);
+    assertTrue(it.hasNext());
+    next = it.next();
+    assertEquals(3, next[0]);
+    assertEquals(10, next[1]);
+    next = it.next();
+    assertEquals(14, next[0]);
+    assertEquals(16, next[1]);
+    assertFalse(it.hasNext());
+
+    // [start,end] contains end of first region and whole of last region
+    // - 2 regions returned
+    it = h.getBoundedIterator(4, 20, false);
+    assertTrue(it.hasNext());
+    next = it.next();
+    assertEquals(3, next[0]);
+    assertEquals(10, next[1]);
+    next = it.next();
+    assertEquals(14, next[0]);
+    assertEquals(16, next[1]);
+    assertFalse(it.hasNext());
   }
 
+  @Test(groups = "Functional")
+  public void testBoundedStartIterator()
+  {
+    HiddenColumns h = new HiddenColumns();
+    Iterator<Integer> it = h.getBoundedStartIterator(0, 10, false);
+
+    // no hidden columns = nothing to iterate over
+    assertFalse(it.hasNext());
+
+    // [start,end] contains all hidden columns
+    // all regions are returned
+    h.hideColumns(3, 10);
+    h.hideColumns(14, 16);
+    it = h.getBoundedStartIterator(0, 20, false);
+    assertTrue(it.hasNext());
+    int next = it.next();
+    assertEquals(3, next);
+    next = it.next();
+    assertEquals(6, next);
+    assertFalse(it.hasNext());
+
+    // [start,end] does not contain a start of a region
+    // no regions to iterate over
+    it = h.getBoundedStartIterator(4, 5, false);
+    assertFalse(it.hasNext());
+
+    // [start,end] fully contains 1 region and start of last
+    // - 2 regions returned
+    it = h.getBoundedStartIterator(3, 7, false);
+    assertTrue(it.hasNext());
+    next = it.next();
+    assertEquals(3, next);
+    next = it.next();
+    assertEquals(6, next);
+    assertFalse(it.hasNext());
+
+    // [start,end] contains whole of last region
+    // - 1 region returned
+    it = h.getBoundedStartIterator(4, 20, false);
+    assertTrue(it.hasNext());
+    next = it.next();
+    assertEquals(6, next);
+    assertFalse(it.hasNext());
+  }
 }