X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=test%2Fjalview%2Fdatamodel%2FColumnSelectionTest.java;fp=test%2Fjalview%2Fdatamodel%2FColumnSelectionTest.java;h=c594dda4779266794e4d70686f2180a82b256de9;hb=6f04e0a80f3c3ba8087a1ad316debd395d0a4db0;hp=8709961485e148ca9c65550086e3753a66e604c6;hpb=6f153aac5d457ab69f994d71df1cf30b69d07af5;p=jalview.git diff --git a/test/jalview/datamodel/ColumnSelectionTest.java b/test/jalview/datamodel/ColumnSelectionTest.java index 8709961..c594dda 100644 --- a/test/jalview/datamodel/ColumnSelectionTest.java +++ b/test/jalview/datamodel/ColumnSelectionTest.java @@ -27,6 +27,9 @@ import static org.testng.AssertJUnit.fail; import jalview.analysis.AlignmentGenerator; import jalview.gui.JvOptionPane; +import jalview.viewmodel.annotationfilter.AnnotationFilterParameter; +import jalview.viewmodel.annotationfilter.AnnotationFilterParameter.SearchableAnnotationField; +import jalview.viewmodel.annotationfilter.AnnotationFilterParameter.ThresholdType; import java.util.Arrays; import java.util.BitSet; @@ -598,4 +601,117 @@ public class ColumnSelectionTest assertEquals(sg.getStartRes(), 10); assertEquals(sg.getEndRes(), 19); } + + @Test(groups = { "Functional" }) + public void testFilterAnnotations() + { + ColumnSelection cs = new ColumnSelection(); + + /* + * filter with no conditions clears the selection + */ + Annotation[] anns = new Annotation[] { null }; + AnnotationFilterParameter filter = new AnnotationFilterParameter(); + cs.addElement(3); + int added = cs.filterAnnotations(anns, filter); + assertEquals(0, added); + assertTrue(cs.isEmpty()); + + /* + * select on description (regex) + */ + filter.setRegexString("w.rld"); + filter.addRegexSearchField(SearchableAnnotationField.DESCRIPTION); + Annotation helix = new Annotation("(", "hello", '<', 2f); + Annotation sheet = new Annotation("(", "world", '<', 2f); + added = cs.filterAnnotations(new Annotation[] { null, helix, sheet }, + filter); + assertEquals(1, added); + assertTrue(cs.contains(2)); + + /* + * select on label (invalid regex, exact match) + */ + filter = new AnnotationFilterParameter(); + filter.setRegexString("("); + filter.addRegexSearchField(SearchableAnnotationField.DISPLAY_STRING); + added = cs.filterAnnotations(new Annotation[] { null, helix, sheet }, + filter); + assertEquals(2, added); + assertTrue(cs.contains(1)); + assertTrue(cs.contains(2)); + + /* + * select Helix (secondary structure symbol H) + */ + filter = new AnnotationFilterParameter(); + filter.setFilterAlphaHelix(true); + helix = new Annotation("x", "desc", 'H', 0f); + sheet = new Annotation("x", "desc", 'E', 1f); + Annotation turn = new Annotation("x", "desc", 'S', 2f); + Annotation ann4 = new Annotation("x", "desc", 'Y', 3f); + added = cs + .filterAnnotations(new Annotation[] + { null, helix, sheet, turn, ann4 }, + filter); + assertEquals(1, added); + assertTrue(cs.contains(1)); + + /* + * select Helix and Sheet (E) + */ + filter.setFilterBetaSheet(true); + added = cs + .filterAnnotations(new Annotation[] + { null, helix, sheet, turn, ann4 }, filter); + assertEquals(2, added); + assertTrue(cs.contains(1)); + assertTrue(cs.contains(2)); + + /* + * select Sheet and Turn (S) + */ + filter.setFilterAlphaHelix(false); + filter.setFilterTurn(true); + added = cs + .filterAnnotations(new Annotation[] + { null, helix, sheet, turn, ann4 }, filter); + assertEquals(2, added); + assertTrue(cs.contains(2)); + assertTrue(cs.contains(3)); + + /* + * select value < 2f (ann1, ann2) + */ + filter = new AnnotationFilterParameter(); + filter.setThresholdType(ThresholdType.BELOW_THRESHOLD); + filter.setThresholdValue(2f); + added = cs + .filterAnnotations(new Annotation[] + { null, helix, sheet, turn, ann4 }, filter); + assertEquals(2, added); + assertTrue(cs.contains(1)); + assertTrue(cs.contains(2)); + + /* + * select value > 2f (ann4 only) + */ + filter.setThresholdType(ThresholdType.ABOVE_THRESHOLD); + added = cs + .filterAnnotations(new Annotation[] + { null, helix, sheet, turn, ann4 }, filter); + assertEquals(1, added); + assertTrue(cs.contains(4)); + + /* + * select >2f or Helix + */ + filter.setFilterAlphaHelix(true); + added = cs + .filterAnnotations(new Annotation[] + { null, helix, sheet, turn, ann4 }, filter); + assertEquals(2, added); + assertTrue(cs.contains(1)); + assertTrue(cs.contains(4)); + } }