JAL-2110 added alignAsSameSequences to handle 'direct' (copy) case
[jalview.git] / test / jalview / analysis / AlignmentUtilsTests.java
index 727cf22..5c75992 100644 (file)
@@ -2394,4 +2394,53 @@ public class AlignmentUtilsTests
     assertEquals(7, m.getStart());
     assertEquals(9, m.getEnd());
   }
+
+  /**
+   * Test the method that just copies aligned sequences, provided all sequences
+   * to be aligned share the aligned sequence's dataset
+   */
+  @Test(groups = "Functional")
+  public void testAlignAsSameSequences()
+  {
+    SequenceI dna1 = new Sequence("dna1", "cccGGGTTTaaa");
+    SequenceI dna2 = new Sequence("dna2", "CCCgggtttAAA");
+    AlignmentI al1 = new Alignment(new SequenceI[] { dna1, dna2 });
+    ((Alignment) al1).createDatasetAlignment();
+
+    SequenceI dna3 = new Sequence(dna1);
+    SequenceI dna4 = new Sequence(dna2);
+    assertSame(dna3.getDatasetSequence(), dna1.getDatasetSequence());
+    assertSame(dna4.getDatasetSequence(), dna2.getDatasetSequence());
+    String seq1 = "-cc-GG-GT-TT--aaa";
+    dna3.setSequence(seq1);
+    String seq2 = "C--C-Cgg--gtt-tAA-A-";
+    dna4.setSequence(seq2);
+    AlignmentI al2 = new Alignment(new SequenceI[] { dna3, dna4 });
+    ((Alignment) al2).createDatasetAlignment();
+    
+    assertTrue(AlignmentUtils.alignAsSameSequences(al1, al2));
+    assertEquals(seq1, al1.getSequenceAt(0).getSequenceAsString());
+    assertEquals(seq2, al1.getSequenceAt(1).getSequenceAsString());
+
+    /*
+     * add another sequence to 'aligned' - should still succeed, since
+     * unaligned sequences still share a dataset with aligned sequences
+     */
+    SequenceI dna5 = new Sequence("dna5", "CCCgggtttAAA");
+    dna5.createDatasetSequence();
+    al2.addSequence(dna5);
+    assertTrue(AlignmentUtils.alignAsSameSequences(al1, al2));
+    assertEquals(seq1, al1.getSequenceAt(0).getSequenceAsString());
+    assertEquals(seq2, al1.getSequenceAt(1).getSequenceAsString());
+
+    /*
+     * add another sequence to 'unaligned' - should fail, since now not
+     * all unaligned sequences share a dataset with aligned sequences
+     */
+    SequenceI dna6 = new Sequence("dna6", "CCCgggtttAAA");
+    dna6.createDatasetSequence();
+    al1.addSequence(dna6);
+    assertFalse(AlignmentUtils.alignAsSameSequences(al1, al2));
+  }
+    
 }