X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=test%2Fjalview%2Fdatamodel%2FColumnSelectionTest.java;h=e59719c2c7d14e26594fda55d53733828c1328d9;hb=d409c3ae8f396eec23dae4c9ca03b28314969466;hp=1a7ae327fc6ac3be1c1d6d0b8bbc953d8c3088a1;hpb=528191d2feb45cd42c5b4f48420687346705119d;p=jalview.git diff --git a/test/jalview/datamodel/ColumnSelectionTest.java b/test/jalview/datamodel/ColumnSelectionTest.java index 1a7ae32..e59719c 100644 --- a/test/jalview/datamodel/ColumnSelectionTest.java +++ b/test/jalview/datamodel/ColumnSelectionTest.java @@ -22,10 +22,12 @@ package jalview.datamodel; import static org.testng.AssertJUnit.assertEquals; import static org.testng.AssertJUnit.assertFalse; +import static org.testng.AssertJUnit.assertNotSame; import static org.testng.AssertJUnit.assertSame; import static org.testng.AssertJUnit.assertTrue; import java.util.Arrays; +import java.util.BitSet; import java.util.List; import org.testng.annotations.Test; @@ -66,6 +68,9 @@ public class ColumnSelectionTest // removing an element in the list removes it cs.removeElement(2); + // ...but not from the copy list! + assertEquals(2, sel.size()); + sel = cs.getSelected(); assertEquals(1, sel.size()); assertEquals(new Integer(5), sel.get(0)); } @@ -325,10 +330,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); @@ -527,4 +536,137 @@ public class ColumnSelectionTest 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 selected1 = cs.getSelected(); + assertEquals(4, selected1.size()); + + /* + * getSelected returns a copy, verify the list + * is externally immutable + */ + selected1.clear(); + List selected2 = cs.getSelected(); + assertNotSame(selected1, selected2); + assertEquals(4, selected2.size()); + int i = 0; + for (int col : sel) + { + assertEquals(col, selected2.get(i++).intValue()); + } + + cs.removeElement(7); + cs.addElement(1); + cs.removeElement(4); + + List selected3 = cs.getSelected(); + assertEquals(3, selected3.size()); + assertEquals(3, selected3.get(0).intValue()); + assertEquals(21, selected3.get(1).intValue()); + assertEquals(1, selected3.get(2).intValue()); + } + + @Test(groups = "Functional") + public void testMarkColumns() + { + ColumnSelection cs = new ColumnSelection(); + cs.addElement(5); // this will be cleared + BitSet toMark = new BitSet(); + toMark.set(1); + toMark.set(3); + toMark.set(6); + toMark.set(9); + + assertTrue(cs.markColumns(toMark, 3, 8, false, false, false)); + List selected = cs.getSelected(); + assertEquals(2, selected.size()); + assertTrue(selected.contains(3)); + assertTrue(selected.contains(6)); + } + + @Test(groups = "Functional") + public void testMarkColumns_extend() + { + ColumnSelection cs = new ColumnSelection(); + cs.addElement(1); + cs.addElement(5); + BitSet toMark = new BitSet(); + toMark.set(1); + toMark.set(3); + toMark.set(6); + toMark.set(9); + + /* + * extending selection of {3, 6} should leave {1, 3, 5, 6} selected + */ + assertTrue(cs.markColumns(toMark, 3, 8, false, true, false)); + List selected = cs.getSelected(); + assertEquals(4, selected.size()); + assertTrue(selected.contains(1)); + assertTrue(selected.contains(3)); + assertTrue(selected.contains(5)); + assertTrue(selected.contains(6)); + } + + @Test(groups = "Functional") + public void testMarkColumns_invert() + { + ColumnSelection cs = new ColumnSelection(); + cs.addElement(5); // this will be cleared + BitSet toMark = new BitSet(); + toMark.set(1); + toMark.set(3); + toMark.set(6); + toMark.set(9); + + /* + * inverted selection of {3, 6} should select {4, 5, 7, 8} + */ + assertTrue(cs.markColumns(toMark, 3, 8, true, false, false)); + List selected = cs.getSelected(); + assertEquals(4, selected.size()); + assertTrue(selected.contains(4)); + assertTrue(selected.contains(5)); + assertTrue(selected.contains(7)); + assertTrue(selected.contains(8)); + } + + @Test(groups = "Functional") + public void testMarkColumns_toggle() + { + ColumnSelection cs = new ColumnSelection(); + cs.addElement(1); // outside change range + cs.addElement(3); + cs.addElement(4); + cs.addElement(10); // outside change range + BitSet toMark = new BitSet(); + toMark.set(1); + toMark.set(3); + toMark.set(6); + toMark.set(9); + + /* + * toggling state of {3, 6} should leave {1, 4, 6, 10} selected + */ + assertTrue(cs.markColumns(toMark, 3, 8, false, false, true)); + List selected = cs.getSelected(); + assertEquals(4, selected.size()); + assertTrue(selected.contains(1)); + assertTrue(selected.contains(4)); + assertTrue(selected.contains(6)); + assertTrue(selected.contains(10)); + } }