X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=test%2Fjalview%2Fdatamodel%2FColumnSelectionTest.java;h=1d819c9963de29bb8e11f6b66f21d72364a95605;hb=799c26111d6936a2e70cb5f1fd7d7312311e6db9;hp=a9ad4c2b3247c0b86186cd6881e27ccc338ebb4d;hpb=5f4e1e4c330b045e9c8bce28ee132a0fca3834d8;p=jalview.git diff --git a/test/jalview/datamodel/ColumnSelectionTest.java b/test/jalview/datamodel/ColumnSelectionTest.java index a9ad4c2..1d819c9 100644 --- a/test/jalview/datamodel/ColumnSelectionTest.java +++ b/test/jalview/datamodel/ColumnSelectionTest.java @@ -205,12 +205,11 @@ public class ColumnSelectionTest assertEquals("[5, 5]", Arrays.toString(hidden.get(1))); // hiding column 4 expands [3, 3] to [3, 4] - // not fancy enough to coalesce this into [3, 5] though + // and merges to [5, 5] to make [3, 5] cs.hideColumns(4); hidden = cs.getHiddenColumns(); - assertEquals(2, hidden.size()); - assertEquals("[3, 4]", Arrays.toString(hidden.get(0))); - assertEquals("[5, 5]", Arrays.toString(hidden.get(1))); + assertEquals(1, hidden.size()); + assertEquals("[3, 5]", Arrays.toString(hidden.get(0))); // clear hidden columns (note they are added to selected) cs.revealAllHiddenColumns(); @@ -761,4 +760,122 @@ public class ColumnSelectionTest assertEquals("[5, 7]", Arrays.toString(cs2.getHiddenColumns().get(0))); assertEquals("[10, 11]", Arrays.toString(cs2.getHiddenColumns().get(1))); } + + /** + * Test for the case when a hidden range encloses more one already hidden + * range + */ + @Test(groups = { "Functional" }) + public void testHideColumns_subsumingHidden() + { + /* + * JAL-2370 bug scenario: + * two hidden ranges subsumed by a third + */ + ColumnSelection cs = new ColumnSelection(); + cs.hideColumns(49, 59); + cs.hideColumns(69, 79); + List hidden = cs.getHiddenColumns(); + assertEquals(2, hidden.size()); + assertEquals("[49, 59]", Arrays.toString(hidden.get(0))); + assertEquals("[69, 79]", Arrays.toString(hidden.get(1))); + + cs.hideColumns(48, 80); + hidden = cs.getHiddenColumns(); + assertEquals(1, hidden.size()); + assertEquals("[48, 80]", Arrays.toString(hidden.get(0))); + + /* + * another...joining hidden ranges + */ + cs = new ColumnSelection(); + cs.hideColumns(10, 20); + cs.hideColumns(30, 40); + cs.hideColumns(50, 60); + // hiding 21-49 should merge to one range + cs.hideColumns(21, 49); + hidden = cs.getHiddenColumns(); + assertEquals(1, hidden.size()); + assertEquals("[10, 60]", Arrays.toString(hidden.get(0))); + + /* + * another...lef overlap, subsumption, right overlap, + * no overlap of existing hidden ranges + */ + cs = new ColumnSelection(); + cs.hideColumns(10, 20); + cs.hideColumns(10, 20); + cs.hideColumns(30, 35); + cs.hideColumns(40, 50); + cs.hideColumns(60, 70); + + cs.hideColumns(15, 45); + hidden = cs.getHiddenColumns(); + assertEquals(2, hidden.size()); + assertEquals("[10, 50]", Arrays.toString(hidden.get(0))); + assertEquals("[60, 70]", Arrays.toString(hidden.get(1))); + } + + @Test(groups = { "Functional" }) + public void testStretchGroup_expand() + { + /* + * test that emulates clicking column 4 (selected) + * and dragging right to column 5 (all base 0) + */ + ColumnSelection cs = new ColumnSelection(); + cs.addElement(4); + SequenceGroup sg = new SequenceGroup(); + sg.setStartRes(4); + sg.setEndRes(4); + cs.stretchGroup(5, sg, 4, 4); + assertEquals(cs.getSelected().size(), 2); + assertTrue(cs.contains(4)); + assertTrue(cs.contains(5)); + assertEquals(sg.getStartRes(), 4); + assertEquals(sg.getEndRes(), 5); + + /* + * emulate drag right with columns 10-20 already selected + */ + cs.clear(); + for (int i = 10; i <= 20; i++) + { + cs.addElement(i); + } + assertEquals(cs.getSelected().size(), 11); + sg = new SequenceGroup(); + sg.setStartRes(10); + sg.setEndRes(20); + cs.stretchGroup(21, sg, 10, 20); + assertEquals(cs.getSelected().size(), 12); + assertTrue(cs.contains(10)); + assertTrue(cs.contains(21)); + assertEquals(sg.getStartRes(), 10); + assertEquals(sg.getEndRes(), 21); + } + + @Test(groups = { "Functional" }) + public void testStretchGroup_shrink() + { + /* + * emulate drag left to 19 with columns 10-20 already selected + */ + ColumnSelection cs = new ColumnSelection(); + for (int i = 10; i <= 20; i++) + { + cs.addElement(i); + } + assertEquals(cs.getSelected().size(), 11); + SequenceGroup sg = new SequenceGroup(); + sg.setStartRes(10); + sg.setEndRes(20); + cs.stretchGroup(19, sg, 10, 20); + assertEquals(cs.getSelected().size(), 10); + assertTrue(cs.contains(10)); + assertTrue(cs.contains(19)); + assertFalse(cs.contains(20)); + assertEquals(sg.getStartRes(), 10); + assertEquals(sg.getEndRes(), 19); + } }