Merge branch 'features/JAL-2360colourSchemeApplicability' into features/JAL-2371colle...
[jalview.git] / test / jalview / gui / AlignFrameTest.java
index 60db9dd..d71fe63 100644 (file)
@@ -22,21 +22,33 @@ package jalview.gui;
 
 import static org.testng.AssertJUnit.assertEquals;
 import static org.testng.AssertJUnit.assertFalse;
+import static org.testng.AssertJUnit.assertSame;
 import static org.testng.AssertJUnit.assertTrue;
 
 import jalview.datamodel.Alignment;
 import jalview.datamodel.AlignmentI;
 import jalview.datamodel.Sequence;
 import jalview.datamodel.SequenceFeature;
+import jalview.datamodel.SequenceGroup;
 import jalview.datamodel.SequenceI;
+import jalview.io.DataSourceType;
+import jalview.io.FileLoader;
+import jalview.schemes.BuriedColourScheme;
+import jalview.schemes.HelixColourScheme;
+import jalview.schemes.JalviewColourScheme;
+import jalview.schemes.StrandColourScheme;
+import jalview.schemes.TurnColourScheme;
+import jalview.util.MessageManager;
 
 import java.util.List;
 
 import org.testng.annotations.BeforeClass;
+import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
 public class AlignFrameTest
 {
+  AlignFrame af;
 
   @BeforeClass(alwaysRun = true)
   public void setUpJvOptionPane()
@@ -95,4 +107,137 @@ public class AlignFrameTest
     assertEquals(6, hidden.get(1)[0]);
     assertEquals(8, hidden.get(1)[1]);
   }
+
+  @BeforeMethod
+  public void setUp()
+  {
+    af = new FileLoader().LoadFileWaitTillLoaded("examples/uniref50.fa",
+            DataSourceType.FILE);
+  }
+
+  /**
+   * Test that changing background (alignment) colour scheme
+   * <ul>
+   * <li>with Apply Colour to All Groups not selected, does not change group
+   * colours</li>
+   * <li>with Apply Colour to All Groups selected, does change group colours</li>
+   * <li>in neither case, changes alignment or group colour thresholds (PID or
+   * Conservation)</li>
+   * </ul>
+   */
+  @Test
+  public void testChangeColour_background_groupsAndThresholds()
+  {
+    AlignViewport av = af.getViewport();
+    AlignmentI al = av.getAlignment();
+
+    /*
+     * Colour alignment by Buried Index
+     */
+    af.applyToAllGroups_actionPerformed(false);
+    af.changeColour_actionPerformed(JalviewColourScheme.Buried.toString());
+    assertTrue(av.getGlobalColourScheme() instanceof BuriedColourScheme);
+    assertFalse(av.getViewportColourScheme().conservationApplied());
+    assertEquals(av.getViewportColourScheme().getThreshold(), 0);
+
+    /*
+     * Apply Conservation 20%
+     */
+    af.conservationMenuItem_actionPerformed(true);
+    SliderPanel sp = SliderPanel.getSliderPanel();
+    assertEquals(sp.getTitle(), MessageManager.formatMessage(
+            "label.conservation_colour_increment",
+            new String[] { "Background" }));
+    assertTrue(sp.isForConservation());
+    sp.valueChanged(20);
+    assertTrue(av.getViewportColourScheme().conservationApplied());
+    assertEquals(av.getViewportColourScheme().getConservationInc(), 20);
+
+    /*
+     * Apply PID threshold 10% (conservation still applies as well)
+     */
+    af.abovePIDThreshold_actionPerformed(true);
+    sp = SliderPanel.getSliderPanel();
+    assertFalse(sp.isForConservation());
+    assertEquals(sp.getTitle(), MessageManager.formatMessage(
+            "label.percentage_identity_threshold",
+            new String[] { "Background" }));
+    sp.valueChanged(10);
+    assertEquals(av.getViewportColourScheme().getThreshold(), 10);
+    assertTrue(av.getViewportColourScheme().conservationApplied());
+    assertEquals(av.getViewportColourScheme().getConservationInc(), 20);
+
+    /*
+     * create a group with Strand colouring, 30% Conservation
+     * and 40% PID threshold
+     */
+    SequenceGroup sg = new SequenceGroup();
+    sg.addSequence(al.getSequenceAt(0), false);
+    sg.setStartRes(15);
+    sg.setEndRes(25);
+    av.setSelectionGroup(sg);
+
+    /*
+     * apply 30% Conservation to group
+     */
+    PopupMenu popupMenu = new PopupMenu(af.alignPanel, null, null);
+    popupMenu.changeColour_actionPerformed(JalviewColourScheme.Strand
+            .toString());
+    assertTrue(sg.getColourScheme() instanceof StrandColourScheme);
+    assertEquals(al.getGroups().size(), 1);
+    assertSame(al.getGroups().get(0), sg);
+    popupMenu.conservationMenuItem_actionPerformed(true);
+    sp = SliderPanel.getSliderPanel();
+    assertTrue(sp.isForConservation());
+    assertEquals(sp.getTitle(), MessageManager.formatMessage(
+            "label.conservation_colour_increment",
+            new String[] { sg.getName() }));
+    sp.valueChanged(30);
+    assertTrue(sg.getGroupColourScheme().conservationApplied());
+    assertEquals(sg.getGroupColourScheme().getConservationInc(), 30);
+
+    /*
+     * apply 40% PID threshold to group
+     */
+    popupMenu.abovePIDColour_actionPerformed(true);
+    sp = SliderPanel.getSliderPanel();
+    assertFalse(sp.isForConservation());
+    assertEquals(sp.getTitle(), MessageManager.formatMessage(
+            "label.percentage_identity_threshold",
+            new String[] { sg.getName() }));
+    sp.valueChanged(40);
+    assertEquals(sg.getGroupColourScheme().getThreshold(), 40);
+    // conservation threshold is unchanged:
+    assertTrue(sg.getGroupColourScheme().conservationApplied());
+    assertEquals(sg.getGroupColourScheme().getConservationInc(), 30);
+
+    /*
+     * change alignment colour - group colour, and all thresholds,
+     * should be unaffected
+     */
+    af.changeColour_actionPerformed(JalviewColourScheme.Turn.toString());
+    assertTrue(av.getGlobalColourScheme() instanceof TurnColourScheme);
+    assertTrue(av.getViewportColourScheme().conservationApplied());
+    assertEquals(av.getViewportColourScheme().getConservationInc(), 20);
+    assertEquals(av.getViewportColourScheme().getThreshold(), 10);
+    assertTrue(sg.getColourScheme() instanceof StrandColourScheme);
+    assertTrue(sg.getGroupColourScheme().conservationApplied());
+    assertEquals(sg.getGroupColourScheme().getConservationInc(), 30);
+    assertEquals(sg.getGroupColourScheme().getThreshold(), 40);
+
+    /*
+     * Now change alignment colour with Apply Colour To All Groups
+     * - group colour should change, but not colour thresholds
+     */
+    af.applyToAllGroups_actionPerformed(true);
+    af.changeColour_actionPerformed(JalviewColourScheme.Helix.toString());
+    assertTrue(av.getGlobalColourScheme() instanceof HelixColourScheme);
+    assertTrue(av.getViewportColourScheme().conservationApplied());
+    assertEquals(av.getViewportColourScheme().getConservationInc(), 20);
+    assertEquals(av.getViewportColourScheme().getThreshold(), 10);
+    assertTrue(sg.getColourScheme() instanceof HelixColourScheme);
+    assertTrue(sg.getGroupColourScheme().conservationApplied());
+    assertEquals(sg.getGroupColourScheme().getConservationInc(), 30);
+    assertEquals(sg.getGroupColourScheme().getThreshold(), 40);
+  }
 }