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_NonStandardRemain() { 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("ACACAOACACAC"), matchesSequenceString("ABAVAVAVABAV") )); } @Test(groups = { "Functional"} ) public void testCreate_ContainsNonStandardAndFilterNonStandard_NonStandardToGap() { var alignment = new Alignment(new Sequence[] { new Sequence("test1", "ACACAOACACAC"), new Sequence("test2", "ABAVAVAVABAV") }); var annotJob = AnnotationJob.create(alignment, true, true, true, true, 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") )); } }