+
+ //@formatter:on
+
+ /**
+ * Test parse of data including !Label statements. An underscore means no
+ * label, other characters are treated as alignment annotation.
+ *
+ * @throws IOException
+ */
+ @Test(groups = { "Functional" })
+ public void testParse_withLabels() throws IOException
+ {
+ //@formatter:off
+ MegaFile testee = new MegaFile("#MEGA\n"+
+ "TITLE: Interleaved sequence data\n\n" +
+ "#U455 ABC DEF\n" +
+ "#CPZANT MNO PQR\n" +
+ "!Label +-_ 23_\n" +
+ "#U455 KLM NOP\n" +
+ "#CPZANT WXY ZGC\n" +
+ "!label __3 +X_\n", AppletFormatAdapter.PASTE);
+ //@formatter:on
+ Vector<SequenceI> seqs = testee.getSeqs();
+ assertEquals("Expected two sequences", 2, seqs.size());
+ assertEquals("First sequence data wrong", "ABCDEFKLMNOP", seqs.get(0)
+ .getSequenceAsString());
+ assertEquals("Second sequence data wrong", "MNOPQRWXYZGC", seqs.get(1)
+ .getSequenceAsString());
+
+ // check AlignmentAnnotation added with expected values
+ assertEquals(1, testee.annotations.size());
+ AlignmentAnnotation aa = testee.annotations.get(0);
+ assertNull(aa.sequenceRef);
+ assertEquals(12, aa.annotations.length);
+ assertEquals("+, -, , 2, 3, , , , 3, +, X, , ", aa.toString());
+ }
+
+ //@formatter:on
+
+ /**
+ * Test case where a domain is implicitly terminated by starting a new gene
+ *
+ * @throws IOException
+ */
+ @Test(groups = { "Functional" })
+ public void testParse_changeOfGeneEndsDomain() throws IOException
+ {
+ //@formatter:off
+ // uses tab instead of space separators to check robustness
+ MegaFile testee = new MegaFile("#MEGA\n"+
+ "!TITLE Interleaved sequence data;\n" +
+ "!Format Identical=.;\n\n" +
+ "!Gene=gene1 Domain=Exon1 Property=Coding;\n" +
+ "#U455 ABCDEF\n" +
+ "#CPZANT M..P.R\n\n" +
+ "!Gene=gene2;\n" +
+ "#U455 KLMNOP\n" +
+ "#CPZANT ..YZ..", AppletFormatAdapter.PASTE);
+ //@formatter:on
+ Vector<SequenceI> seqs = testee.getSeqs();
+ assertEquals("Expected two sequences", 2, seqs.size());
+ 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());
+
+ for (SequenceI seq : seqs)
+ {
+ SequenceFeature[] sfs = seq.getSequenceFeatures();
+ assertEquals(3, sfs.length);
+ verifySequenceFeature(sfs[0], "Exon1 (gene1 Coding)", "Domain", 1, 6);
+ verifySequenceFeature(sfs[1], "gene1", "Gene", 1, 6);
+ verifySequenceFeature(sfs[2], "gene2", "Gene", 7, 12);
+ }
+ }