JAL-2172 unit test added
[jalview.git] / test / jalview / datamodel / ColumnSelectionTest.java
index 36932d1..04af3ce 100644 (file)
@@ -107,7 +107,8 @@ public class ColumnSelectionTest
     assertEquals(
             Arrays.toString(new int[] { seq.findIndex(seq.getStart()) - 1,
                 seq.findIndex(seq.getEnd()) - 1, seq.getStart(),
-                seq.getEnd() }),
+                seq.getEnd(), seq.findIndex(seq.getStart()) - 1,
+                seq.findIndex(seq.getEnd()) - 1 }),
             Arrays.toString(cs.locateVisibleBoundsOfSequence(seq)));
 
     // hidden column on gap after end of sequence - should not affect bounds
@@ -115,7 +116,8 @@ public class ColumnSelectionTest
     assertEquals(
             Arrays.toString(new int[] { seq.findIndex(seq.getStart()) - 1,
                 seq.findIndex(seq.getEnd()) - 1, seq.getStart(),
-                seq.getEnd() }),
+                seq.getEnd(), seq.findIndex(seq.getStart()) - 1,
+                seq.findIndex(seq.getEnd()) - 1 }),
             Arrays.toString(cs.locateVisibleBoundsOfSequence(seq)));
 
     cs.revealAllHiddenColumns();
@@ -125,7 +127,8 @@ public class ColumnSelectionTest
     assertEquals(
             Arrays.toString(new int[] { seq.findIndex(seq.getStart()) - 2,
                 seq.findIndex(seq.getEnd()) - 2, seq.getStart(),
-                seq.getEnd() }),
+                seq.getEnd(), seq.findIndex(seq.getStart()) - 1,
+                seq.findIndex(seq.getEnd()) - 1 }),
             Arrays.toString(cs.locateVisibleBoundsOfSequence(seq)));
 
     cs.revealAllHiddenColumns();
@@ -134,18 +137,39 @@ public class ColumnSelectionTest
     cs.hideColumns(6, 11);
     assertEquals("-D",
             cs.getVisibleSequenceStrings(0, 5, new SequenceI[] { seq })[0]);
-    assertEquals(Arrays.toString(new int[] { 1, 1, 3, 3 }),
+    assertEquals(
+            Arrays.toString(new int[] { 1, 1, 3, 3,
+                seq.findIndex(seq.getStart()) - 1,
+                seq.findIndex(seq.getEnd()) - 1 }),
             Arrays.toString(cs.locateVisibleBoundsOfSequence(seq)));
     cs.revealAllHiddenColumns();
 
     // hide whole sequence - should just get location of hidden region
     // containing sequence
     cs.hideColumns(1, 11);
-    assertEquals(Arrays.toString(new int[] { 0, 1, 0, 0 }),
+    assertEquals(
+            Arrays.toString(new int[] { 0, 1, 0, 0,
+                seq.findIndex(seq.getStart()) - 1,
+                seq.findIndex(seq.getEnd()) - 1 }),
             Arrays.toString(cs.locateVisibleBoundsOfSequence(seq)));
 
   }
 
+  @Test(groups={"Functional"})
+  public void testLocateVisibleBoundsPathologicals()
+  {
+    // test some pathological cases we missed
+    AlignmentI al = new Alignment(new SequenceI[] { new Sequence("refseqGaptest","KTDVTI----------NFI-----G----L")});
+    ColumnSelection cs = new ColumnSelection();
+    cs.hideInsertionsFor(al.getSequenceAt(0));
+    assertEquals(
+            "G",
+            ""
+                    + al.getSequenceAt(0).getCharAt(
+                            cs.adjustForHiddenColumns(9)));
+
+
+  }
   @Test(groups = { "Functional" })
   public void testHideColumns()
   {
@@ -301,10 +325,14 @@ public class ColumnSelectionTest
    * this fails, HideSelectedColumns may also fail
    */
   @Test(groups = { "Functional" })
-  public void testgetSelectedRanges()
+  public void testGetSelectedRanges()
   {
+    /*
+     * getSelectedRanges returns ordered columns regardless
+     * of the order in which they are added
+     */
     ColumnSelection cs = new ColumnSelection();
-    int[] sel = { 2, 3, 4, 7, 8, 9, 20, 21, 22 };
+    int[] sel = { 4, 3, 7, 21, 9, 20, 8, 22, 2 };
     for (int col : sel)
     {
       cs.addElement(col);
@@ -454,4 +482,84 @@ public class ColumnSelectionTest
     cs.addElement(0);
     assertEquals(0, cs.getMin());
   }
+
+  @Test(groups = { "Functional" })
+  public void testEquals()
+  {
+    ColumnSelection cs = new ColumnSelection();
+    cs.addElement(0);
+    cs.addElement(513);
+    cs.addElement(1);
+    cs.hideColumns(3);
+    cs.hideColumns(7);
+    cs.hideColumns(5,9);
+
+    // same selections added in a different order
+    ColumnSelection cs2 = new ColumnSelection();
+    cs2.addElement(1);
+    cs2.addElement(513);
+    cs2.addElement(0);
+
+    // with no hidden columns
+    assertFalse(cs.equals(cs2));
+    assertFalse(cs2.equals(cs));
+
+    // with hidden columns added in a different order
+    cs2.hideColumns(6, 9);
+    cs2.hideColumns(5, 8);
+    cs2.hideColumns(3);
+    
+    assertTrue(cs.equals(cs2));
+    assertTrue(cs.equals(cs));
+    assertTrue(cs2.equals(cs));
+    assertTrue(cs2.equals(cs2));
+
+    cs2.addElement(12);
+    assertFalse(cs.equals(cs2));
+    assertFalse(cs2.equals(cs));
+
+    cs2.removeElement(12);
+    assertTrue(cs.equals(cs2));
+
+    cs2.hideColumns(88);
+    assertFalse(cs.equals(cs2));
+    /*
+     * unhiding a column adds it to selection!
+     */
+    cs2.revealHiddenColumns(88);
+    assertFalse(cs.equals(cs2));
+    cs.addElement(88);
+    assertTrue(cs.equals(cs2));
+  }
+
+  /**
+   * Test the method that returns selected columns, in the order in which they
+   * were added
+   */
+  @Test(groups = { "Functional" })
+  public void testGetSelection()
+  {
+    ColumnSelection cs = new ColumnSelection();
+    int[] sel = { 4, 3, 7, 21 };
+    for (int col : sel)
+    {
+      cs.addElement(col);
+    }
+    List<Integer> selected = cs.getSelected();
+    assertEquals(4, selected.size());
+    int i = 0;
+    for (int col : sel)
+    {
+      assertEquals(col, selected.get(i++).intValue());
+    }
+
+    cs.removeElement(7);
+    cs.addElement(1);
+    cs.removeElement(4);
+    selected = cs.getSelected();
+    assertEquals(3, selected.size());
+    assertEquals(3, selected.get(0).intValue());
+    assertEquals(21, selected.get(1).intValue());
+    assertEquals(1, selected.get(2).intValue());
+  }
 }