X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=test%2Fjalview%2Frenderer%2Fseqfeatures%2FFeatureRendererTest.java;h=3e27aba99a5be13f452c15d21aec6cda19e910a7;hb=f0115a38526bc70b87ee919b3c0f1ba0f7e53989;hp=31348c628f40215e7b5b51a3726b8d04db5b918a;hpb=c70905eb5589c7622a2c7cf8a008ba0863b5c010;p=jalview.git diff --git a/test/jalview/renderer/seqfeatures/FeatureRendererTest.java b/test/jalview/renderer/seqfeatures/FeatureRendererTest.java index 31348c6..3e27aba 100644 --- a/test/jalview/renderer/seqfeatures/FeatureRendererTest.java +++ b/test/jalview/renderer/seqfeatures/FeatureRendererTest.java @@ -14,6 +14,7 @@ import jalview.io.FileLoader; import jalview.schemes.FeatureColour; import java.awt.Color; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; @@ -252,4 +253,105 @@ public class FeatureRendererTest assertEquals(features.size(), 1); assertTrue(features.contains(sf8)); } + + @Test(groups = "Functional") + public void testFilterFeaturesForDisplay() + { + String seqData = ">s1\nabcdef\n"; + AlignFrame af = new FileLoader().LoadFileWaitTillLoaded(seqData, + DataSourceType.PASTE); + AlignViewportI av = af.getViewport(); + FeatureRenderer fr = new FeatureRenderer(av); + + List features = new ArrayList<>(); + fr.filterFeaturesForDisplay(features, null); // empty list, does nothing + + SequenceI seq = av.getAlignment().getSequenceAt(0); + SequenceFeature sf1 = new SequenceFeature("Cath", "", 6, 8, "group1"); + seq.addSequenceFeature(sf1); + SequenceFeature sf2 = new SequenceFeature("Cath", "", 5, 11, "group2"); + seq.addSequenceFeature(sf2); + SequenceFeature sf3 = new SequenceFeature("Cath", "", 5, 11, "group3"); + seq.addSequenceFeature(sf3); + SequenceFeature sf4 = new SequenceFeature("Cath", "", 6, 8, "group4"); + seq.addSequenceFeature(sf4); + SequenceFeature sf5 = new SequenceFeature("Cath", "", 6, 9, "group4"); + seq.addSequenceFeature(sf5); + + fr.findAllFeatures(true); + + features = seq.getSequenceFeatures(); + assertEquals(features.size(), 5); + assertTrue(features.contains(sf1)); + assertTrue(features.contains(sf2)); + assertTrue(features.contains(sf3)); + assertTrue(features.contains(sf4)); + assertTrue(features.contains(sf5)); + + /* + * filter out duplicate (co-located) features + * note: which gets removed is not guaranteed + */ + fr.filterFeaturesForDisplay(features, new FeatureColour(Color.blue)); + assertEquals(features.size(), 3); + assertTrue(features.contains(sf1) || features.contains(sf4)); + assertFalse(features.contains(sf1) && features.contains(sf4)); + assertTrue(features.contains(sf2) || features.contains(sf3)); + assertFalse(features.contains(sf2) && features.contains(sf3)); + assertTrue(features.contains(sf5)); + + /* + * hide group 3 - sf3 is removed, sf2 is retained + */ + fr.setGroupVisibility("group3", false); + features = seq.getSequenceFeatures(); + fr.filterFeaturesForDisplay(features, new FeatureColour(Color.blue)); + assertEquals(features.size(), 3); + assertTrue(features.contains(sf1) || features.contains(sf4)); + assertFalse(features.contains(sf1) && features.contains(sf4)); + assertTrue(features.contains(sf2)); + assertFalse(features.contains(sf3)); + assertTrue(features.contains(sf5)); + + /* + * hide group 2, show group 3 - sf2 is removed, sf3 is retained + */ + fr.setGroupVisibility("group2", false); + fr.setGroupVisibility("group3", true); + features = seq.getSequenceFeatures(); + fr.filterFeaturesForDisplay(features, null); + assertEquals(features.size(), 3); + assertTrue(features.contains(sf1) || features.contains(sf4)); + assertFalse(features.contains(sf1) && features.contains(sf4)); + assertFalse(features.contains(sf2)); + assertTrue(features.contains(sf3)); + assertTrue(features.contains(sf5)); + + /* + * no filtering of co-located features with graduated colour scheme + * sf2 is removed as its group is hidden + */ + features = seq.getSequenceFeatures(); + fr.filterFeaturesForDisplay(features, new FeatureColour(Color.black, + Color.white, 0f, 1f)); + assertEquals(features.size(), 4); + assertTrue(features.contains(sf1)); + assertTrue(features.contains(sf3)); + assertTrue(features.contains(sf4)); + assertTrue(features.contains(sf5)); + + /* + * filtering of co-located features with colour by label + */ + features = seq.getSequenceFeatures(); + FeatureColour fc = new FeatureColour(Color.black); + fc.setColourByLabel(true); + fr.filterFeaturesForDisplay(features, fc); + assertEquals(features.size(), 3); + assertTrue(features.contains(sf1) || features.contains(sf4)); + assertFalse(features.contains(sf1) && features.contains(sf4)); + assertFalse(features.contains(sf2)); + assertTrue(features.contains(sf3)); + assertTrue(features.contains(sf5)); + } }