From: Mateusz Warowny Date: Wed, 1 Nov 2023 15:15:21 +0000 (+0100) Subject: JAL-4313 Clamp start and end ranges to array size X-Git-Url: http://source.jalview.org/gitweb/?a=commitdiff_plain;h=72e63582d51fbaa0cc5a3963abc96814f984039b;p=jalview.git JAL-4313 Clamp start and end ranges to array size --- diff --git a/src/jalview/datamodel/AlignmentAnnotation.java b/src/jalview/datamodel/AlignmentAnnotation.java index e832c2f..fdb62a1 100755 --- a/src/jalview/datamodel/AlignmentAnnotation.java +++ b/src/jalview/datamodel/AlignmentAnnotation.java @@ -1625,6 +1625,8 @@ public class AlignmentAnnotation private void removeHiddenAnnotation(int start, int end, HiddenColumns hiddenColumns) { + start = Math.min(Math.max(0, start), annotations.length); + end = Math.min(Math.max(-1, end), annotations.length - 1); // mangle the alignmentAnnotation annotation array ArrayList annels = new ArrayList<>(); Annotation[] els = null; diff --git a/test/jalview/datamodel/AlignmentAnnotationTests.java b/test/jalview/datamodel/AlignmentAnnotationTests.java index 2948f83..74c2b63 100644 --- a/test/jalview/datamodel/AlignmentAnnotationTests.java +++ b/test/jalview/datamodel/AlignmentAnnotationTests.java @@ -626,6 +626,50 @@ public class AlignmentAnnotationTests assertThat(ann.annotations, is(emptyArray())); } + @Test(groups = "Functional") + public void testMakeVisibleAnnotation_HiddenRegionBeyondSize() + { + Annotation[] annots = annotsRange(4); + AlignmentAnnotation ann = new AlignmentAnnotation("label", "desc", annots); + HiddenColumns hc = new HiddenColumns(); + hc.hideColumns(6, 7); + ann.makeVisibleAnnotation(hc); + assertThat(ann.annotations, matchesAnnotations(annots)); + } + + @Test(groups = "Functional") + public void testMakeVisibleAnnotation_HiddenRegionAndTrimEndBeyondSize() + { + Annotation[] annots = annotsRange(4); + AlignmentAnnotation ann = new AlignmentAnnotation("label", "desc", annots); + HiddenColumns hc = new HiddenColumns(); + hc.hideColumns(6, 7); + ann.makeVisibleAnnotation(0, 10, hc); + assertThat(ann.annotations, matchesAnnotations(annots)); + } + + @Test(groups = "Functional") + public void testMakeVisibleAnnotation_HiddenRegionBeforeStart() + { + Annotation[] annots = annotsRange(4); + AlignmentAnnotation ann = new AlignmentAnnotation("label", "desc", annots); + HiddenColumns hc = new HiddenColumns(); + hc.hideColumns(-3, -2); + ann.makeVisibleAnnotation(hc); + assertThat(ann.annotations, matchesAnnotations(annots)); + } + + @Test(groups = "Functional") + public void testMakeVisibleAnnotation_HiddenRegionAndTrimStartBeforeStart() + { + Annotation[] annots = annotsRange(4); + AlignmentAnnotation ann = new AlignmentAnnotation("label", "desc", annots); + HiddenColumns hc = new HiddenColumns(); + hc.hideColumns(-3, -2); + ann.makeVisibleAnnotation(-5, annots.length - 1, hc); + assertThat(ann.annotations, matchesAnnotations(annots)); + } + static Annotation[] annotsRange(int stop) { Annotation[] annotations = new Annotation[stop];