Merge branch 'alpha/JAL-3362_Jalview_212_alpha' into alpha/merge_212_JalviewJS_2112
[jalview.git] / test / jalview / io / StockholmFileTest.java
index ac807e1..bb822a0 100644 (file)
  */
 package jalview.io;
 
+import static org.testng.Assert.assertTrue;
 import static org.testng.AssertJUnit.assertEquals;
 import static org.testng.AssertJUnit.assertNotNull;
-import static org.testng.AssertJUnit.assertNull;
 import static org.testng.AssertJUnit.assertTrue;
 import static org.testng.AssertJUnit.fail;
 
-import jalview.datamodel.Alignment;
-import jalview.datamodel.AlignmentAnnotation;
-import jalview.datamodel.AlignmentI;
-import jalview.datamodel.Annotation;
-import jalview.datamodel.DBRefEntry;
-import jalview.datamodel.Sequence;
-import jalview.datamodel.SequenceFeature;
-import jalview.datamodel.SequenceI;
-import jalview.gui.JvOptionPane;
-
 import java.io.File;
-import java.io.IOException;
 import java.util.Arrays;
 import java.util.BitSet;
 import java.util.HashMap;
@@ -50,6 +39,17 @@ import org.testng.Assert;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
 
+import jalview.datamodel.Alignment;
+import jalview.datamodel.AlignmentAnnotation;
+import jalview.datamodel.AlignmentI;
+import jalview.datamodel.Annotation;
+import jalview.datamodel.DBRefEntry;
+import jalview.datamodel.Sequence;
+import jalview.datamodel.SequenceFeature;
+import jalview.datamodel.SequenceI;
+import jalview.gui.JvOptionPane;
+import jalview.util.DBRefUtils;
+
 public class StockholmFileTest
 {
 
@@ -98,14 +98,57 @@ public class StockholmFileTest
   }
 
   /**
+   * JAL-3529 - verify uniprot refs for sequences are output for sequences
+   * retrieved via Pfam
+   */
+  @Test(groups = { "Functional" })
+  public void dbrefOutput() throws Exception
+  {
+    // sequences retrieved in a Pfam domain alignment also have a PFAM database
+    // reference
+    SequenceI sq = new Sequence("FER2_SPIOL", "AASSDDDFFF");
+    sq.addDBRef(new DBRefEntry("UNIPROT", "1", "P00224"));
+    sq.addDBRef(new DBRefEntry("PFAM", "1", "P00224.1"));
+    sq.addDBRef(new DBRefEntry("PFAM", "1", "PF00111"));
+    AppletFormatAdapter af = new AppletFormatAdapter();
+    String toStockholm = af.formatSequences(FileFormat.Stockholm,
+            new Alignment(new SequenceI[]
+            { sq }), false);
+    System.out.println(toStockholm);
+    // bleh - java.util.Regex sucks
+    assertTrue(
+            Pattern.compile(
+                    "^#=GS\\s+FER2_SPIOL(/\\d+-\\d+)?\\s+AC\\s+P00224$",
+                    Pattern.MULTILINE).matcher(toStockholm)
+                    .find(),
+            "Couldn't locate UNIPROT Accession in generated Stockholm file.");
+    AlignmentI fromStockholm = af.readFile(toStockholm,
+            DataSourceType.PASTE, FileFormat.Stockholm);
+    SequenceI importedSeq = fromStockholm.getSequenceAt(0);
+    assertTrue(importedSeq.getDBRefs()
+            .size() == 1,
+            "Expected just one database reference to be added to sequence.");
+    assertTrue(
+            importedSeq.getDBRefs().get(0).getAccessionId().indexOf(
+                    " ") == -1,
+            "Spaces were found in accession ID.");
+    List<DBRefEntry> dbrefs = DBRefUtils.searchRefs(importedSeq.getDBRefs(),
+            "P00224");
+    assertTrue(dbrefs.size() == 1,
+            "Couldn't find Uniprot DBRef on re-imported sequence.");
+
+  }
+
+  /**
    * test alignment data in given file can be imported, exported and reimported
    * with no dataloss
    * 
    * @param f
-   *          - source datafile (IdentifyFile.identify() should work with it)
+   *                               - source datafile (IdentifyFile.identify()
+   *                               should work with it)
    * @param ioformat
-   *          - label for IO class used to write and read back in the data from
-   *          f
+   *                               - label for IO class used to write and read
+   *                               back in the data from f
    * @param ignoreFeatures
    * @param ignoreRowVisibility
    * @param allowNullAnnotations
@@ -328,10 +371,11 @@ public class StockholmFileTest
                           || (seq_original[i].getSequenceFeatures() != null && seq_new[in]
                                   .getSequenceFeatures() != null));
           // compare sequence features
-          if (seq_original[i].getSequenceFeatures() != null
+          if (!ignoreFeatures
+                  && seq_original[i].getSequenceFeatures() != null
                   && seq_new[in].getSequenceFeatures() != null)
           {
-            System.out.println("There are feature!!!");
+            System.out.println("Checking feature equivalence.");
             sequenceFeatures_original = seq_original[i]
                     .getSequenceFeatures();
             sequenceFeatures_new = seq_new[in].getSequenceFeatures();