X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=test%2Fjalview%2Fviewmodel%2FViewportRangesTest.java;fp=test%2Fjalview%2Fviewmodel%2FViewportRangesTest.java;h=3cd20964743e9a07d14c93509bb333ef472e5c25;hb=3f5e846ddfee0852718bef491e2839476f5281d3;hp=cfd03cd448d8015f504ee7124bebd1f95009987d;hpb=1499d3297cf70ff34df05362449dbf36873c5bc1;p=jalview.git diff --git a/test/jalview/viewmodel/ViewportRangesTest.java b/test/jalview/viewmodel/ViewportRangesTest.java index cfd03cd..3cd2096 100644 --- a/test/jalview/viewmodel/ViewportRangesTest.java +++ b/test/jalview/viewmodel/ViewportRangesTest.java @@ -1,10 +1,16 @@ package jalview.viewmodel; import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertTrue; import jalview.analysis.AlignmentGenerator; import jalview.datamodel.AlignmentI; +import java.beans.PropertyChangeEvent; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + import org.testng.annotations.Test; public class ViewportRangesTest { @@ -13,7 +19,7 @@ public class ViewportRangesTest { AlignmentI al = gen.generate(20, 30, 1, 5, 5); - @Test + @Test(groups = { "Functional" }) public void testViewportRanges() { ViewportRanges vr = new ViewportRanges(al); @@ -24,7 +30,7 @@ public class ViewportRangesTest { assertEquals(vr.getEndSeq(), al.getHeight() - 1); } - @Test + @Test(groups = { "Functional" }) public void testGetAbsoluteAlignmentHeight() { ViewportRanges vr = new ViewportRanges(al); @@ -35,28 +41,25 @@ public class ViewportRangesTest { assertEquals(vr.getAbsoluteAlignmentHeight(), al.getHeight() + 1); } - @Test + @Test(groups = { "Functional" }) public void testGetAbsoluteAlignmentWidth() { ViewportRanges vr = new ViewportRanges(al); assertEquals(vr.getAbsoluteAlignmentWidth(), al.getWidth()); } - @Test + @Test(groups = { "Functional" }) public void testSetEndRes() { ViewportRanges vr = new ViewportRanges(al); vr.setEndRes(-1); assertEquals(vr.getEndRes(), 0); - vr.setEndRes(al.getWidth()); - assertEquals(vr.getEndRes(), al.getWidth() - 1); - vr.setEndRes(al.getWidth() - 1); assertEquals(vr.getEndRes(), al.getWidth() - 1); } - @Test + @Test(groups = { "Functional" }) public void testSetEndSeq() { ViewportRanges vr = new ViewportRanges(al); @@ -70,7 +73,7 @@ public class ViewportRangesTest { assertEquals(vr.getEndSeq(), al.getHeight() - 1); } - @Test + @Test(groups = { "Functional" }) public void testSetStartRes() { ViewportRanges vr = new ViewportRanges(al); @@ -84,17 +87,394 @@ public class ViewportRangesTest { assertEquals(vr.getStartRes(), al.getWidth() - 1); } - @Test + @Test(groups = { "Functional" }) public void testSetStartSeq() { ViewportRanges vr = new ViewportRanges(al); vr.setStartSeq(-1); assertEquals(vr.getStartSeq(), 0); - vr.setStartSeq(al.getHeight()); - assertEquals(vr.getStartSeq(), al.getHeight() - 1); + vr.setStartSeq(al.getHeight() - vr.getViewportHeight() + 1); + assertEquals(vr.getStartSeq(), al.getHeight() - vr.getViewportHeight()); + + vr.setStartSeq(al.getHeight() - vr.getViewportHeight()); + assertEquals(vr.getStartSeq(), al.getHeight() - vr.getViewportHeight()); + } + + @Test(groups = { "Functional" }) + public void testSetStartEndRes() + { + ViewportRanges vr = new ViewportRanges(al); + vr.setStartEndRes(-1, -1); + assertEquals(vr.getStartRes(), 0); + assertEquals(vr.getEndRes(), 0); + + vr.setStartEndRes(5, 19); + assertEquals(vr.getStartRes(), 5); + assertEquals(vr.getEndRes(), 19); + + vr.setStartEndRes(al.getWidth(), al.getWidth()); + assertEquals(vr.getEndRes(), al.getWidth()); + } + + @Test(groups = { "Functional" }) + public void testSetStartEndSeq() + { + ViewportRanges vr = new ViewportRanges(al); + vr.setStartEndSeq(-1, -1); + assertEquals(vr.getStartSeq(), 0); + assertEquals(vr.getEndSeq(), 0); + + vr.setStartEndSeq(5, 19); + assertEquals(vr.getStartSeq(), 5); + assertEquals(vr.getEndSeq(), 19); + + vr.setStartEndSeq(al.getHeight(), al.getHeight()); + assertEquals(vr.getEndSeq(), al.getHeight() - 1); + } + + @Test(groups = { "Functional" }) + public void testSetViewportHeight() + { + ViewportRanges vr = new ViewportRanges(al); + vr.setViewportHeight(13); + assertEquals(vr.getViewportHeight(), 13); + } + + @Test(groups = { "Functional" }) + public void testSetViewportWidth() + { + ViewportRanges vr = new ViewportRanges(al); + vr.setViewportWidth(13); + assertEquals(vr.getViewportWidth(), 13); + } + + @Test(groups = { "Functional" }) + public void testSetViewportStartAndHeight() + { + ViewportRanges vr = new ViewportRanges(al); + vr.setViewportStartAndHeight(2, 6); + assertEquals(vr.getViewportHeight(), 6); + assertEquals(vr.getStartSeq(), 2); + + // reset -ve values of start to 0 + vr.setViewportStartAndHeight(-1, 7); + assertEquals(vr.getViewportHeight(), 7); + assertEquals(vr.getStartSeq(), 0); + + // reset out of bounds start values to within bounds + vr.setViewportStartAndHeight(35, 5); + assertEquals(vr.getViewportHeight(), 5); + assertEquals(vr.getStartSeq(), 24); + } + + @Test(groups = { "Functional" }) + public void testSetViewportStartAndWidth() + { + ViewportRanges vr = new ViewportRanges(al); + vr.setViewportStartAndWidth(2, 6); + assertEquals(vr.getViewportWidth(), 6); + assertEquals(vr.getStartRes(), 2); + + // reset -ve values of start to 0 + vr.setViewportStartAndWidth(-1, 7); + assertEquals(vr.getViewportWidth(), 7); + assertEquals(vr.getStartRes(), 0); + + // reset out of bounds start values to within bounds + vr.setViewportStartAndWidth(35, 5); + assertEquals(vr.getViewportWidth(), 5); + assertEquals(vr.getStartRes(), 20); + } + + @Test(groups = { "Functional" }) + public void testPageUpDown() + { + ViewportRanges vr = new ViewportRanges(al); + vr.setViewportStartAndHeight(8, 6); + vr.pageDown(); + assertEquals(vr.getStartSeq(), 13); + + vr.pageUp(); + assertEquals(vr.getStartSeq(), 8); + + vr.pageUp(); + assertEquals(vr.getStartSeq(), 3); + + vr.pageUp(); + // pageup does not go beyond 0, viewport height stays the same + assertEquals(vr.getStartSeq(), 0); + assertEquals(vr.getViewportHeight(), 6); + + vr.pageDown(); + vr.pageDown(); + vr.pageDown(); + vr.pageDown(); + vr.pageDown(); + + // pagedown to bottom does not go beyond end, and height stays same + assertEquals(vr.getStartSeq(), 23); + assertEquals(vr.getViewportHeight(), 6); + } + + @Test(groups = { "Functional" }) + public void testScrollUp() + { + ViewportRanges vr = new ViewportRanges(al); + vr.setViewportStartAndHeight(1, 5); + vr.scrollUp(true); + assertEquals(vr.getStartSeq(), 0); + // can't scroll above top + vr.scrollUp(true); + assertEquals(vr.getStartSeq(), 0); + + vr.setViewportStartAndHeight(23, 5); + vr.scrollUp(false); + assertEquals(vr.getStartSeq(), 24); + // can't scroll beyond bottom + vr.scrollUp(false); + assertEquals(vr.getStartSeq(), 24); + } + + @Test(groups = { "Functional" }) + public void testScrollRight() + { + ViewportRanges vr = new ViewportRanges(al); + vr.setViewportStartAndWidth(1, 5); + vr.scrollRight(false); + assertEquals(vr.getStartRes(), 0); + // can't scroll left past start + vr.scrollRight(false); + assertEquals(vr.getStartRes(), 0); + + vr.setViewportStartAndWidth(19, 5); + vr.scrollRight(true); + assertEquals(vr.getStartRes(), 20); + // can't scroll right past end + vr.scrollRight(true); + assertEquals(vr.getStartRes(), 20); + } + + @Test(groups = { "Functional" }) + public void testScrollToWrappedVisible() + { + ViewportRanges vr = new ViewportRanges(al); + vr.setViewportStartAndWidth(5, 10); + + vr.scrollToWrappedVisible(0); + assertEquals(vr.getStartRes(), 0); + + vr.scrollToWrappedVisible(10); + assertEquals(vr.getStartRes(), 10); + + vr.scrollToWrappedVisible(15); + assertEquals(vr.getStartRes(), 10); + } + + // leave until JAL-2388 is merged and we can do without viewport + /*@Test(groups = { "Functional" }) + public void testScrollToVisible() + { + ViewportRanges vr = new ViewportRanges(al); + vr.setViewportStartAndWidth(12,5); + vr.setViewportStartAndHeight(10,6); + vr.scrollToVisible(13,14) + + // no change + assertEquals(vr.getStartRes(), 12); + assertEquals(vr.getStartSeq(), 10); + + vr.scrollToVisible(5,6); + assertEquals(vr.getStartRes(), 5); + assertEquals(vr.getStartSeq(), 6); + + // test for hidden columns too + }*/ + + @Test(groups = { "Functional" }) + public void testEventFiring() + { + ViewportRanges vr = new ViewportRanges(al); + MockPropChangeListener l = new MockPropChangeListener(vr); + List emptylist = new ArrayList(); + + vr.setViewportWidth(5); + vr.setViewportHeight(5); + l.reset(); + + // one event fired when startRes is called with new value + vr.setStartRes(4); + assertTrue(l.verify(1, Arrays.asList("startres"))); + l.reset(); + + // no event fired for same value + vr.setStartRes(4); + assertTrue(l.verify(0, emptylist)); + l.reset(); + + vr.setEndRes(10); + assertTrue(l.verify(1, Arrays.asList("startres"))); + l.reset(); + + // no event fired for same value + vr.setEndRes(10); + assertTrue(l.verify(0, emptylist)); + l.reset(); + + vr.setStartSeq(4); + assertTrue(l.verify(1, Arrays.asList("startseq"))); + l.reset(); + + vr.setStartSeq(4); + assertTrue(l.verify(0, emptylist)); + l.reset(); + + vr.setEndSeq(10); + assertTrue(l.verify(1, Arrays.asList("startseq"))); + l.reset(); + + vr.setEndSeq(10); + assertTrue(l.verify(0, emptylist)); + l.reset(); + + vr.setStartEndRes(2, 15); + assertTrue(l.verify(1, Arrays.asList("startres"))); + l.reset(); + + vr.setStartEndRes(2, 15); + assertTrue(l.verify(0, emptylist)); + l.reset(); + + // check new value fired by event is corrected startres + vr.setStartEndRes(-1, 5); + assertTrue(l.verify(1, Arrays.asList("startres"), Arrays.asList(0))); + l.reset(); + + // check new value fired by event is corrected endres + vr.setStartEndRes(0, -1); + assertTrue(l.verify(1, Arrays.asList("endres"), Arrays.asList(0))); + l.reset(); + + vr.setStartEndSeq(2, 15); + assertTrue(l.verify(1, Arrays.asList("startseq"))); + l.reset(); + + vr.setStartEndSeq(2, 15); + assertTrue(l.verify(0, emptylist)); + l.reset(); + + vr.setStartEndRes(2, 2); // so seq and res values should be different, in + // case of transposing in code + l.reset(); - vr.setStartSeq(al.getHeight() - 1); - assertEquals(vr.getStartSeq(), al.getHeight() - 1); + // check new value fired by event is corrected startseq + vr.setStartEndSeq(-1, 5); + assertTrue(l.verify(1, Arrays.asList("startseq"), Arrays.asList(0))); + l.reset(); + + // check new value fired by event is corrected endseq + vr.setStartEndSeq(0, -1); + assertTrue(l.verify(1, Arrays.asList("endseq"), Arrays.asList(0))); + l.reset(); + + // reset for later tests + vr.setStartEndSeq(2, 15); + l.reset(); + + // test viewport height and width setting triggers event + vr.setViewportHeight(10); + assertTrue(l.verify(1, Arrays.asList("endseq"))); + l.reset(); + + vr.setViewportWidth(18); + assertTrue(l.verify(1, Arrays.asList("endres"))); + l.reset(); + + // already has seq start set to 2, so triggers endseq + vr.setViewportStartAndHeight(2, 16); + assertTrue(l.verify(1, Arrays.asList("endseq"))); + l.reset(); + + vr.setViewportStartAndWidth(1, 14); + assertTrue(l.verify(1, Arrays.asList("startres"))); + l.reset(); + + // test page up/down triggers event + vr.pageUp(); + assertTrue(l.verify(1, Arrays.asList("startseq"))); + l.reset(); + + vr.pageDown(); + assertTrue(l.verify(1, Arrays.asList("startseq"))); + l.reset(); + + // test scrolling triggers event + vr.scrollUp(true); + assertTrue(l.verify(1, Arrays.asList("startseq"))); + l.reset(); + + vr.scrollUp(false); + assertTrue(l.verify(1, Arrays.asList("startseq"))); + l.reset(); + + vr.scrollRight(true); + assertTrue(l.verify(1, Arrays.asList("startres"))); + l.reset(); + + vr.scrollRight(false); + assertTrue(l.verify(1, Arrays.asList("startres"))); + l.reset(); + + // TODO test scrollToVisibble once hidden columns JAL-2388 merged in + // to avoid somersaults with align viewport + /*vr.scrollToVisible(10, 10); + assertTrue(l.verify(1, Arrays.asList("startres"))); + l.reset();*/ + + vr.scrollToWrappedVisible(5); + assertTrue(l.verify(1, Arrays.asList("startres"))); + l.reset(); + } +} + +// mock listener for property change events +class MockPropChangeListener implements ViewportListenerI +{ + private int firecount = 0; + + private List events = new ArrayList(); + + private List newvalues = new ArrayList(); + + public MockPropChangeListener(ViewportRanges vr) + { + vr.addPropertyChangeListener(this); + } + + @Override + public void propertyChange(PropertyChangeEvent evt) + { + firecount++; + events.add(evt.getPropertyName()); + newvalues.add((Integer) evt.getNewValue()); + } + + public boolean verify(int count, List eventslist, + List valueslist) + { + return (count == firecount) && events.equals(eventslist) + && newvalues.equals(valueslist); + } + + public boolean verify(int count, List eventslist) + { + return (count == firecount) && events.equals(eventslist); + } + + public void reset() + { + firecount = 0; + events.clear(); + newvalues.clear(); } }