JAL-4241 Test sequences prepared for annotation job
[jalview.git] / test / jalview / ws2 / actions / annotation / AnnotationJobTest.java
diff --git a/test/jalview/ws2/actions/annotation/AnnotationJobTest.java b/test/jalview/ws2/actions/annotation/AnnotationJobTest.java
new file mode 100644 (file)
index 0000000..4e3767f
--- /dev/null
@@ -0,0 +1,264 @@
+package jalview.ws2.actions.annotation;
+
+import static jalview.testutils.Matchers.matchesSequenceString;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.contains;
+import static org.hamcrest.Matchers.hasSize;
+
+import java.util.List;
+
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+
+import jalview.datamodel.Alignment;
+import jalview.datamodel.Sequence;
+import jalview.datamodel.SequenceGroup;
+
+public class AnnotationJobTest
+{
+  @Test(groups = { "Functional" })
+  public void testCreate_EqualLengthNoGapsSubmitGaps()
+  {
+    var alignment = new Alignment(new Sequence[] {
+       new Sequence("test1", "ACACACACACA"),
+       new Sequence("test2", "AVAVAVAVAVA"),
+       new Sequence("test3", "AVWVAVWVAVW")
+    });
+    var annotJob = AnnotationJob.create(alignment, true, false, false, false, 0);
+    assertThat(annotJob.getInputSequences(), contains(
+            matchesSequenceString("ACACACACACA"),
+            matchesSequenceString("AVAVAVAVAVA"),
+            matchesSequenceString("AVWVAVWVAVW")
+    ));
+  }
+
+  @Test(groups = { "Functional" })
+  public void testCreate_EqualLengthNoGapsNoSubmitGaps()
+  {
+    var alignment = new Alignment(new Sequence[] {
+        new Sequence("test1", "ACACACACACA"),
+        new Sequence("test2", "AVAVAVAVAVA"),
+        new Sequence("test3", "AVWVAVWVAVW")
+    });
+    var annotJob = AnnotationJob.create(alignment, true, true, false, false, 0);
+    assertThat(annotJob.getInputSequences(), contains(
+            matchesSequenceString("ACACACACACA"),
+            matchesSequenceString("AVAVAVAVAVA"),
+            matchesSequenceString("AVWVAVWVAVW")
+    ));
+  }
+
+  @Test(groups = { "Functional" })
+  public void testCreate_UnequalLengthNoGapsNoSubmitGaps()
+  {
+    var alignment = new Alignment(new Sequence[] {
+       new Sequence("test1", "ACACACACACA"),
+       new Sequence("test2", "AVAVAVAVAVAVA"),
+       new Sequence("test3", "AVWVAVWVAVWV")
+    });
+    var annotJob = AnnotationJob.create(alignment, true, false, false, false, 0);
+    assertThat(annotJob.getInputSequences(), contains(
+            matchesSequenceString("ACACACACACA"),
+            matchesSequenceString("AVAVAVAVAVAVA"),
+            matchesSequenceString("AVWVAVWVAVWV")
+    ));
+  }
+
+  @Test(groups = { "Functional" })
+  public void testCreate_UnequalLengthNoGapsSubmitGaps()
+  {
+    var alignment = new Alignment(new Sequence[] {
+        new Sequence("test1", "ACACACACACA"),
+        new Sequence("test2", "AVAVAVAVAVAVA"),
+        new Sequence("test3", "AVWVAVWVAVWV")
+     });
+     var annotJob = AnnotationJob.create(alignment, true, true, false, false, 0);
+     assertThat(annotJob.getInputSequences(), contains(
+             matchesSequenceString("ACACACACACA"),
+             matchesSequenceString("AVAVAVAVAVAVA"),
+             matchesSequenceString("AVWVAVWVAVWV")
+     ));
+  }
+
+  @Test(groups = { "Functional" })
+  public void testCreate_UnequalLengthNoGapsSubmitGapsRequireAligned()
+  {
+    var alignment = new Alignment(new Sequence[] {
+        new Sequence("test1", "ACACACACACA"),
+        new Sequence("test2", "AVAVAVAVAVAVA"),
+        new Sequence("test3", "AVWVAVWVAVWV")
+     });
+     var annotJob = AnnotationJob.create(alignment, true, true, true, false, 0);
+     assertThat(annotJob.getInputSequences(), contains(
+             matchesSequenceString("ACACACACACA--"),
+             matchesSequenceString("AVAVAVAVAVAVA"),
+             matchesSequenceString("AVWVAVWVAVWV-")
+     ));
+  }
+
+  @DataProvider
+  public Object[] alignmentWithShortSequences()
+  {
+    return new Object[] {
+        new Alignment(new Sequence[] {
+            new Sequence("test1", "AAAAA"),
+            new Sequence("test2", "ACAACAAACAAC"),
+            new Sequence("test3", "ACA")
+        }),
+        new Alignment(new Sequence[] {
+            new Sequence("test1", "----AAAAA---"),
+            new Sequence("test2", "ACAACAAACAAC"),
+            new Sequence("test3", "-----ACA----")
+        }),
+        new Alignment(new Sequence[] {
+            new Sequence("test1", "--AAA---AA--"),
+            new Sequence("test2", "ACAACAAACAAC"),
+            new Sequence("test3", "-------ACA--")
+        }),
+    };
+  }
+
+  @Test(groups = { "Functional" }, dataProvider = "alignmentWithShortSequences")
+  public void testCreate_TooShortSequence_ShortSequenceRemoved(Alignment aln)
+  {
+    var annotJob = AnnotationJob.create(aln, true, false, false, false, 0);
+    assertThat(annotJob.getInputSequences(), hasSize(1));
+  }
+
+  @Test(groups = { "Functional" }, dataProvider = "alignmentWithShortSequences")
+  public void testCreate_TooShortSequenceAndSubmitGaps_ShortSeqRemoved(Alignment aln)
+  {
+    var annotJob = AnnotationJob.create(aln, true, true, false, false, 0);
+    assertThat(annotJob.getInputSequences(), hasSize(1));
+  }
+
+  @Test(groups = { "Functional" }, dataProvider = "alignmentWithShortSequences")
+  public void testCreate_TooShortSequenceAndRequireAligned_ShortSeqRemoved(Alignment aln)
+  {
+    var annotJob = AnnotationJob.create(aln, true, true, true, false, 0);
+    assertThat(annotJob.getInputSequences(), hasSize(1));
+  }
+
+  @Test(groups = { "Functional" })
+  public void testCreate_EmptyColumnAndSubmitGaps_ColumnExtruded()
+  {
+    var alignment = new Alignment(new Sequence[] {
+        new Sequence("test1", "ACA-ACAA--CACA"),
+        new Sequence("test2", "AVA-AVAA-AVAVA"),
+        new Sequence("test3", "AVAWAVAA-AVWVA")
+    });
+    var annotJob = AnnotationJob.create(alignment, true, true, false, false, 0);
+    assertThat(annotJob.getInputSequences(), contains(
+            matchesSequenceString("ACA-ACAA-CACA"),
+            matchesSequenceString("AVA-AVAAAVAVA"),
+            matchesSequenceString("AVAWAVAAAVWVA")
+    ));
+  }
+
+  @Test(groups = { "Functional" })
+  public void testCreate_EmptyColumnAndRequireAligned_ColumnExtruded()
+  {
+    var alignment = new Alignment(new Sequence[] {
+        new Sequence("test1", "ACA-ACAA--CACA"),
+        new Sequence("test2", "AVA-AVAA-AVAVA"),
+        new Sequence("test3", "AVAWAVAA-AVWVA")
+    });
+    var annotJob = AnnotationJob.create(alignment, true, true, true, false, 0);
+    assertThat(annotJob.getInputSequences(), contains(
+            matchesSequenceString("ACA-ACAA-CACA"),
+            matchesSequenceString("AVA-AVAAAVAVA"),
+            matchesSequenceString("AVAWAVAAAVWVA")
+    ));
+  }
+
+  @Test(groups = { "Functional"} )
+  public void testCreate_ContainsNonStandardAndNoFilterNonStandard_NonStandardToGap()
+  {
+    var alignment = new Alignment(new Sequence[] {
+        new Sequence("test1", "ACACAOACACAC"),
+        new Sequence("test2", "ABAVAVAVABAV")
+    });
+    var annotJob = AnnotationJob.create(alignment, true, true, true, false, 0);
+    assertThat(annotJob.getInputSequences(), contains(
+            matchesSequenceString("ACACA-ACACAC"),
+            matchesSequenceString("A-AVAVAVA-AV")
+    ));
+  }
+
+  @DataProvider
+  public Object[] alignmentWithNonStandardInColumns()
+  {
+    return new Object[] {
+        new Alignment(new Sequence[] {
+            new Sequence("test1", "A-AAAOAAAAAAAA"),
+            new Sequence("test2", "ABAAA-AAAAAAAA")
+        }),
+        new Alignment(new Sequence[] {
+            new Sequence("test1", "ABAAAOAAAAAAAA"),
+            new Sequence("test2", "ABAAABAAAAAAAA")
+        }),
+        new Alignment(new Sequence[] {
+            new Sequence("test1", "A-AAAOAAAAAAAA"),
+            new Sequence("test2", "A-AAA-AAAAAAAA")
+        })
+    };
+  }
+
+  @Test(groups = { "Functional" }, dataProvider = "alignmentWithNonStandardInColumns")
+  public void testCreate_NonStandardInColumnsAndFilterNonStandard_ColumnsExtruded(Alignment aln)
+  {
+    var annotJob = AnnotationJob.create(aln, true, true, true, true, 0);
+    assertThat(annotJob.getInputSequences(), contains(
+            matchesSequenceString("AAAAAAAAAAAA"),
+            matchesSequenceString("AAAAAAAAAAAA")
+    ));
+  }
+
+  @Test(groups = { "Functional" })
+  public void testCreate_SequenceGroup_RegionSubmitted()
+  {
+    var group = new SequenceGroup(List.of(
+       new Sequence("test1", "CCCCAAATAAATAAATCCC"),
+       new Sequence("test2", "----AAATAAATAAAT---")
+    ));
+    group.setStartRes(4);
+    group.setEndRes(15);
+    var annotJob = AnnotationJob.create(group, true, false, false, false, 0);
+    assertThat(annotJob.getInputSequences(), contains(
+            matchesSequenceString("AAATAAATAAAT"),
+            matchesSequenceString("AAATAAATAAAT")
+    ));
+  }
+
+  @Test(groups = { "Functional" })
+  public void testCreate_RegionIncludingGaps_RegionSubmittedWithoutGaps()
+  {
+    var group = new SequenceGroup(List.of(
+       new Sequence("test1", "CCCC-AAATAAATAAAT--CCC"),
+       new Sequence("test2", "-----AAATAAATAAAT-----")
+    ));
+    group.setStartRes(4);
+    group.setEndRes(18);
+    var annotJob = AnnotationJob.create(group, true, false, false, false, 0);
+    assertThat(annotJob.getInputSequences(), contains(
+            matchesSequenceString("AAATAAATAAAT"),
+            matchesSequenceString("AAATAAATAAAT")
+    ));
+  }
+
+  @Test(groups = { "Functional" })
+  public void testCreate_RegionIncludingGapsAndSubmitGaps_RegionSubmittedGapsExtruded()
+  {
+    var group = new SequenceGroup(List.of(
+       new Sequence("test1", "CCCC-AAATAAATAAAT--CCC"),
+       new Sequence("test2", "-----AAATAAATAAAT-----")
+    ));
+    group.setStartRes(4);
+    group.setEndRes(18);
+    var annotJob = AnnotationJob.create(group, true, true, false, false, 0);
+    assertThat(annotJob.getInputSequences(), contains(
+            matchesSequenceString("AAATAAATAAAT"),
+            matchesSequenceString("AAATAAATAAAT")
+    ));
+  }
+}