Merge branch 'develop' into feature/r2_11_2/JAL-3808_gff2_exonerate
[jalview.git] / test / jalview / io / AnnotationFileIOTest.java
index 05ce22d..9c4be2d 100644 (file)
  */
 package jalview.io;
 
+import static org.testng.AssertJUnit.assertEquals;
 import static org.testng.AssertJUnit.assertNotNull;
 import static org.testng.AssertJUnit.assertTrue;
 
-import jalview.datamodel.AlignmentI;
-import jalview.datamodel.HiddenColumns;
-import jalview.gui.JvOptionPane;
-import jalview.io.AnnotationFile.ViewDef;
-
+import java.awt.Color;
 import java.io.File;
 import java.util.Hashtable;
+import java.util.List;
 
 import org.testng.Assert;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
 
+import jalview.datamodel.AlignmentI;
+import jalview.datamodel.HiddenColumns;
+import jalview.datamodel.SequenceGroup;
+import jalview.gui.AlignFrame;
+import jalview.gui.JvOptionPane;
+import jalview.io.AnnotationFile.ViewDef;
+
 public class AnnotationFileIOTest
 {
 
@@ -165,4 +170,45 @@ public class AnnotationFileIOTest
             + "\nCouldn't complete Annotation file roundtrip input/output/input test for '"
             + annotFile + "'.");
   }
+  
+  @Test(groups="Functional")
+  public void testAnnotateAlignmentView()
+  {
+    long t1 = System.currentTimeMillis();
+    /*
+     * JAL-3779 test multiple groups of the same name get annotated
+     */
+    AlignFrame af = new FileLoader().LoadFileWaitTillLoaded(
+            ">Seq1\nQRSIL\n>Seq2\nFTHND\n>Seq3\nRPVSL\n",
+            DataSourceType.PASTE);
+    long t2 = System.currentTimeMillis();
+    System.err.println("t0: " + (t2 - t1));
+    // seq1 and seq3 are in distinct groups both named Group1
+    String annotationFile = "JALVIEW_ANNOTATION\nSEQUENCE_GROUP\tGroup1\t*\t*\t1\n"
+            + "SEQUENCE_GROUP\tGroup2\t*\t*\t2\n"
+            + "SEQUENCE_GROUP\tGroup1\t*\t*\t3\n"
+            + "PROPERTIES\tGroup1\toutlineColour=blue\tidColour=red\n";
+    new AnnotationFile().annotateAlignmentView(af.getViewport(), annotationFile, DataSourceType.PASTE);
+    
+    AlignmentI al = af.getViewport().getAlignment();
+    List<SequenceGroup> groups = al.getGroups();
+    assertEquals(3, groups.size());
+    SequenceGroup sg = groups.get(0);
+    assertEquals("Group1", sg.getName());
+    assertTrue(sg.contains(al.getSequenceAt(0)));
+    assertEquals(Color.BLUE, sg.getOutlineColour());
+    assertEquals(Color.RED, sg.getIdColour());
+    sg = groups.get(1);
+    assertEquals("Group2", sg.getName());
+    assertTrue(sg.contains(al.getSequenceAt(1)));
+    
+    /*
+     * the bug fix: a second group of the same name is also given properties
+     */
+    sg = groups.get(2);
+    assertEquals("Group1", sg.getName());
+    assertTrue(sg.contains(al.getSequenceAt(2)));
+    assertEquals(Color.BLUE, sg.getOutlineColour());
+    assertEquals(Color.RED, sg.getIdColour());
+  }
 }