X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=test%2Fjalview%2Frenderer%2Fseqfeatures%2FFeatureRendererTest.java;h=6bb611c5c0894911edce1b21f66e42ab778ee8dc;hb=32d1b850ae63a01a6b3fae305d9577ac16552515;hp=31348c628f40215e7b5b51a3726b8d04db5b918a;hpb=4c6cd08af580ff73cfce39bec34ae4658a4b4b34;p=jalview.git diff --git a/test/jalview/renderer/seqfeatures/FeatureRendererTest.java b/test/jalview/renderer/seqfeatures/FeatureRendererTest.java index 31348c6..6bb611c 100644 --- a/test/jalview/renderer/seqfeatures/FeatureRendererTest.java +++ b/test/jalview/renderer/seqfeatures/FeatureRendererTest.java @@ -1,3 +1,23 @@ +/* + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ The Jalview Authors + * + * This file is part of Jalview. + * + * Jalview is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * Jalview is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Jalview. If not, see . + * The Jalview Authors are detailed in the 'AUTHORS' file. + */ package jalview.renderer.seqfeatures; import static org.testng.Assert.assertEquals; @@ -14,6 +34,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 +273,117 @@ 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, Float.NaN, + "group1"); + seq.addSequenceFeature(sf1); + SequenceFeature sf2 = new SequenceFeature("Cath", "", 5, 11, 2f, + "group2"); + seq.addSequenceFeature(sf2); + SequenceFeature sf3 = new SequenceFeature("Cath", "", 5, 11, 3f, + "group3"); + seq.addSequenceFeature(sf3); + SequenceFeature sf4 = new SequenceFeature("Cath", "", 6, 8, 4f, + "group4"); + seq.addSequenceFeature(sf4); + SequenceFeature sf5 = new SequenceFeature("Cath", "", 6, 9, 5f, + "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 + * filterFeaturesForDisplay does _not_ check colour threshold + * 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); + assertFalse(features.contains(sf2)); + + /* + * co-located features with colour by label + * should not get filtered + */ + features = seq.getSequenceFeatures(); + FeatureColour fc = new FeatureColour(Color.black); + fc.setColourByLabel(true); + fr.filterFeaturesForDisplay(features, fc); + assertEquals(features.size(), 4); + assertTrue(features.contains(sf1)); + assertTrue(features.contains(sf3)); + assertTrue(features.contains(sf4)); + assertTrue(features.contains(sf5)); + + /* + * no filtering if transparency is applied + */ + fr.setTransparency(0.5f); + features = seq.getSequenceFeatures(); + fr.setGroupVisibility("group2", true); + fr.filterFeaturesForDisplay(features, new FeatureColour(Color.RED)); + assertEquals(features.size(), 5); + } }