JAL-1499 replace identity symbols when parsing
[jalview.git] / test / jalview / io / MegaFileTest.java
index 948efa8..309ffee 100644 (file)
@@ -491,4 +491,80 @@ public class MegaFileTest
     assertEquals("Roundtrip didn't match", expected,
             formatted);
   }
+
+  //@formatter:on
+  
+  /**
+   * Test paste of interleaved mega format data where the identity character is
+   * used in sequences after the first
+   * 
+   * @throws IOException
+   */
+  @Test(groups = { "Functional" })
+  public void testParse_interleavedWithIdentity() throws IOException
+  {
+    //@formatter:off
+    MegaFile testee = new MegaFile("#MEGA\n"+ 
+    "!TITLE Interleaved sequence data;\n" +
+    "!Format Identical=.;\n\n" +
+    "#U455   ABCDEF\n" + 
+    "#CPZANT  M..P.R\n\n" + 
+    "#U455   KLMNOP\n" + 
+    "#CPZANT ..YZ..", AppletFormatAdapter.PASTE);
+    //@formatter:on
+    assertEquals("Title not as expected", "Interleaved sequence data",
+            testee.getAlignmentProperty(MegaFile.PROP_TITLE));
+    Vector<SequenceI> seqs = testee.getSeqs();
+    // should be 2 sequences
+    assertEquals("Expected two sequences", 2, seqs.size());
+    // check sequence names correct and order preserved
+    assertEquals("First sequence id wrong", "U455", seqs.get(0).getName());
+    assertEquals("Second sequence id wrong", "CPZANT", seqs.get(1)
+            .getName());
+    // check sequence data
+    assertEquals("First sequence data wrong", "ABCDEFKLMNOP", seqs.get(0)
+            .getSequenceAsString());
+    assertEquals("Second sequence data wrong", "MBCPERKLYZOP", seqs.get(1)
+            .getSequenceAsString());
+    assertTrue("File format is not flagged as interleaved",
+            testee.isInterleaved());
+  }
+
+  /**
+   * Test paste of noninterleaved format data including identity symbol
+   * 
+   * @throws IOException
+   */
+  @Test(groups = { "Functional" })
+  public void testParse_nonInterleavedWithIdentity() throws IOException
+  {
+    //@formatter:off
+    MegaFile testee = new MegaFile("#MEGA\n"
+    + "!TITLE Noninterleaved sequence data;\n"
+    + "!Format MatchChar=.;\n"
+    + "#U455  \n"
+    + "ABCFEDHIJ\n" 
+    + "MNOPQR\n\n" 
+    + "#CPZANT \n" 
+    + "KL..O..XYZ\n" 
+    + "CG..C\n",
+            AppletFormatAdapter.PASTE);
+    //@formatter:on
+    assertEquals("Title not as expected", "Noninterleaved sequence data",
+            testee.getAlignmentProperty(MegaFile.PROP_TITLE));
+    Vector<SequenceI> seqs = testee.getSeqs();
+    // should be 2 sequences
+    assertEquals("Expected two sequences", 2, seqs.size());
+    // check sequence names correct and order preserved
+    assertEquals("First sequence id wrong", "U455", seqs.get(0).getName());
+    assertEquals("Second sequence id wrong", "CPZANT", seqs.get(1)
+            .getName());
+    // check sequence data
+    assertEquals("First sequence data wrong", "ABCFEDHIJMNOPQR", seqs
+            .get(0).getSequenceAsString());
+    assertEquals("Second sequence data wrong", "KLCFODHXYZCGPQC",
+            seqs.get(1).getSequenceAsString());
+    assertFalse("File format is not flagged as noninterleaved",
+            testee.isInterleaved());
+  }
 }