JAL-2438 handle null FeatureRenderer in FeatureColourFinder
[jalview.git] / test / jalview / renderer / seqfeatures / FeatureColourFinderTest.java
index 127b6c2..59566ed 100644 (file)
@@ -1,6 +1,8 @@
 package jalview.renderer.seqfeatures;
 
 import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertTrue;
 
 import jalview.api.FeatureColourI;
 import jalview.datamodel.SequenceFeature;
@@ -14,8 +16,8 @@ import jalview.schemes.FeatureColour;
 
 import java.awt.Color;
 
-import org.testng.annotations.BeforeClass;
 import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.BeforeTest;
 import org.testng.annotations.Test;
 
 /**
@@ -47,7 +49,7 @@ public class FeatureColourFinderTest
 
   private FeatureRenderer fr;
 
-  @BeforeClass(alwaysRun = true)
+  @BeforeTest(alwaysRun = true)
   public void setUp()
   {
     // aligned column 8 is sequence position 6
@@ -61,7 +63,8 @@ public class FeatureColourFinderTest
   }
 
   /**
-   * Clear down any sequence features before each test
+   * Clear down any sequence features before each test (not as easy as it
+   * sounds...)
    */
   @BeforeMethod(alwaysRun = true)
   public void setUpBeforeTest()
@@ -83,6 +86,9 @@ public class FeatureColourFinderTest
     {
       fr.setGroupVisibility(group, true);
     }
+
+    fr.clearRenderOrder();
+    av.setShowSequenceFeatures(true);
   }
 
   @Test(groups = "Functional")
@@ -384,4 +390,59 @@ public class FeatureColourFinderTest
     c = finder.findFeatureColour(Color.pink, seq, 10);
     assertEquals(c, new Color(102, 223, 70));
   }
+
+  @Test(groups = "Functional")
+  public void testNoFeaturesDisplayed()
+  {
+    /*
+     * no features on alignment to render
+     */
+    assertTrue(finder.noFeaturesDisplayed());
+
+    /*
+     * add a feature
+     * it will be automatically set visible but we leave
+     * the viewport configured not to show features
+     */
+    av.setShowSequenceFeatures(false);
+    seq.addSequenceFeature(new SequenceFeature("Metal", "Metal", 2, 12,
+            Float.NaN, "MetalGroup"));
+    FeatureColour red = new FeatureColour(Color.red);
+    fr.setColour("Metal", red);
+    fr.featuresAdded();
+    assertTrue(finder.noFeaturesDisplayed());
+
+    /*
+     * turn on feature display
+     */
+    av.setShowSequenceFeatures(true);
+    assertFalse(finder.noFeaturesDisplayed());
+
+    /*
+     * turn off display of Metal
+     */
+    Object[][] data = new Object[1][];
+    data[0] = new Object[] { "Metal", red, false };
+    fr.setFeaturePriority(data);
+    assertTrue(finder.noFeaturesDisplayed());
+
+    /*
+     * turn display of Metal back on
+     */
+    fr.setVisible("Metal");
+    assertFalse(finder.noFeaturesDisplayed());
+
+    /*
+     * turn off MetalGroup - has no effect here since the group of a
+     * sequence feature instance is independent of its type
+     */
+    fr.setGroupVisibility("MetalGroup", false);
+    assertFalse(finder.noFeaturesDisplayed());
+
+    /*
+     * a finder with no feature renderer
+     */
+    FeatureColourFinder finder2 = new FeatureColourFinder(null);
+    assertTrue(finder2.noFeaturesDisplayed());
+  }
 }